win10, vc6;新建一个单文档工程;
为视类添加鼠标左键弹起消息处理函数;
视类头文件添加一个成员变量:CPoint m_ptOrigin;
视类CPP文件构造函数中初始化,
CMypenView::CMypenView()
{
// TODO: add construction code here
m_ptOrigin.x=20;
m_ptOrigin.y=20;
}
不使用画笔效果如下;
创建一个10像素宽、红色的画笔后,画线效果如下;
鼠标左键弹起代码;
void CMypenView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//HDC hdc;
//hdc = ::GetDC(m_hWnd);
//MoveToEx(hdc,m_ptOrigin.x, m_ptOrigin.y,NULL);
//LineTo(hdc, point.x, point.y);
//::ReleaseDC(m_hWnd,hdc);
CWindowDC dc(this);
CPen pen(PS_SOLID, 10, RGB(255,0,0));
CPen *ptr = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(ptr);
CView::OnLButtonUp(nFlags, point);
}
CPen *ptr = dc.SelectObject(&pen);
画笔为CPen类对象;创建画笔之后,使用dc.SelectObject选入设备描述表;再画线即使用该画笔;上述语句的返回值为原来的画笔;画完图之后再使用 dc.SelectObject(ptr) 把原来的画笔选进设备描述表;
画笔的样式定义如下,
PS_SOLID:实线
PS_DOT:点线
PS_DASH:划线
PS_DASHDOT:点划线
PS_DASHDOTDOT:一划两点的点划线
PS_NULL:透明线
PS_INSIDEFRAME:边框内沿线