CWnd,HWND; CDC,HDC

简介: CWnd,HWND; CDC,HDC

一:CWnd、HWND、HANDLE

CWnd: Window Class 窗口基类

HWND: Window Handle 窗口句柄

HANDLE: handle 句柄

(1)HWND   hWnd;  

   CWnd *pWnd = CWnd::FromHandle(hWnd);

(2)CWnd *pWnd = GetDlgItem(IDC_STATIC_SHOW);

   HWND hWnd = pWnd->m_hWnd; //m_hWnd是CWnd的一个成员

(3)CWnd *pWnd = GetDlgItem(IDC_STATIC_SHOW);

   pWnd = GetClientRect(&rect);

   CDC *pDC = pWnd->GetDC();

   StrectchDIBits(pDC->m_hDC, ...);

二:CDC、HDC

DC: Device Context 设备描述表,一种包含设备信息的数据结构

CDC: DC的基类

HDC: DC的句柄

(1)HDC hdc = ::GetDC(m_hWnd); //m_hWnd是当前窗口句柄

   ::ReleaseDC(m_hWnd, hdc);

(2)CDC* pDC = GetDC();

  ReleaseDC(pDC);

(3)CClientDC是CDC的派生类,管理窗口客户区的显示。使用它定义DC对象,不需要显式调用GetDC和ReleaseDC函数。

   CClientDC dc(this);

   dc.MoveTo(0,0);

   dc.LineTo(100,100);

(4)CWindowDC是CDC的派生类,管理这个窗口的显示。使用它定义DC对象,不需要显式调用GetDC和ReleaseDC函数。

   CWindowDC dc(this);

   dc.MoveTo(0,0);

   dc.LineTo(100,100);

(5)CPaintDC是CDC的派生类,只能应用在OnPaint()函数中。

   CPaintDC dc(this);

   HDC hdc = dc.GetSafeHdc();

   //或HDC hdc = dc.m_hDC;




三:HDC,CDC,CClientDC的区别和联系是什么?


HDC,CDC,CClientDC的区别和联系是什么?


HDC是句柄;

CDC是MFC封装的Windows设备相关的一个类;

CClientDC是CDC的衍生类,产生对应于Windows客户区的对象.


pDC 是类指针  

HDC 是windows句柄通过pDC获得hdc:  

HDC hdc=pDC->GetSafeHdc(); 通过hdc获得pDC:  

CDC *pDC=new CDC;  

pDC->Attach(hdc);


HDC是WINDOWS的一种数据类型,是设备描述句柄。

 

***而CDC是MFC里的一个封装类,它封装了几乎所有的关于HDC的操作。该类提供了一个数据成员m_hDC,用来保存与CDC类相关的DC句柄。 HDC m_hDC;  


也可以这样说,HDC定义的变量指向一块内存,这块内存用来描述一个设备的相关的内容,所以也可以认为HDC定义的是一个指针;而CDC类定义一个对象,这个对象拥有HDC定义的一个设备描述表,同时也包含与HDC相关的操作的函数.这与HPEN和CPen,POINT与CPoint之间的差别是一样的。


相关文章
|
10月前
|
人工智能 安全 Java
SpecKit 在成熟 Java 项目中的 AI 编码实践
本文探索AI Code与SpecKit在Java应用中的实践,结合规格驱动开发(SDD)与测试驱动开发(TDD),通过定义原则、需求规格化、技术方案设计等步骤,实现风格统一、可追溯的AI辅助编码。分享选型考量、执行流程及问题优化,总结经验并沉淀为应用级知识资产,提升研发效率与代码规范性。(239字)
3088 13
SpecKit 在成熟 Java 项目中的 AI 编码实践
|
JSON 前端开发 JavaScript
前端上传文件前校验文件数据
该文介绍了如何在Vue项目中实现批量导入Excel数据的校验。使用Element UI的`el-upload`组件上传文件,通过FileReader读取内容,结合XLSX库解析Excel为JSON。解析过程包括将二进制数据转换为workbook对象,提取worksheet并转化为JSON。之后,遍历JSON数据进行字段校验,若发现空值则记录错误。提供的Demo展示了选择Excel文件后控制台显示校验结果。技术栈包括vue 2.6.14、element ui 2.15.14和xlsx 0.17.0。建议将此类功能封装为通用组件以复用。
937 2
前端上传文件前校验文件数据
|
Ubuntu Java Linux
Linux 安装 Qualcomm ® SnapdragonTM Profiler
通过本文的详细介绍,您应该已经成功在 Linux 系统上安装并配置了 Qualcomm® Snapdragon™ Profiler,并能够连接 Android 设备进行性能分析。Snapdragon Profiler 提供了丰富的工具和功能,可以帮助开发者深入了解应用程序的性能瓶颈,从而进行优化。希望本文能对您有所帮助,让您在开发过程中更高效地使用 Snapdragon Profiler 进行性能分析和优化。
1109 10
|
安全 程序员 数据处理
CreateFileMapping函数详解
CreateFileMapping函数详解
1020 2
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
5G vr&ar UED
载波聚合:赋能5G高速率通信的关键技术
载波聚合:赋能5G高速率通信的关键技术
4253 5
|
算法 前端开发
详解双端队列&单调队列
详解双端队列&单调队列
|
Kubernetes Linux 网络安全
K8S 离线安装版 1.23.1
在准备Kubernetes (k8s) 集群部署时,执行了以下步骤: 1. 关闭防火墙和服务:`systemctl stop firewalld && systemctl disable firewalld`,并禁用SELinux和swap。 2. 添加主机条目到`/etc/hosts`,同步时间使用`ntpdate time.windows.com`。 3. 设置k8s仓库源,安装必要的工具,如`yum install yum-utils -y`。 4. 安装Docker,并下载k8s相关软件包。 5. 制作离线包,使用`docker save`保存镜像,然后在目标机器上用`docker
1973 0
|
存储 传感器 编解码
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
5311 1
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
697 0