MFC绘图基础-程序员宅基地

技术标签: c++  

一、MFC绘图基础知识 CDC类

在Windows平台下,GDI图形设备接口被抽象为上下文CDC类。Windows平台直接接受图形数据信息的不是显示器和打印机等硬件设备,而是CDC对象。MFC中,CDC类定义设备上下文对象的基类,封装了所需的成员函数,调用CDC类的成员函数,绘制和打印图形及文字。
CDC类派生出CClientDC类、CMetaFileDC类、CPaintDC类和CWindowDC类。
MFC常用CPoint、CRect、CSize等数据类型。
(1) CPoint类:存放点坐标(x,y);
(2) CRect类:存放矩形左上顶点和右下角顶点的坐标(top、left、right、bottom),其中(top,left)为矩形的左上角顶点,(right,bottom)为矩形的右下角顶点;
(3) CSize类:存放矩形的宽度和高度的坐标(cx,cy),其中cx为矩形的宽度,cy为矩形的高度。
MFC绘图工具类包括GGdiObject、CBitmap、CBrush、CFont、CPallette、CPen和CRgn等。常用的包括:
(1) CBitmap:封装了一个GDI位图,提供位图操作接口;
(2) CFont:封装库GDI字体,可以选作设备上下文中的当前字体;
(3) CBrush:封装了GDI画刷,选作设备上下文的当前画刷,画刷用于填充图形内部;
(4) CPen:封装了GDI画笔,选作设备上下文的当前画笔,画笔用于绘制图形边界线;
(5) CPallette:封装了GDI调色板,提供应用程序火绒显示器之间的颜色接口;
(6) CGdiObject:GDI绘图工具的基类,一般不能之直接使用。
**

二、MFC单文档编程介绍

首先创建MFC项目,选择“MFC应用”工程,然后选择单文档格式,项目样式选择“MFC standard”

在这里插入图片描述

创建完工程,在工作区间主要包括类视图,资源视图和文件视图。其中类视图主要包含各个类,文件视图包括源文件.cpp和头文件.h。
头文件一般用来包含其他头文件、声明一些函数、类,这样在其他文件中直接包含.h文件就可以包含这些函数和类了。当然,对一些小程序可以没有.h文件,而都是写在.cpp文件中,但为以后考虑,还是分开比较好。C++里的函数不是一般都需要声明然后才能使用吗,所以一般把函数的声明放在头文件里面,然后把定义放在cpp文件中,两个文件合起来才是完整的函数。类也是这样。这样的好处是如果你想在其他地方引用已有的函数或类,只要包含这个头文件就行了,很方便。
MFC写代码通常在***View.cpp文件下,在“Test01.cpp”中找到OnDraw()函数,用于绘图:
在这里插入图片描述
**

三、MFC绘图函数

**

这里默认的坐标系是原点在左上角,x向右为正方向,y向下为正方向,但是这和我们平时的坐标系是不一样的,所以我们需要自定义坐标系。

**

四、自定义坐标系

(1)设置映射模式函数
原型:virtual int SetMapMode(int nMapMode);
参数:nMapMode用于指定新的映射模式,可常取MM_ANISOTROPIC。(MM_ANISOTROPIC是窗口范围和设备范围可以任意改变,要求使用SetWindowExt函数设置窗口范围,使用SetViewPortExt函数设置视区的范围)
(2)设置窗口范围函数
原型:virtual CSize SetWindowExt(int cx,int cy);
参数:cx窗口x范围的逻辑单位,cy窗口y范围的逻辑单位
(3)设置视区范围函数
原型:virtual CSize SetViewportExt(int cx,int cy);
参数:cx窗口x范围的逻辑单位,cy窗口y范围的逻辑单位
(4)设置视区原点函数
原型:virtual CPoint SetViewportOrg(int x,int y);
参数:x,y是视区新原点的设备坐标;
在这里插入图片描述
2、使用偏移矩形函数
原型:void OffsetRect(int x,int y);
参数:x左右偏移量,y上下偏移量;
平移后,rect矩形区域和客户区重叠
在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_68276272/article/details/123596614

智能推荐

Monte-Carlo Dropout,蒙特卡罗 dropout-程序员宅基地

文章浏览阅读4.4k次,点赞11次,收藏55次。Monte-Carlo DropoutMonte-Carlo Dropout(蒙特卡罗 dropout),简称 MC dropout。一种从贝叶斯理论出发的 Dropout 理解方式,将 Dropout 解释为高斯过程的贝叶斯近似。云里雾里的,理论证明看起来挺复杂,有兴趣可以参考论文:Dropout as a Bayesian Approximation: Representing..._mc dropout

详细图文一步步记录Spring 5.3源码编译和调试(IDEA+Gradle)的过程_idea gradle怎么编译-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏12次。1 前言最近稍微研究了一下spring源码,看了不少资料发现不少大佬都是将spring源码拉到本地,自己编译完成之后在源码里面直接写注释,当然也更方便了自己学习和调试。所以我也做了一次尝试,在此记录一下编译的过程和遇到的问题。2 环境准备本地编译spring源码我使用的个软件版本如下:系统:Mac os Big SurIDEA:2020.1.2gradle:6.8.3spring: 5.3.7-SNAPSHOTjdk:11.0.113 Spring编译流程3.1 下载安装gradle_idea gradle怎么编译

php生成excel文件_withstartrow false 不生效-程序员宅基地

文章浏览阅读241次。<?php function createExcel($list, $indexKey, $filename = "", $startRow = 1, $excel2007 = false){ require_once APPLICATION_PATH . '/PHPExcel/PHPExcel.php'; require_once APPLICATION_PATH . ..._withstartrow false 不生效

Typora多行公式自动编号+引用_typora公式编号-程序员宅基地

文章浏览阅读1.1w次,点赞21次,收藏43次。Typora公式自动编号文章目录Typora公式自动编号手动键入tag简单公式解决方法公式对齐不能自动编号的问题手动键入tag键入手动方法后加\tag,如行间直接键入$$y=ax+b \tag 1$$y=ax+b(1)y=ax+b \tag{1}y=ax+b(1)这样的问题是公式没有居中手动添加编号效率太低,如果中间插入一个公式,后面的都要动简单公式解决方法公式插入按快捷键而不是直接在行间键入,注意,似乎手动按格式输入不行,必须要用快捷键插入。默认的快捷键是Ctrl+Shift+K_typora公式编号

使用滚动条来显示<el-tree>组件溢出的内容_el-tree节点溢出-程序员宅基地

文章浏览阅读437次。<div style="height:650px;overflow:auto;"> <el-tree></er-tree></div>在<el-tree>组件外面包裹一个divoverflow:auto;如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。overflow:scoll;内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。【注意】:设置元素的长度,长度范围小于背景范围。..._el-tree节点溢出

深度学习——L0、L1及L2范数_l0范数和l1范数-程序员宅基地

文章浏览阅读3.2w次,点赞31次,收藏93次。L1范数和L2范数的差别一个是绝对值最小,一个是平方最小:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。_l0范数和l1范数

随便推点

制作简单的WPF时钟_wpf中时钟控件,可以绑定system.datetime.now吗-程序员宅基地

文章浏览阅读1.2w次。在很早之前,我曾经写过一个GDI+的时钟,见“C#时钟控件 (C# Clock Control)” http://blog.csdn.net/johnsuna/archive/2006/02/13/597746.aspx及“使用C#编写LED样式时钟控件”(http://blog.csdn.net/johnsuna/archive/2006/02/14/598867.aspx),进入WPF时代了,_wpf中时钟控件,可以绑定system.datetime.now吗

【漏洞复现】Fastjson反序列化_fastjson反序列化漏洞复现-程序员宅基地

文章浏览阅读5.4k次,点赞7次,收藏35次。Fastjson反序列化一、简介二、序列化与反序列化三、Fastjson漏洞介绍1、漏洞原理2、RMI3、JNDI4、JEP290四、编写的简单测试的环境五、漏洞版本1、fastjson<=1.2.241.1、TemplatesImpl 利用链分析1.2、JNDI利用链分析1.3、JNDI利用1.4、官方进行的修复2、fastjson<=1.2.413、fastjson<=1.2.424、fastjson<=1.2.455、fastjson<=1.2.476、1.2.48<_fastjson反序列化漏洞复现

【大数据】Hbase如何批量删除指定数据-程序员宅基地

文章浏览阅读878次。一、起因:  Hbase是一个列式存储,nosql类型的数据库,类似mongodb。  目前似乎没有提供批量删除的方法,只有一个单行删除的命令:deleteall 'tablename', rowkey二、删除方法:  方法一:通过写 shell 脚本,从 hbase shell 查出需要删除的 rowkey ,拼成删除命令(deleteall 'tablename', ro..._hbase命令删除多条记录

【Java】方法中的参数传递机制的具体体现_说明java方法中的参数传递机制的具体体现?-程序员宅基地

文章浏览阅读3.1k次。while循环和do-while循环区别While:符合条件时执行Do-while:先做一次再说,之后符合条件时执行_说明java方法中的参数传递机制的具体体现?

Confluent.Kafka 在.net core下的坑_failed to load the librdkafka native library.-程序员宅基地

文章浏览阅读7.4k次。centos 下运行报错:Unhandled Exception: System.DllNotFoundException: Failed to load the librdkafka native library. at Confluent.Kafka.Impl.LibRdKafka.Initialize(String userSpecifiedPath) in C:\Users\sugar..._failed to load the librdkafka native library.

wpa_supplicant 状态机的切换以及事件驱动_enum wpa_event_type 详解-程序员宅基地

文章浏览阅读7.6k次,点赞6次,收藏25次。wpa_supplicant 状态机的切换adb logcat | findstr "wpa_supplicant:.wlan0:.State:"1.一次打开WIFI自动连接的过程09-29 20:53:59.796 4882 4882 D wpa_supplicant: wlan0: State: DISCONNECTED -> DISCONNECTED09-29 2_enum wpa_event_type 详解

推荐文章

热门文章

相关标签