CDC,CClientDC,CPaintDC,CWindowDC 比较区别

Vue2 - 最新实现接入使用天地图及卫星视图切换功能,在国家天地图上自由切换地图显示类型(卫星视图/地形视图/卫星混合/地形混合/普通视图)vue天地图切换视图显示改成卫星风格,切换地图图层完整代码 vue2,nuxt2,天地图,视图,卫星,地图类型切换,vue天地图,改成卫星视角,在线地图切换,来回切换卫星图,天地图如何实现来回切换卫星图,地形图,卫星视图,vue中使用天地图自定义样式切换地图图层,切换报错,加载出错,卫星图太卡,地图图层更换,vue安装集成天地图详细示例源码,切换地图的样式,在天地图中如何将地图的类型随意更换,提供多种视图模式用户自由点击更换,VUE引入天地图卫星版,详细教程示例源码代码,天地图切换卫星用什么api,卫星视角API方法,vue2卫星天地图,能改地图的显示方式,图层类型 阅读详情
MFC中的CDC,CClientDC,CPaintDC,CWindowDC的区别

CDC是Windows绘图设备的基类。

CClientDC:
(1)(客户区设备上下文)用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC。

CPaintDC:
(1)用于响应窗口重绘消息(WM_PAINT)是的绘图输出。
(2)CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。
(3)CPaintDC也只能用在WM_PAINT消息处理之中。

CWindowDC:
(1)可在非客户区绘制图形,而CClientDC,CPaintDC只能在客户区绘制图形。
(2)坐标原点是在屏幕的左上角,CClientDC,CPaintDC下坐标原点是在客户区的左上角。
(3)关联一特定窗口,允许开发者在目标窗口的任何一部分进行绘图,包含边界与标题,这种DC同WM_NCPAINT消息一起发送。

===========

CPaintDC用于响应窗口重绘消息(WM_PAINT)是的绘图输出。CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。CPaintDC也只能用在WM_PAINT消息处理之中。

系统何时发送WM_PAINT消息?

系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过InvalidateRect和InvalidateRgn函数来完成的。InvalidateRect和InvalidateRgn把指定的区域加到窗口的Update Region中,当应用的消息队列没有其他消息时,如果窗口的Update Region不为空时,系统就会自动产生WM_PAINT消息。

系统为什么不在调用Invalidate时发送WM_PAINT消息呢?又为什么非要等应用消息队列为空时才发送WM_PAINT消息呢?这是因为系统把在窗口中的绘制操作当作一种低优先级的操作,于是尽可能地推后做。不过这样也有利于提高绘制的效率:两个WM_PAINT消息之间通过InvalidateRect和InvaliateRgn使之失效的区域就会被累加起来,然后在一个WM_PAINT消息中一次得到更新,不仅能避免多次重复地更新同一区域,也优化了应用的更新操作。像这种通过InvalidateRect和InvalidateRgn来使窗口区域无效,依赖于系统在合适的时机发送WM_PAINT消息的机制实际上是一种异步工作方式,也就是说,在无效化窗口区域和发送WM_PAINT消息之间是有延迟的;有时候这种延迟并不是我们希望的,这时我们当然可以在无效化窗口区域后利用SendMessage 发送一条WM_PAINT消息来强制立即重画,但不如使用Windows GDI为我们提供的更方便和强大的函数:UpdateWindow和RedrawWindow。UpdateWindow会检查窗口的Update Region,当其不为空时才发送WM_PAINT消息;RedrawWindow则给我们更多的控制:是否重画非客户区和背景,是否总是发送WM_PAINT消息而不管Update Region是否为空等。

说明:在绘图时推荐使用CClientDC,CPaintDC和CWindowDC对象,而不推荐直接使用CDC对象。

建立项目,采用单文档结构

HDC:

首先在CYourClassView类中add windows message handler, 一个是LButtonDown, 另一个是LButtonUp. 添加成员变量:m_ptOrigin用来记录初始点位置。

在view结构体中初始化m_ptOrigin变量:

CYourClassView:: CYourClassView ()

{

       // TODO: add construction code here

       m_ptOrigin=0;

}

在LButtonDown函数里面添加代码:

void CYourClassView::OnLButtonDown(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       m_ptOrigin=point;

       CView::OnLButtonDown(nFlags, point);

}

在LButtonUp中添加代码,首先使用HDC:

void CYourClassView::OnLButtonUp(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       HDC hdc;

       hdc=::GetWindowDC(m_hWnd);

       MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);

       LineTo(hdc,point.x,point.y);

       ::ReleaseDC(m_hWnd,hdc);


       CView::OnLButtonUp(nFlags, point);

}

使用CDC:

void CYourClassView::OnLButtonUp(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       CDC *pdc=GetDC();

       pdc->MoveTo(m_ptOrigin);

       pdc->LineTo(point);

       ReleaseDC(pdc);


       CView::OnLButtonUp(nFlags, point);

}

使用CClientDC:

void CYourClassView::OnLButtonUp(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       CClientDC dc(this);

       dc.MoveTo(m_ptOrigin);

       dc.LineTo(point);


       CView::OnLButtonUp(nFlags, point);

}

使用CWindowDC:

void CYourClassView::OnLButtonUp(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       CWindowDC dc(this);

       dc.MoveTo(m_ptOrigin);

       dc.LineTo(point);


       CView::OnLButtonUp(nFlags, point);

}

一文讲透 SAP VDM 命名里的前缀与后缀:看懂 I_、C_、A_,把 CDS 视图栈搭得又稳又好用 SAP S/4HANA 的 CDS 视图命名规范解析 摘要:本文详细解析 SAP S/4HANA 中 CDS 视图的 VDM 命名规范。通过前缀(如 I_、C_、R_)区分视图层级,后缀标记附加角色,结合 @VDM.viewType 注解形成完整语义体系。I_作为稳定接口层,C_面向特定场景裁剪,R_限定应用域内复用,A_提供远程 API 接口。命名规范使团队能快速识别视图用途、依赖关系和扩展边界,确保模型长期可维护性。文章结合制造业物料主数据、Fiori 应用等实际案例,说明如何通过规范命名构建清晰的视图 阅读详情

相关推荐

从零构建个性化AI助手:基于Mem0与本地大模型的记忆化实践

本文详细介绍了如何利用Mem0与本地大模型构建个性化AI助手,实现记忆化应用结构的实践方法。从开发环境搭建、记忆存储机制到个性化交互实现,提供了完整的解决方案和代码示例,帮助开发者在本地环境中创建能记住用户习惯和偏好的智能助手。

weixin_29214335的博客 470

CPaintDC 、CWindowDC、 CClientDC、 CDC的区别与联系

DC就是设备上下文(Device Context, DC),可以把它理解成“画布”。 操作系统本来是使用HDC(HDC是DC的句柄,API中的一个类似指针的数据类型.)进行绘画的。 MFC中把HDC包装成了CDC类(MFC类的前缀都是C开头的),提供给程序员使用。 CPaintDC的父类就是CDC,换句话说两者底层使用同一种方法进行绘图。 MFC是通过消息泵信息处理的。CPaintDC内部发出绘图消息给系统。所以描画画面时,最好使用CPaintDC。 CDC只是HDC的包装,不包含绘图消息的发送。所以,创建

顺其自然~专栏 1099

Fiddler Everywhere保姆级教程:10分钟搞定手机HTTPS抓包(附证书配置避坑指南)

本文提供Fiddler Everywhere移动端HTTPS抓包的保姆级教程,涵盖环境配置、代理设置、证书安装及常见问题排查。重点解析如何正确安装并信任Fiddler根证书以解密HTTPS流量,帮助开发者快速搭建抓包环境,高效分析应用网络行为,提升调试效率。

git9versioner的博客 705

CPaint、CClientDC、CWindowDC以及CDC的区别

1、BeginPaint()和EndPaint(),GetDC()和EndDC()区别      BeginPaint()和EndPaint(),BeginPaint()函数原型如下:HDC BeginPaint( __in   HWND hwnd, __out  LPPAINT

swingboard的专栏 1875

使用Termux在Android设备上编译运行SpecCPU2006

SPEC2006搭配Termux,竟然还能这么玩?!

菜菜的菜园子 2962

告别GPS,用Sentinel-1数据+Python实战SBAS-InSAR监测城市地面沉降(保姆级教程)

本文详细介绍了如何利用Sentinel-1数据和Python实现SBAS-InSAR技术监测城市地面沉降。通过保姆级教程,从环境配置、数据获取到干涉处理、时序分析和形变反演,逐步解析全流程技术细节,帮助读者掌握毫米级精度的形变监测方法,并以上海陆家嘴区域为例展示实际应用效果。

weixin_32771907的博客 536

CDC绘图总结

GDI总结:http://dingchaoqun12.blog.163.com/blog/static/11606250420112213396361/ 对话框 控件 视图类 应用程序框架都会调用该CWnd的消息响应成员函数(的覆盖)来绘制窗口客户区。 在Windows中,绘图一般在视图窗口的客户区进行,使用的是MFC的设备上下文DC类CDC中各种绘图函数。 在绘图前,必须先得到客户区...

数据库天地 568

EtherCAT应用层协议选型指南:CoE、SoE、EoE、FoE、AoE到底怎么选?看完这篇就懂了

本文深入解析EtherCAT应用层协议(CoE、SoE、EoE、FoE、AoE)的选型策略,从实时性、数据吞吐量和功能完整性三大核心指标出发,提供工业场景下的实战决策框架。通过技术特性对比、混合协议架构设计和常见故障规避指南,帮助工程师优化自动化设备通信性能。

weixin_28718793的博客 495

RGMII时钟延迟配置详解:从原理到故障排查,解决千兆丢包难题

在嵌入式网络调试中,千兆以太网接口的稳定传输高度依赖MAC与PHY之间的时序配合。RGMII作为精简的吉比特介质独立接口,通过DDR双沿采样将引脚数量减半,却对时钟与数据的相对延迟提出了严苛要求。本文从RGMII的基本工作原理出发,剖析双沿采样机制下1.5ns~2ns延迟窗口的由来,系统介绍PHY内部延迟、PCB走线延迟以及FPGA IODELAY三种实现手段,并深入探讨phy-mode配置、设备树参数与常用PHY芯片的寄存器调试方法。针对千兆协商成功但大包丢包、CRC错误持续增长、温度漂移导致断流等典型故

weixin_34226706的博客 338

学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化

本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。

xiaoheshang_123的博客 119

Pytorch CIFAR10图像分类 EfficientNet v1篇

EfficientNet源自Google Brain的论文EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. 从标题也可以看出,这篇论文最主要的创新点是. 论文提出了,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从而提高网络的效果。EfficientNet在网络变大时效果提升明显,把精度上限进一步提升,成为了当前最强网络。

风信子的猫Redamancy的快乐星球 1852

设备上下文

设备上下文即Device Context,简称DC。通过使用设备上下文,编程人员可以不必关心输出设备的具体特性,直接绘制最终的结果,而剩余的与具体显示硬件打交道的工作交给系统来完成。  首先捋一下他们的关系: HDC是句柄(句柄是Windows系统中的一种数据类型),是设备描述句柄;CDC是MFC封装的Windows设备相关的一个类,封装了几乎所有关于HDC的操作;CClientDC,CWi...

赵小楠的后花园 1744

LSTM 双向 Bi-LSTM

LSTM 双向 Bi-LSTM

jacke121的专栏 1519

CClientDC 和 CDC 的区别

和 CDC 的区别" alt="CClientDC 和 CDC 的区别" src="http://s12.sinaimg.cn/bmiddle/48e1229747a5af4612f7b&690"> HDC是Windows的一种数据类型,是设备描述句柄; CDC是MFC封装的Windows 设备相关的一个类; CClientDC是CDC的衍生类,产生对应于Windows客户区的对

敏于思,慎于行 7945

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MFC绘图类(CDC,CPaintDC,CClientDC,CWindowDC)

MFC的类CDC,CPaintDC,CClientDC,CWindowDC都可以用于绘图,我们在进行绘图时对怎么使用这几个类常常混淆。 其中CDC类是基础,另外的几个类是为了特殊应用从CDC类派生出来的,下面对这几个类进行简单的介绍。 (1)CDC类 CDC是CObject类的一个派生类,CDC类是所有绘图类的基类,CDC类定义了一个设备描述对象。CDC类提供了对这个设备描述对象进行操作的成...

飞翔鱼的博客 2161

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

HDC,CDC,CWindowDC,CClientDC,CPaintDC基础

首先说一下什么是DC(设备描述表) 解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使用时释放掉。 在c++ 编程中常会见到HDC,CDC,CClientDC,CPaintDC,CWindowDC这样的类 HDC是DC的句柄,API中的一个类似指

黑色星辰 1589

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HDC,CDC,CClientDC,CPaintDC,CWindowDC的区别

CDC是MFC的DC的一个类 HDC是DC的句柄,API中的一个类似指针的数据类型. MFC类的前缀都是C开头的 H开头的大多数是句柄 首先说一下什么是DC(设备描述表) 解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使

JoeBlackZQQ的专栏 1101

CPaintDC 、CWindowDC、 CClientDC、 CDC联系与区别

CPaintDC 、CWindowDC、 CClientDC、 CDC 关系图:   一句话概括: CPaintDC            无效区dc,      相当于BeginPaint,   EndPaint CClientDC          客户区dc,      相当于GetDC,   ReleaseDC CWindowDC      整窗口dc,      相当

维c银翘片 1295

HDC、CDC、CWindowDC、CClientDC……

DC(DeviceContex)叫做设备环境或设备描述表、设备上下文,是MFC绘图的基础。 经常用到的有CDC、CWindowDC、CClientDC、CPaintDC、CMetaFileDC还有HDC。一、HDC与CDC的区别和联系 首先要明确HDC是资源句柄,其他都是MFC的类。HDC和CDC的关系与HWnd和CWnd的关系类似,CWnd中有一个HWnd类型的成员变量m_hWnd,同样CDC

fellen is not coding 1506

CClientDC CDC CPaintDC CWindowDC 的区别

一 CClientDC       CClientDC 派生于CDC 类        客户区设备上下文,其矩形区域为窗口整个客户区,客户区的左上角的坐标为(0,0),与特定的窗口相关联, 其构造函数中包含有GetDC(); 析构函数中包含有ReleaseDC();       所以调用时直接使用,在调用完后也不用ReleaeDC(); 二 CPaintDC        相当于SDK

Whui_168的专栏 576

[转]HDC,CDC,CWindowDC,CClientDC,CPaintDC基础

转自http://hi.baidu.com/c996387762/blog/item/d1d54b250412602cd40742b2.html 首先说一下什么是DC(设备描述表) 解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使用时释放掉。 在c

独自等待 945

CPaintDC 、CWindowDC、 CClientDC、 CDC的区别与联系(转载)

关系图: 一句话概括: CPaintDC 无效区dc, 相当于BeginPaint, EndPaintCClientDC 客户区dc, 相当于GetDC, ReleaseDCCWindowDC 整窗口dc, 相当于GetWindowDC, ReleaseDCCDC ...

Joanne0106的博客 159

CDC,CPaintDC,CClientDC,CWindowDC区别

Windows 应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC),在 DC 表示的逻辑意义的「画布」上进行图形的绘制。DC 是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32 程序在绘制图形之前需要获取 DC 的句柄 HDC,并在不使用时释放掉。

xy18990的博客 474

CDC,CClientDC,CPaintDC类

类CClientDC派生于CDC,在构造时调用了Windows函数GetDC,在析构时调用了ReleaseDC。这意味着和CClientDC对象相关的设备上下文是窗口的客户区。 几种DC及区别   CClientDC:(客户区设备上下文)用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC:   用法

aiyifan1314的专栏 983
上一篇: 实习之初
下一篇: VS2005写的静态库到VS2010出错的处理
AstrayLinux
博客等级 码龄15年 55粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值