当前位置: 首页 > news >正文

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区域内的所有像素点画成红色。代码及注释见下:

//设置自定义坐标系代码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像素的红色方块。

http://www.lryc.cn/news/467231.html

相关文章:

  • Oracle CONNECT BY、PRIOR和START WITH关键字详解
  • gateway 整合 spring security oauth2
  • Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)
  • Eclipse Java 构建路径
  • FileLink跨网文件摆渡系统:重构跨网文件传输新时代
  • macOS下QuickTime player+Blackhole录视频只录制系统声音
  • Vscode + EIDE +CortexDebug 调试Stm32(记录)
  • qt QApplication详解
  • C++ 图像处理框架
  • 基于知识图谱的美食推荐系统
  • 记录:网鼎杯2024赛前热身WEB01
  • java 提示 避免用Apache Beanutils进行属性的copy。
  • autMan框架对接Kook机器人
  • RK3568平台(camera篇)UVC AICamera集成
  • 【mod分享】极品飞车10魔改模组,全新UI,全新道路,全新建筑,高清植被,全新的道路围栏,全新的天空,体验另一种速度与激情
  • [实时计算flink]数据摄入YAML作业快速入门
  • CMOS 图像传感器:像素寻址与信号处理
  • React Native 项目使用Expo模拟器运行iOS和Android
  • 鸿蒙-键盘弹出时 promptAction.showToast 被遮盖
  • 十一、pico+Unity交互开发教程——手指触控交互(Poke Interaction)
  • Request2:Post请求和Json
  • 【C】数组及其字符串
  • Python 代码实现对《红楼梦》文本的词频统计和数据可视化
  • yjs机器学习数据操作01——数据的获取、可视化
  • w~自动驾驶合集9
  • 232. 用栈实现队列 【复习链表】-用自定义链表实现栈 用栈实现队列
  • G-Set(增长集合,Grow-Only Set)
  • 《Vue.js 组件开发秘籍:从基础到高级》
  • 【Next.js 项目实战系列】03-查看 Issue
  • Android Settings 设置项修改