MFC图形函数学习02——绘制像素点函数

再次强调一下,我们这里学习的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像素的红色方块。

相关推荐
LaoWaiHang3 小时前
MFC案例:图片文件转图标(ico)格式
mfc
KevinRay_10 小时前
Linux系统编程深度解析:C语言实战指南
linux·c语言·mfc·gdb
arriettyandray2 天前
MFC/C++学习系列之简单记录2——thread和Release
mfc
arriettyandray2 天前
MFC/C++学习系列之简单记录4——错误解决与错误提示
mfc
sam-zy3 天前
MFC用List Control 和Picture控件实现界面切换效果
c++·mfc
arriettyandray3 天前
MFC/C++学习系列之简单记录6
mfc
arriettyandray3 天前
MFC/C++学习系列之简单记录——序列化机制
mfc
金士顿3 天前
MFC 文档模板 每个文档模板需要实例化吧
c++·mfc
arriettyandray3 天前
MFC/C++学习系列之简单记录7
mfc
arriettyandray3 天前
MFC/C++学习系列之简单记录11——树控件的使用
mfc