GDI+深入学习之画笔对齐问题

2095 人浏览 | 时间: 2016-03-03 20:27:18 | 作者: 阿郎

画笔是有宽度的,相对于绘制线条来说,画笔宽度向上的中心位置是由其对齐方式决定的。在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);
}

代码实现: