原文地址::http://www.cnblogs.com/Lisen/archive/2010/01/22/1654384.html

相关网帖

1.GDI编程小结----http://www.360doc.com/content/10/1020/20/3550092_62550872.shtml

2.关于DC的理解----http://blog.csdn.net/cys1991/article/details/7648805

3.详解windows设备内容(device context)----http://www.58os.com/BBS/TechBSS/Article-5967.html

4.Vc中关于DC(设备环境函数(Device Context))的理解----http://caodong8962.itpub.net/post/42952/519845

5.bitmap相关的一些知识----http://smycll.blog.hexun.com/74043325_d.html

GetDC

该函数为指定窗口的客户区域取回显示DC的句柄。随后的GDI函数中可以使用显示DC在窗口客户区域绘图。
原型:
HDC  GetDC(  HWND  hWnd);
参数:
hWnd:将要取回DC的窗口句柄。如果该值为NULL,GetDC取回整个屏幕的DC。
返回值:
成功,获得指定窗口客户区域的DC句柄;失败返回NULL。调用GetLastError获取扩展错误信息。
备注:
根据为指定窗口指定的类类型来决定取回一个公共、类或私有DC(a common, class, or private device context )。
每次取回公共DC时,GetDC函数给它赋值默认属性。
取回类或私有DC时,GetDC函数保持之前赋值的属性不变。
在使用公共DC绘图后,必须调用 ReleaseDC来释放DC。
类和私有DC不必释放。
可用内存数决定DC的数量。
GetDCEx
该函数为指定窗口的客户区域或整个屏幕取回显示DC的句柄。随后的GDI函数中可以该句柄在窗口客户区域绘图。
GetDCEx 是GetDC的扩展,对如何剪裁客户区域或是否剪裁客户区域提供给程序更多的控制。

原型:

HDC  GetDCEx( 
     HWND  hWnd, 
     HRGN  hrgnClip, 
     DWORD  flags);
参数:
hWnd:将要取回DC的窗口句柄。如果该值为NULL,GetDCEx取回整个屏幕的DC。
hrgnClip:指定可能和DC的可见区域合并的剪切区域。
flags:指定DC的创建方式。可能为下表中的值的组合:

描述

DCX_WINDOW

返回于窗口矩形而不是客户端矩形对应的DC。

DCX_CACHE  

从缓存中取回DC,而不是OWNDC 或 CLASSDC 窗口。实际上重写了CS_OWNDC 和CS_CLASSDC 了。

DCX_PARENTCLIP  

使用父窗口的可见区域。取消父窗口的WS_CLIPCHILDREN 和 CS_PARENTDC 标志位。DC的起始坐标设置为由hWnd标识的窗口的左上角。

DCX_CLIPSIBLINGS  

排除由hWnd标识的窗口的所有同级窗口的可见区域。

DCX_CLIPCHILDREN

排除由hWnd标识的窗口的所有子窗口的可见区域。

DCX_NORESETATTRS  

当该DC释放时,不用设置该DC的属性为默认值。

DCX_EXCLUDERGN  

从返回的DC的可见区域里去除hrgnClip标识的剪切区域。

DCX_EXCLUDEUPDATE

返回一个区域,该区域去除了窗口更新的区域。

DCX_INTERSECTRGN  

hrgnClip表示的剪切区域和返回DC的可见区域取交集。

DCX_INTERSECTUPDATE  

返回一个区域,该区域包含窗口更新的区域。

DCX_VALIDATE  

当指定DCX_INTERSECTUPDATE,引起DC完全有效(causes the device context to be completely validated.)。 在该函数中使用DCX_INTERSECTUPDATE 和DCX_VALIDATE 等价于使用BeginPaint函数。

返回值:
成功,返回指定窗口DC句柄。失败返回NULL。如果传入的hWnd为无效值,返回失败。调用GetLastError获取扩展错误信息。
备注:
flags支持这些值: DCX_WINDOWDCX_CACHEDCX_CLIPCHILDRENDCX_CLIPSIBLINGS, DCX_EXCLUDERGNDCX_INTERSECTRGNDCX_EXCLUDEUPDATE DCX_INTERSECTUPDATE
和GetDC返回的DC不同,GetDCEx返回的DC不会和相关窗口保持同步。
如果窗口移动或改变大小,可能会产生异常错误。如果程序获取DC、绘图然后再释放DC,错误的机会将会减少。
除非显示DC属于窗口类,否则在绘图后必须调用 ReleaseDC来释放DC。
因为一次只能有5个公共DC可用,如果释放DC失败,将可能导致其他程序访问DC失败。
如果 CS_CLASSDC, CS_OWNDC  CS_PARENTDC被指定为WNDCLASS结构中的一个类型,当该窗口类被注册时,函数将返回属于窗口类的DC。
GetWindowDC
函数取回整个窗口DC,包括标题栏、菜单和滚动栏。
原型:
HDC  GetWindowDC( HWND  hWnd);
参数:
hWnd:要取回DC的窗口句柄。如果该值为NULL,取回整个屏幕的DC。
返回值:
成功,返回指定窗口DC的句柄。NULL表示失败或传入的hWnd为无效参数。调用GetLastError获取扩展错误信息。
备注:
GetWindowDC专为在窗口非客户区域绘图而设计。不推荐在任何窗口的非客户区域绘图。
使用 GetSystemMetrics函数获取象标题栏、菜单和滚动栏等非客户区域的尺寸大小。
GetDC用来取回整个 屏幕的DC。
在绘图完成后,必须调用ReleaseDC来释放DC。如果不释放窗口DC,应用程序的绘图请求将会产生不良影响。

//===============================================

备注::

1.因为一次只能有5个公共DC可用,如果释放DC失败,将可能导致其他程序访问DC失败。-----不知道真这话是不是一个真理,有时间的好好验证一下!!!

2.bitmap只可以选入"内存DC",一个bitmap不能同时选入多个DC

GetDC、GetDCEx、GetWindowDC - [Daily APIs]相关推荐

  1. java getdc_GetDC、GetDCEx、GetWindowDC

    GetDC 该函数为指定窗口的客户区域取回显示DC的句柄.随后的GDI函数中可以使用显示DC在窗口客户区域绘图. 原型: HDC GetDC( HWND hWnd); 参数: hWnd:将要取回DC的 ...

  2. DeleteDC、ReleaseDC、DeleteObject - [Daliy APIs]

    DeleteDC 该函数删除指定的设备上下文环境(DC). 原型: BOOL DeleteDC(HDC hdc): 参数: hdc:设备上下文环境的句柄. 返回值: 成功,返回非零值:失败,返回零.调 ...

  3. FLEX APIs、Libs、Components

    下面是非常有用的类库, APIs.Libs.Components 1.as3ebaylib http://code.google.com/p/as3ebaylib/ 2.as3youtubelib h ...

  4. 雅虎的无奈,将关闭地图、Pipes、GeoPlanet和PlaceSpotter APIs、一些区域网站

    这一天终于还是到来,在与巨头的博弈中,雅虎如今一直处于边缘的状态,令这个曾经的巨人很是无奈. 雅虎首席架构师Amotz Maimon在Tumblr的雅虎主页发布了产品更新报告,确定了公司未来聚焦的三大 ...

  5. R语言根据日历周期处理时间序列数据(周、月、年等):使用xts包的apply.daily函数和mean函数计算时间序列的日平均值(daily)

    R语言根据日历周期处理时间序列数据(周.月.年等):使用xts包的apply.daily函数和mean函数计算时间序列的日平均值(daily) 目录

  6. Go、Rust、C++和Zig语言的生产力对比 | Gopher Daily (2021.03.28) ʕ◔ϖ◔ʔ

    每日一谚:Goroutines and channels are big ideas. They're tools for program construction. Go技术生态 掉入Go nil坑 ...

  7. 详解DC、CDC、HDC、句柄、设备上下文

    最近那么长时间都没写博文.感觉经常写博文是好事.工作的时候项目是用MFC做的.百度了下说这个框架已经过时了.但是工作需要又不得不看,所以现在就之前看的一篇关于设备上下文的文章转载下 MFC中的DC.C ...

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

    CPaintDC .CWindowDC. CClientDC. CDC 关系图: 一句话概括: CPaintDC            无效区dc,      相当于BeginPaint,   End ...

  9. HDC、CDC、CCLientDC的关系、MFC类库

    DC概念: 当使用GDI函数比如MoveToEx.LineTo.TextOut时,只是告诉系统要画线或者写字了,但是用什么样的笔(HPEN),字是什么颜色(setTextColor),画在哪张'纸'( ...

最新文章

  1. 为什么正则化可以起到对模型容量进行控制_正则化为什么能防止过拟合(重点地方标红了)...
  2. css选择器权重排序_CSS选择器的权重与优先规则
  3. 【深度学习】编写同时在PyTorch和Tensorflow上工作的代码
  4. Django的get和post请求处理
  5. java死锁2_Java面试必问-死锁终极篇(2)
  6. 自己定义View学习之12/7(进度条之混合模式)
  7. Dan 计划:重新定义人生的10000个小时
  8. 《JavaScript高效图形编程(修订版)》——导读
  9. 计算机怎样双面打印,电脑双面打印机怎么打印双面_电脑如何设置自动双面打印-win7之家...
  10. 全国高校计算机能力挑战赛Java试题(一)
  11. mongodb 数据库迁移
  12. matlab打开时总闪一下才打开_matlab打不开,只在任务栏闪一下就无反应了怎么办?...
  13. 一周信创舆情观察(1.10~1.16)
  14. 如何使用 ELEMENTOR
  15. 读史使人明智,二混子带你漫画学历史~
  16. [1096]消除ADB错误“more than one device and emulator”的方法
  17. 初中数学分几个模块_初中数学所有概念! 初中数学一共可以分为几个模块,分别是什么?...
  18. Boob炸弹拆除IDA版
  19. 如何在PS中将一张图片一次性裁剪保存成多张图片
  20. SpringMVC学习笔记:springMVC中相关细节

热门文章

  1. 图像处理中的 亮度, 灰度, 对比度等概念
  2. 哈尔滨工业大学计算机系统大作业--程序人生
  3. JavaScript 基础优化(读书笔记)
  4. Springboot的快速入门
  5. 神州信息“六合上甲”获2022 DAMA中国数据治理大奖
  6. HarmonyOS开发-路由组件体验
  7. App首次进入引导界面
  8. 【每日蓝桥】12、一三年省赛Java组真题“振兴中华”
  9. awesome php
  10. 【深度强化学习】(4) Actor-Critic 模型解析,附Pytorch完整代码