在windows系统中,程序都是通过图形设备接口(GDI)的抽象接口和硬件打交道。
GDI是Windows系统核心的三种动态链接库之一,管理Windows系统的所有程序的图形输出。
设备描述表(DC),DC是一个数据结构,当程序向GDI设备中绘图时,需要访问该设备的DC。MFC将GDI的DC封装在C++类中,包括CDC类和CDC派生类,这些类中的许多成员都是对本地GDI绘图函数进行简单封装而形成的内联函数。
CDC类是GDI封装在MFC中最大的一个类,它表示总的DC
(1)画点
SetPixel()函数可以在制定的坐标位置按指定的 颜色画点。函数原型如下:
COLORREF CDC::SetPixel(int X,int Y,COLORREF crColor);
其中,X Y为点的坐标,crColor为点的颜色值。函数调用成功返回像素的颜色值。颜色值通过RGB(Red,Green,Bule)来设置,如在视图类中OnDraw()函数中加入下列语句:
pDC->TextOut(20,20,_T("point:"));
pDC->SetPixel(100,20,RGB(255,0,0));
pDC->SetPixel(110,20,RGB(0,255,0));
pDC->SetPixel(120,20,RGB(0,0,255));
运行结果为:
(2)画直线和折线
画直线需要LineTo()和MoveTo()两个函数配合使用
BOOL CDC::LineTo(int nXEnd,int nYEnd); //以当前位置所在点为直线的起点,直线的终点位置由nxEnd, nYEnd)控制
BOOL CDC::MoveTo(int X,int Y); //将当前位置移动到指定位置,它并没有画出直线。
如在视图类中OnDraw()函数中加入下列语句:
pDC->TextOut(20,60,_T("Line"));
pDC->MoveTo(20,90);
pDC->LineTo(160,90);
运行结果为:
Polyline()函数用来画一条折线,而PolyPolyline()函数用来画多条折线。函数原型如下:
BOOL CDC::Polyline(COUST POINT *lppt,int cPoints);
BOOL CDC::PolyPolyline(COUST POINT *lppt,COUST DWORD *lpdwPolyPoints,DWORD cCount);
在Polyline()函数中,lppt是指向折线顶点的指针,而cPoints是折线顶点数组中的顶点数。例如,绘制一条具有4个顶点的折线,
POINT polylinepoint[4]={{70,240},{20,190},{70,190},{20,240}};
pDC->Polyline(polylinepoint,4);
在PolyPolyline()函数中,lppt是指向折线顶点的指针,而lpdwPolyPoints是折线顶点数组,cCount参数指定折线的数目。例如
POINT polylinepointPt[9]={{95,160},{120,185},{120,250},{145,160},{120,185},{90,185},{150,185},{80,210},{160,210}};
DWORD dwPolyPoints[4]={3,2,2,2}; //分四段折线,分别占用3,2,2,2个顶点
pDC->PolyPolyline(polylinepointPt,dwPolyPoints,4);