画笔是有宽度的,相对于绘制线条来说,画笔宽度向上的中心位置是由其对齐方式决定的。在GDI+中,画笔的对齐方式是由PenAlignment枚举来描述的:
enum PenAlignment
{
PenAlignmentCenter = 0,
PenAlignmentInset = 1
};
PenAlignment枚举了两种格式的对齐方式:居中和嵌入。默认情况下是居中方式。下面,我们来看看实现:
首先新建一个对话框程序:
而后在OnPaint函数中:
PAINTSTRUCT ps;
BeginPaint(&ps);
if(nChecked==1)
{
Graphics graphics(this->m_hWnd);
Pen redpen(Color(255,255,0,0),1);
Pen greenpen(Color(255,0,255,0),8);
//绘制正方形
graphics.DrawRectangle(&redpen,120,50,100,100);
//画圆
greenpen.SetAlignment(PenAlignmentInset);
graphics.DrawEllipse(&greenpen,120,50,100,100);
}
else if(nChecked==2)
{
Graphics graphics(this->m_hWnd);
Pen redpen(Color(255,255,0,0),1);
Pen greenpen(Color(255,0,255,0),8);
//绘制正方形
graphics.DrawRectangle(&redpen,120,50,100,100);
//画圆
greenpen.SetAlignment(PenAlignmentCenter);
graphics.DrawEllipse(&greenpen,120,50,100,100);
}
EndPaint(&ps);
对两个单选按钮建立事件响应:
void C对齐Dlg::OnClickedRadio1()
{
// TODO: 在此添加控件通知处理程序代码
if(!IsFirst)
{
nChecked=1;
InvalidateRect(ClientRect);
}
IsFirst=FALSE;
}
void C对齐Dlg::OnRadio2()
{
// TODO: 在此添加命令处理程序代码
nChecked=2;
InvalidateRect(ClientRect);
}
代码实现: