了解画笔的使用之前我们先要掌握如何使用MFC画一条线,了解MFC画线之前我们还要知道Win32 API如何画线,了解Win32 API画线之前我们先要知道DC
DC,设备描述表,我们在不同的系统绘图就要和不同的设备驱动程序打交道,那将是相当的困难和繁琐,DC就代替程序员完成了这个工作。
想要在窗口上绘图或显示文字就要使用DC,大体步骤如下:
(1)声明DC句柄:HDC hdc;
(2)获取窗口句柄:hdc=GetDC(hwnd);
(3)画图、写文字等;
(4)释放句柄:ReleaseDC(hwnd,hDC);
那么,如果想要画一条,则:
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);*/
其中,m_hwnd是窗口句柄,m_ptOrigin是起点坐标,point是终点坐标
注意,如果在某个类中使用这段代码,GetDC和ReleaseDC前面要有冒号,表示是Win32平台的函数。
而MFC中提供了CDC类用于绘图,它有很多派生类,如CClientDC(客户区域绘图)、CWindowDC(客户区域和非客户区域绘图),
用CClientDC完成画线操作的代码如下:
CClientDC dc(this); CClientDC dc(GetParent()); dc.MoveTo(m_ptOrigin); dc.LineTo(point);
用上述代码你会发现画出来的是很细的一条黑线,那么如何更改它的样式呢,下面终于轮到我们的画笔出场了。
编辑画笔就可以改变画线的样式,MFC的CPen类。
我们先要创建一个画笔:CPen pen();构造函数cpen()是重载函数,其中一个有三个参数:画笔样式、宽度、颜色,其中颜色是由一个宏RGB决定,EGB有三个参数,即红绿蓝,每个参数值可设为0-255,全0即黑色,全255即白色,具体可以查看MSDN文档。
我们就创建一个红色的粗画笔:
CPen pen(PS_SOLID, 10, RGB(0, 0, 255));
现在创建的画笔不会生效,需要将画笔应用到DC中,MFC提供SelectObject函数完成此功能,要注意的是,SelectObject函数的参数是画笔对象指针,返回值是被替换的画笔指针,我们需要创建一个CPen对象保存这个旧的指针,保证用完这个画笔后,画笔的样式恢复到初值,代码:
CClient dc(this); CPen *oldPen=dc.SelectObject(&pen);
然后画线:
dc.MoveTo(m_ptOrigin); dc.LineTo(point);
最后要恢复画笔初始样式:
dc.SelectObject(&pOldPen);这样,我们可以看到画出的是一条红色的粗线。