首页 > 代码库 > 详解MFC画笔的使用

详解MFC画笔的使用

了解画笔的使用之前我们先要掌握如何使用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);
这样,我们可以看到画出的是一条红色的粗线。





详解MFC画笔的使用