MFC:CDC 类与成员

CDC

定义

  • 设备上下文对象类;

  • 使用成员函数可以进行所有的绘图操作;

作用

  • 获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴绘制直线及绘制简单椭圆和多边形等形状;

  • 安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板

  • 绘制文本、处理字体,使用打印机跳转滚动和播放元文件

成员

  • 处理显示器或打印机设备上下文的成员函数;

  • 处理与窗口客户区关联的显示上下文的成员函数;

  • 两个设备上下文:m_hDC、m_hAttribDC,它们在 CDC 对象创建时参考同一设备;

    • m_hDC:CDC 对象使用的输出设备上下文;

    • m_hAttribDC:CDC 对象使用的输出属性上下文;

CPaintDC

  • CPaintDC 类 | Microsoft Learn

  • 仅为响应 Windows 消息 WM_PAINT 的成员函数提供设备环境,完成客户区绘图操作

  • 在构造时执行 CWnd::BeginPaint,在销毁时执行 CWnd::EndPaint;

/// 在需要绘图的地方添加消息响应函数。
/// 声明CPaintDC对象。
/// 调用BeginPaint函数获取设备上下文。
/// 进行绘图操作。
/// 调用EndPaint函数释放设备上下文。
​
void CMFCDrawingView::OnPaint()
{CPaintDC dc(this); // 绘制椭圆dc.Ellipse(100, 100, 200, 200);// 释放设备上下文dc.EndPaint();
}

PAINTSTRUCT
  • 用于绘制应用程序拥有的窗口的工作区;


typedef struct tagPAINTSTRUCT {HDC  hdc; // 于绘制的显示 DC 的句柄BOOL fErase; // 是否必须擦除背景RECT rcPaint; // 指定请求绘制的矩形的左上角和右下角BOOL fRestore;BOOL fIncUpdate;BYTE rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;

CClientDC

  • CClientDC 类 | Microsoft Learn

  • 非响应 Windows 消息 WM_PAINT 的成员函数提供设备环境,完成客户区临时绘图

  • 管理窗口用户区对应的显示上下文;

  • 处理 Windows 函数 GetDC(在构造时)和 ReleaseDC(在析构时)的调用

void CMFC绘图View::OnHuahua() // 在客户区的(100,100)位置输出字符串
{// 创建对象,在视图对象里画CClientDC dc(this);dc.TextOutA(100,100, " aiyou");//::TextOut(dc.m_hDC, 100, 100, " hello client", strlen(" aiyou"));
}

CWindowDC

  • 管理与整个窗口(包括客户区和非客户区)对应的上下文,包括它的结构和控件

  • 不同于前文的两个类,它可用于绘制窗口的非客户区,如标题栏、边框等

void CMFCDrawingView::OnNcPaint() // 响应WM_NCPAINT消息
{CWindowDC dc(this);// 在非客户区绘制一段文本dc.DrawText("Non-Client Area", &dc, CPoint(10, 10));// 释放设备上下文dc.ReleaseDC();
}

CMetaFileDC

  • 与带元文件的设备上下文对应;

初始化

函数名描述
CreateDC为指定设备创建设备上下文
CreateIC信息上下文,一种不创建设备上下文即获取有关设备信息的快速方式
CreateCompatibleDC创建内存设备上下文,与另一个设备上下文匹配。可以用它在内存中准备图像
DeleteDC删除CDC对象对应的Windows设备上下文
FromHandle给定设备上下文句柄时,返回指向CDC对象的指针。如果CDC对象未附加到句柄,则创建并附加一个临时CDC对象
DeleteTempMap由CWinApp空闲时间句柄调用,删除FromHandle创建的临时CDC对象。同时分离设备上下文
Attach把 Windows 设备上下文附加到 CDC 对象
Detach对象分离
SetAttribDC设置属性设备上下文 m_hAttribDC
SetOutputDC输出设备上下文 m_hDC
ReleaseAttribDC释放
ReleaseOutputDC释放
GetCurrentBitmap返回指向当前选择的 CBitmap 对象的指针
GetCurrentBrushCBrush
GetCurrentFontCFont
GetCurrentPaletteCPalette
GetCurrentPenCPen
GetWindow返回显示设备上下文对应的窗口

设备上下文

函数名描述
GetSafeHdc返回输出设备上下文 m_hDC
SaveDC保存设备上下文当前状态
RestoreDC恢复SaveDC保存的
ResetDC更新 m_hAttribDC 设备上下文
GetDeviceCaps获取有关给定显示设备功能的指定类型指定设备信息
IsPrinting确定正在使用的设备上下文是否用于打印

颜色和调色板

函数名描述
SelectObject选择笔等GDI绘图对象
SelectStockObject选择Windows提供的预定义的一个笔、画刷或字体

绘图

绘图工具

函数名描述
GetNearestColor获取与给定设备能显示的指定逻辑颜色最接近的逻辑色
SelectPalette选择逻辑调色板
RealizePalette把当前逻辑调色板中的调色板入口映射到系统调色板
UpdateColors通过客户区当前颜色在像素基础上与系统调色板的匹配,更新设备上下文的客户区
GetHalftoneBrush取半色调画刷

绘图属性

GetBkColor获取当前背景色
SetBkColor
GetBkMode背景模式
SetBkMode
GetPolyFillMode当前多边形填充模式
SetPolyFillMode
GetROP2当前绘图模式
SetROP2
GetStretchBltMode当前位图拉伸模式
SetStretchBltMode
GetTextColor当前文本颜色
SetTextColor
GetColorAdjustment用于设备上下文的颜色调整值
SetColorAdjustment

绘制

FillRect用指定画刷填充给定矩形
FrameRect矩形周围绘制边界
InvertRect反转矩形内容
DrawIcon图标
DrawDragRect拖拽矩形时擦除并重绘
FillSolidRect用实颜色填充矩形
Draw3Drect三维矩形
DrawEdge矩形边
DrawFrameControl帧控件
DrawState显示图像并应用可视化效果来表示一个状态

坐标

映射

GetMapMode当前映射模式
SetMapMode
GetViewportOrg获取视区起点的 X 和 Y 坐标
SetViewportOrg
OffsetViewportOrg相对于当前视区起点坐标修改视区起点
GetViewportExt视区 X 和 Y 范围
SetViewportExt
ScaleViewportExt相对于当前值修改视区范围
GetWindowOrg窗口起点的X和Y坐标
SetWindowOrg
OffsetWindowOrg相对于当前窗口起点的坐标修改窗口起点
GetWindowExt对应窗口的X和Y坐标
SetWindowExt
ScaleWindowExt相对于当前值修改窗口范围

单位转换

DPtoHIMETRIC设备单位转换为 HIMETRIC 单位
LPtoHIMETRIC逻辑单位转换
DPtoLP
LPtoDP
HIMETRICtoDPHIMETRIC单位转换为设备单位
HIMETRICtoLPHIMETRIC转换为逻辑单位

区域

区域属性

FillRgn用指定画刷填充指定区域
FrameRgn用画刷在指定区域周围绘制边线
InvertRgn反转区域中的颜色
PaintRgn用选取的画刷填充区域

剪切

SetBoundsRect控制指定设备上下文绑定的矩形信息的累计
GetBoundsRect
GetClipBox获取当前剪切边界周围最紧绑定矩形的维数
SelectClipRgn使用指定模式合并给定区域和当前剪切区域
ExcludeClipRect创建包含现有剪切区域减掉指定矩形的一个新剪切区域
ExcludeUpdateRgn通过从剪切区域排除窗口中的更新区域,防止在窗口的无效区域中绘图
IntersectClipRect通过构成当前区域和矩形的交集创建一个新的剪切区域
OffsetClipRgn移动给定设备的剪切区域
PtVisible确定给定点是否在剪切区域内
RectVisible确定给定矩形的任何部分是否在剪切区域内

线

GetCurrentPosition获取笔的当前位置(以逻辑坐标表示)
MoveTo移动当前位置
LineTo从当前位置到一点画直线,但不包括那个点
Arc画一段椭圆弧
ArcTo除了更新当前位置以外
AngleArc画一条线段和圆弧,把当前位置移到圆弧终点
GetArcDirection返回当前圆弧方向
SetArcDirection设备圆弧和矩形函数要用到的绘图方向
PolyDraw画一组线段和Bezier样条。这个函数更新当前位置Polyline画一组与指定点连接的线段
PolyPolyline多组相连线段。这个函数不使用也不更新当前位置
PolylineTo一条或多条直线,并把当前位置移到最后一条直线的终点
PolyBezier一条或多条Bezier样条。不使用也不更新当前位置
PolyBezierTo并把当前位置移到最后一条Bezier样条的终点

文本

TextOut用当前选取字体在指定位置写字符串
ExtTextOut矩形区域写字符串
TabbedTextOut指定位置写字符串,制表符扩展为制表符停止位置数组中指定值
DrawText定矩形内绘制格式化文本
GetTextExtent使用当前字体在属性设备上下文上计算文本行的宽度和高度,确定维数
GetOutputTextExtent输出设备上下文上计算
GetTabbedTextExtent属性设备上下文上计算字符串的宽度和高度
GetOutputTabbedTextExtent输出设备上下文上计算字符串的宽度和高度
GrayString给定位置绘制暗(灰色)文本
GetTextAlign文本对齐标记
SetTextAlign
GetTextFace以空终止字符串形式把当前字体字样名拷贝到缓冲区
GetTextMetrics从属性设备上下文为当前字体获取度量
GetOutputTextMetrics输出设备上下文
SetTextJustification空格添加到字符串的中断字符
GetTextCharacterExtra获取当前字符的额外间距(空格),以像素为单位
SetTextCharacterExtra

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第二十九天(回溯算法篇)|78. 子集

这周开始实习了,期间改了改成绩已经出来的毕业论文,发给导师,不知道有没有发表的机会。实习后,虽然实际任务不多,但每天七点起床,来回通勤两个小时,已让我疲惫。好久没有练手了,这次…

语音AI小夜灯项目

一、项目简介 使用ESP32-S3N8R8模块作为主控芯片,S3内核增加了用于加速神经网络计算和信号处理等的指令,这使得我们可以使用它来快速解析训练好的语音模型进行语音识别的功能。 二、原理解析 本项目由四个部分组成,电源部分、LED照明部分、…

【Manacher】LeetCode-5. 最长回文子串

5. 最长回文子串。 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"…

uniapp二维码有效期倒计时三分钟的效果是实现

需求&#xff1a; 会员码时效只有3分钟有效期&#xff0c;需要在页面倒计时3分钟&#xff0c;没有长按保存的效果实现 效果&#xff1a; 代码&#xff1a; <templete> <view> <uni-list> <view class"custom-list-item" click"onCode(c…

java代码规范(适合写程序之前先了解有助于开发协同)

目录 一、类定义 二、方法定义 三、接口定义 四、变量定义 1、命名规范&#xff1a; 2、类型规范&#xff1a; 3、常量规范&#xff1a; 五、static关键字 1、静态变量&#xff08;类变量&#xff09;&#xff1a; 2、静态方法&#xff08;类方法&#xff09;&#x…

AUTOSAR软件手册文档缩写描述,AUTOSAR_TR_PredefinedNames

由于AUTOSAR文档中的缩写太多&#xff0c;入门者看起开不方便。例如TR、SWS、SRS、EXP模块。 下载链接&#xff1a;https://www.autosar.org/fileadmin/standards/R21-11/FO/AUTOSAR_TR_PredefinedNames.pdf

Leetcode的AC指南 —— 字符串:151. 反转字符串中的单词

摘要&#xff1a; Leetcode的AC指南 —— 字符串&#xff1a;151. 反转字符串中的单词。题目介绍&#xff1a;给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序…

android——自定义TextView

效果展示&#xff1a; 代码解析&#xff1a; 1、首先设置自定义属性&#xff08;res/values下新建一个attrs.xml文件&#xff09; <?xml version"1.0" encoding"utf-8"?> <resources><!-- name 自定义view的名字 CustomTextView--&…

Spring Bean的生命周期(钩子函数)

借鉴&#xff1a;https://www.cnblogs.com/liweimingbk/p/17843970.html https://blog.csdn.net/lxz352907839/article/details/128634404 一、Spring Bean生命周期 如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口&#xff0c;那么在加载Spring配置文…

php composer安装

引言 Composer 是 PHP 中的依赖管理工具。它允许您声明您的项目所依赖的库&#xff0c;并且它将为您管理&#xff08;安装/更新&#xff09;它们。 官网链接&#xff1a;Introduction - Composer 安装 要在当前目录中快速安装 Composer&#xff0c;请在终端中运行以下脚本。…

Flood Fill算法总结

算法思想 从一个起点开始&#xff0c;每一次随机选择一个新加进来的格子&#xff0c;看一下它周围能否扩展新的格子。如果能扩展&#xff0c;那么就扩展进来&#xff0c;直到不能扩展新的格子为止。当然需要判重&#xff0c;同样一个格子只能覆盖一次&#xff0c;这样能够保证时…

DataLoader与Dataset

一、人民币二分类 二、DataLoader 与 Dataset DataLoader torch.utils.data.DataLoader 功能&#xff1a;构建可迭代的数据装载器 &#xff08;只标注了较为重要的&#xff09; • dataset: Dataset类&#xff0c;决定数据从哪读取及如何读取 • batchsize : 批大小 • num_…

数据库之事务

1.事务的定义 事务就是一组数据库操作序列&#xff08;包含一个或多个SQL操作命令&#xff09;&#xff0c;事务会把所有操作看作是一个不可分割的整体向数据库系统提交或者撤销操作&#xff0c;所有操作要么都执行&#xff0c;要么都不执行。 2. 事务的ACID特性 原子性 一…

机器学习异常值处理 逻辑汇总一

一 清除数据中恒定不变值 如果某个数据长时间不变&#xff0c;默认异常&#xff0c;清除掉该部分数据&#xff1a; # 使用 shift 和 cumsum 来创建一个分组键&#xff0c;每次值改变都会增加组号 g (df[沉淀池3号进水流量] ! df[沉淀池3号进水流量].shift()).cumsum()# 使用…

案例253:基于微信小程序的懂球短视频管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SpringBoot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

GC8549 大电流,双通道 12V,短地短电源保护等功能 可替代ONSEMI的LV8548/LV8549

GC8549 可以工作在 3.8~12V 的电源电压上&#xff0c;每 通道能提供高达 1.5A 持续输出电流或者 2.5A 峰值 电流&#xff0c;睡眠模式下功耗小于 1uA。具有 PWM&#xff08;IN/EN&#xff09;输入接口,与行业标 准器件兼容&#xff0c;并具有过温保护&#xff0c;欠压保护&…

【计算机网络】网络层

文章目录 网络层提供的服务虚电路数据报服务虚电路与数据报服务比较 虚拟互连网络IP地址IP层次结构IP地址分类特殊地址子网掩码 子网划分变长子网划分超网合并网络规律 IP地址与MAC地址ARP协议ARP欺骗的应用 数据包数据包首部 路由ICMP协议RIP动态路由协议OSPF协议BGP协议 VPNN…

进程等待(wait和wait函数)【Linux】

进程等待 wait和wait函数【Linux】 进程等待的概念进程等待的必要性进程等待的方法wait函数waitpid函数 非阻塞等待和阻塞等待的对比阻塞等待&#xff1a;非阻塞等待 进程等待的概念 进程等待就是通过 wait/waitpid的方式&#xff0c;让父进程对子进程进行等待子进程退出并且将…

【信号处理:小波包转换(WPT)/小波包分解(WPD) 】

【信号处理&#xff1a;小波包转换&#xff08;WPT&#xff09;/小波包分解&#xff08;WPD&#xff09; 】 小波包变换简介WPT/WPD的基础知识WPT/WPD的主要特点The Wavelet Packet Transform 小波包变换前向小波数据包变换最佳基础和成本函数数学中波纹的最佳基础其他成本函数…

MySQL基础入门:数据库操作全攻略

欢迎进入MySQL的世界&#xff01;MySQL是最受欢迎的关系型数据库管理系统之一&#xff0c;在Web开发中广泛使用。无论你是学生、软件开发者还是数据分析师&#xff0c;掌握MySQL的基本操作对你探索数据世界将大有裨益。在本教程中&#xff0c;我们将从MySQL的安装开始&#xff…