- 4
- 0
- 约4.84千字
- 约 5页
- 2017-11-20 发布于北京
- 举报
HDCCDCCWindowDCCClientDCCPaintDC说明
HDC,CDC,CWindowDC,CClientDC,CPaintDC 收藏
首先说一下什么是DC(设备描述表)
解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC,并在不继续使用时释放掉。
在c++ 编程中常会见到HDC,CDC,CClientDC,CPaintDC,CWindowDC这样的类
HDC是DC的句柄,API中的一个类似指针的数据类型.
CDC是MFC的DC的一个类
CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄.
CDC及其派生类的继承视图:
CObject
public |------CDC
public |------|------CClientDC
public |------|------CPaintDC
public |------|------CWindowDC
public |------|------CMetaFileDC
(注意: 除CMetaFileDC以外的三个派生类用于图形绘制.)
CDC类定义了一个设备描述表相关的类,其对象提供成员函数操作设备描述表进行工作,如显示器,打印机,以及显示器描述表相关的窗口客户区域。
通过CDC的成员函数可进行一切绘图操作。CDC提供成员函数进行设备描述表的基本操作,使用绘图工具, 选择类型安全的图形设备结构(GDI),以及色彩,调色板。除此之外还提供成员函数获取和设置绘图属性,映射,控制视口,窗体范围,转换坐标,区域操作,裁减,划线以及绘制简单图形(椭圆,多边形等)。成员函数也提供绘制文本,设置字体,打印机换码,滚动, 处理元文件。
其派生类:
1.PaintDC: 封装BeginPaint和EndPaint两个API的调用。
(1)用于响应窗口重绘消息(WM_PAINT)是的绘图输出。
(2)CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。
(3)CPaintDC也只能用在WM_PAINT消息处理之中。
2.CClientDC(客户区设备上下文): 处理显示器描述表的相关的窗体客户区域。
用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC。
3.CWindowDC: 处理显示器描述表相关的整个窗体区域,包括了框架和控 件(子窗体)。
(1)可在非客户区绘制图形,而CClientDC,CPaintDC只能在客户区绘制图形。
(2)坐标原点是在屏幕的左上角,CClientDC,CPaintDC下坐标原点是在客户区的左上角。
(3)关联一特定窗口,允许开发者在目标窗口的任何一部分进行绘图,包含边界与标题,这种DC同WM_NCPAINT消息一起发送。
4.CMetaFileDC: 与元文件相关的设备描述表关联。
CDC提供两个函数,GetLayout和SetLayout用于反转设备描述表的布局。用于方便阿拉伯,希伯来的书写文化习惯的设计,以及非欧洲表中的字体布局。
CDC包含两个设备描述表,m_hDC和m_hAttribDC对应于相同的设备,CDC为m_hDC指定所有的输出GDI调用,大多数的GDI属性调用由m_hAttribDC控制。(如,GetTextColor是属性调用,而SetTextColor是一种输出调用。)
下面用一些简单的代码看看如果使用这些类
HDC使用, 每次画线等操作都不MFC封装的类多了个HDC的参数
执行在哪个设备描述表操作
HDC hdc=::GetDC(m_hWnd);//m_hWnd == this-m_hWnd 即当前窗口句柄
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);//必须和GetDC配对
可以看到HDC的使用较麻烦, 而且如果::GetDC和::ReleaseDC不配对的话,会造成错误
CDC *pDC=GetDC();
pDC-MoveTo(m_ptOrigin);
您可能关注的文档
- CImage类BMP转换成灰度图像.doc
- cad已知弦长、弧长画弧.doc
- CISC(复杂指令集)与RISC(精简指令集)的区别.doc
- Cisco网络设备命名规则.doc
- cjavac的比较及入门学习书籍总全.doc
- cjowocq图片转换成文字.doc
- ckcqknq日语入门基础知识.doc
- cklhsni日语世界经典童话马车で来た十二人のお客さま(搭马车来的十二位客人.doc
- CF手游新地图幽灵模式失落的遗迹玩法.docx
- Cldqna你播放器里那些没有前奏直接唱的歌适合做手机铃声闹铃.doc
- TITS 0314-2025 公路隧道机器人智能巡检系统技术规范 征求意见稿.docx
- 房地产市场报告 - 沈阳写字楼市场半年报 2025下半年 市场需求平稳回升,但高空置压力持续.docx
- 全球南方研究中心 非洲工业化与中非合作.docx
- 永辉超市连锁的门店合伙机制.docx
- 嘉法邦(南通)法律咨询公司企业运营管理及日常风险防范法律风险白皮书.docx
- 房地产市场报告 -天津写字楼市场半年报 2025下半年-高空置压力下市场竞争进一步加剧.docx
- 大公国际 -城投行业 2026 年信用风险展望:城投企业加速出清,债务化解与产业转型双轨并行.docx
- 2026百度AI营销 春节不打烊-游戏行业春节放量指南 新春畅玩,马上游戏.docx
- Agentic Coding:从Vibe Coding到超级个体进化之路.docx
- 伯恩斯坦-当人工智能威胁到护城河#2:我们精选的“人工智能抗风险”多头股票-When AI threatens the moat #2:Our selection of AI risk-proof long ideas.docx
原创力文档

文档评论(0)