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像素的红色方块。

相关推荐
carver w1 天前
MFC,C++,海康SDK,回调,轮询
开发语言·c++·mfc
芒果很香1 天前
MFC中使用EXCEL的方法之一
excel·mfc
逐梦,无惧!6 天前
MFC的使用——使用ChartCtrl绘制曲线
c++·mfc
watson_pillow8 天前
mfc按钮点击事件没有触发,且程序卡死
c++·mfc
界面开发小八哥9 天前
MFC扩展库BCGControlBar Pro v36.2:MSAA和CodedUI测试升级
c++·mfc·bcg·界面控件
mit6.82411 天前
[LVGL] 配置lv_conf.h | 条件编译 | 显示屏lv_display
c++·mfc
萑澈15 天前
国产开源大模型崛起:使用Kimi K2/Qwen2/GLM-4.5搭建编程助手
c++·开源·mfc
老狼主20 天前
MFC CChartCtrl编程
c++·mfc
一杯科技拿铁20 天前
go‑cdc‑chunkers:用 CDC 实现智能分块 & 强力去重
c++·mfc
西哥写代码22 天前
基于dcmtk的dicom工具 第九章 以json文件或sqlite为数据源的worklist服务(附工程源码)
sqlite·json·mfc·dcmtk·worklist