再次强调一下,我们这里学习的MFC图形函数,是指绘制二维图形的函数。一般来说,一个二维图形组成的基本要素是点、线、面以及相关的颜色。在本文中,将学习绘制像素点函数,与绘制像素点相关的其它基础知识也随着绘图函数学习一并介绍。
一、关于绘制像素点有两个功能相同的函数:
(1)函数SetPixel函数
原型:COLORREF SetPixel(int x,int y,COLORREF color);
参数:x、y屏幕上像素点坐标
clolor 绘制像素点使用的颜色
返回值:返回值类型为COLORREF,即返回所使用的颜色
(2)SetPixelV函数
原型:BOOL SetPixelV(int x,int y,COLORREF color);
参数:x、y屏幕上像素点坐标
color 绘制像素点使用的颜色
返回值:返回值为BOOL类型,成功返回非0数,失败返回0
二、对两个函数的说明
(1)这两个函数的绘图效果是一样的,第二个函数的执行速度要快一些。
(2)两个函数的返回值类型不同。
(3)这两个函数都是CDC类的成员函数,因此使用时都需要CDC类对象或指针调用,我们在OnDraw函数中绘图时,传入的参数pDC就是CDC类对象指针,使用它就能调用各种绘图函数,格式:pDC->SetPixel(x,y,color);。
三、相关基础知识
(1)CDC类:定义设备上下文对象的基类,设备可以理解成就是显示屏,上下文就是显示的内容;这个类内封装了绘图所需的成员函数。绘制像素点的两个函数就是这个类的成员函数,所以使用这两个函数需要CDC类的指针调用。这个类的函数还有很多,后边会一一学到。
(2)关于COLORREF,它是MFC中表示颜色的一个类型,其本质是DWORD(无符号长整型)。为COLOREF对象赋值会使用到一个有参宏RGB()(和函数差不多),RGB宏返回值就是COLORREF类型的颜色值,可供有关绘图函数使用。RGB有三个参数:red、green、blue。这三个参数的类型是BYTE,BYTE类型的本质是由8个二进制位组成的无符号整形,和char一样,十进制取值范围是0~255。
举例:定义一个纯红色COLORREF对象,步骤:COLORREF Red=RGB(255,0,0);。我们把这个Red作为参数传入到绘制像素点函数内,就能绘制出红色的点了。
四、案例程序(提示:代码插入到OnDraw函数"TODO:"下面即可运行)
编制一段MFC程序,在自定义坐标系中,将 -5≤ x ≤5 且 -5≤ y ≤5区域内的所有像素点画成红色。代码及注释见下:
cpp
//设置自定义坐标系代码
CRect rect;//定义CRect类对象
GetClientRect(rect);//将窗口客户区位置、大小信息保存到rect中
pDC->SetMapMode(MM_ANISOTROPIC); //模式选择:自定义坐标系
pDC->SetWindowExt(rect.Width(), rect.Height()); //设置逻辑窗口尺寸
pDC->SetViewportExt(rect.Width(), -rect.Height()); //设置窗口物理尺寸
pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);//设置原点
rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);//重置rect的位置
//在自定义坐标系 -5≤ x ≤5 且 -5≤ y ≤5组成的方形区域内画上红色像素点
COLORREF Red= RGB(255,0,0); //设置红色
for (int x = -5; x <= 5; x++) //x轴循环
{
for (int y = -5; y <= 5; y++) //y轴循环
{
pDC->SetPixelV(x,y,Red); //利用OnDraw参数pDC调用SetPixelV
}
}
//运行效果:在窗口正中出现一个10*10像素的红色方块。