【C++】【MFC】绘图

news/2024/9/29 0:46:58

MFC当中,调用 CDC或者其子类 中的成员变量 m_hDCm_dAttribDC 来获取绘图设备句柄

  CPaintDC 类, 封装了在 WM_PAINT 消息中绘图的绘图设备

  CClientDC 类,封装了在客户区绘图的绘图设备

CGdiObject(绘图对象类)

  封装了各种绘图对象相关的操作,成员变量 m_hObject (绘图对象句柄)

  Cpen类, 封装了画笔的操作

  CBrush类, 封装了画刷的操作

  CFont类,封装了字体的操作

  CBitmap类,封装了位图的操作

画笔:

 1 void CMFCDrwaView::OnPen()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     CClientDC dc(this);
 5     CPen pen(PS_SOLID, 2, RGB(255, 0, 0));
 6     //auto* o = dc.SelectObject(&pen);
 7     auto o = ::SelectObject(dc.m_hDC, pen.m_hObject);
 8     //dc.Rectangle(100, 100, 300, 300);
 9     ::Rectangle(dc.m_hDC, 100, 100, 300, 300);
10     //dc.SelectObject(o);
11     ::SelectObject(dc.m_hDC, o);
12     //pen.DeleteObject();
13     ::DeleteObject(pen.m_hObject);
14 }

画刷:

 1 void CMFCDrwaView::OnBrush()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     CClientDC dc(this);
 5     CBrush brush(RGB(0, 255, 0));
 6     auto o = dc.SelectObject(&brush);
 7     dc.Rectangle(100, 100, 300, 300);
 8     dc.SelectObject(&o);
 9     brush.DeleteObject();
10 }

字体:

 1 void CMFCDrwaView::OnFont()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     CClientDC dc(this);
 5     CFont font;
 6     font.CreatePointFont(300, "Black");
 7     auto o = dc.SelectObject(&font);
 8     dc.TextOut(100, 100, "Hello");
 9     dc.SelectObject(o);
10     font.DeleteObject();
11 }

位图:

 1 void CMFCDrwaView::OnBitmap()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     /*
 5     1、添加位图资源
 6     2、创建一个和当前DC相匹配的内存DC
 7     3、将位图数据发送给内存DC
 8     4、成像
 9     5、将数据要回来
10     6、销毁位图
11     7、销毁内存DC
12     */
13     CClientDC dc(this);
14     CDC memdc;
15     memdc.CreateCompatibleDC(&dc);
16 
17     CBitmap bmp;
18     bmp.LoadBitmap(IDB_BITMAP1);
19     auto o = memdc.SelectObject(bmp);
20 
21     dc.BitBlt(100, 100, 48, 48, &memdc, 0, 0, SRCCOPY);
22 
23     memdc.SelectObject(o);
24 
25     bmp.DeleteObject();
26 
27     memdc.DeleteDC();
28 }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/49093.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

解读MySQL 8.0数据字典的初始化与启动

MySQL 8.0新设计实现的数据字典,解决了之前版本的数据字典冗余,DDL原子性、crash safe等问题。本文分享自华为云社区《MySQL全文索引源码剖析之Insert语句执行过程》,作者:GaussDB 数据库。 本文主要介绍MySQL 8.0数据字典的基本概念和数据字典的初始化与启动加载的主要流程…

中电金信:财务公司数字化转型的“求索”路径与实践分享

​随着全球商业环境的快速变化和国家对数字化发展的高度重视,数字化转型已成为推动经济高质量发展的关键。央国企财务公司的数字化建设程度较商业银行存在很大差距,数字化转型“路漫漫其修远兮”。如何借“数字之力”实现世界一流财务管控体系的总目标,是财务公司要认真思考…

win10 安装cab 补丁

cab文件时win压缩格式,无法直接安装.第一步: 下载dism++ , 如电脑管家中软件管理下载 第二步: 双击 Dism++x86 运行 第三步: 点击更细管理-导入文件

RK3568开发笔记(三):瑞芯微RK3588芯片介绍,入手开发板的核心板介绍

前言目前主流国产芯片为RV11XX、RK33XX、Hi35XX系列,本系列开启RK3588系列的技术教程笔记分享。  本篇主要介绍RK3588芯片和入手开发板的核心板详细介绍。 RK3588芯片介绍简介RK3588,作为瑞芯微电子(Rockchip)旗下的高性能应用处理器芯片,自发布以来便凭借其卓越的性能和…

《最新出炉》系列入门篇-Python+Playwright自动化测试-52- 字符串操作 - 下篇

1.简介 在日常的自动化测试工作中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。 2.测试场景 …

【SQL】SQL中if条件的使用

count(if(a.STS = #{sts}, a.sts, null)) as scssCnt, sum(if(a.sts = #{sts}, a.amt, 0)) as scssAMtView Code[ 版权声明 ]: 本文所有权归作者本人,文中参考的部分已经做了标记! 商业用途转载请联系作者授权! 非商业用途转载,请标明本文链接及出处!

IIC驱动-基于EEPROM存储芯片AT24C02模块和三合一环境传感器AP3216C

本文将基于IIC协议编写EEPROM芯片AT24C02存储芯片的IIC驱动程序,本文内容将分为三个部分:imx6ull的IIC控制器介绍,AT24C02存储芯片介绍,IIC的Linux驱动程序编写。关于IIC协议的内容与介绍这里不展开,相关资料很多,可以自行去查阅,但是这里需要注意的是,IIC协议本身就是…

秒懂双亲委派机制

前言 最近知识星球中,有位小伙伴问了我一个问题:JDBC为什么会破坏双亲委派机制? 这个问题挺有代表性的。 双亲委派机制是Java中非常重要的类加载机制,它保证了类加载的完整性和安全性,避免了类的重复加载。 这篇文章就跟大家一起聊聊,Java中类加载的双亲委派机制到底是怎…