Window上获取DC句柄的三种方法
2008-01-27 15:58
260 查看
在Window上主要有三种方法得到Client Area的一个HDC句柄。
1.在WM_PAINT消息中调用 BeginPaint()方法,BeginPaint方法返回一个当前无效区域的HDC句柄,并把该无效区域设置为有效区域。所谓无效区域就是需要应用程序重新绘制的区域,反之则为有效区域。BeginPaint被调用时同时返回了一个PAINTSTRUCT结构,其中给出了本次重绘的Clip Rectangle,所有在这个rectangle之外的绘制操作都不会显示。值得注意的是Petzold在砖头里面反复强调在WM_PAINT消息处理函数中BeginPaint方法需要和EndPaint方法配对使用,还有BeginPaint中返回的HDC不能缓存起来使用。
2.调用GetDC(hwnd)/ReleaseDC()来获取释放对应Client Rectangle的HDC句柄, 这个句柄没有什么预定义的Clip rectangle, 整个Client Rectangle都可以绘制。但是GetDC()得到的句柄也同样不能缓存起来,也就是说GetDC和ReleaseDC函数要在一个消息处理函数中配对出现。
一个类似的API是GetWindowDC(),它用于获取整个Window的DC,(client area + non-client area)
和GetDC一样必须在一次WndProc执行中释放掉,不能缓存。
1.在WM_PAINT消息中调用 BeginPaint()方法,BeginPaint方法返回一个当前无效区域的HDC句柄,并把该无效区域设置为有效区域。所谓无效区域就是需要应用程序重新绘制的区域,反之则为有效区域。BeginPaint被调用时同时返回了一个PAINTSTRUCT结构,其中给出了本次重绘的Clip Rectangle,所有在这个rectangle之外的绘制操作都不会显示。值得注意的是Petzold在砖头里面反复强调在WM_PAINT消息处理函数中BeginPaint方法需要和EndPaint方法配对使用,还有BeginPaint中返回的HDC不能缓存起来使用。
2.调用GetDC(hwnd)/ReleaseDC()来获取释放对应Client Rectangle的HDC句柄, 这个句柄没有什么预定义的Clip rectangle, 整个Client Rectangle都可以绘制。但是GetDC()得到的句柄也同样不能缓存起来,也就是说GetDC和ReleaseDC函数要在一个消息处理函数中配对出现。
一个类似的API是GetWindowDC(),它用于获取整个Window的DC,(client area + non-client area)
和GetDC一样必须在一次WndProc执行中释放掉,不能缓存。
相关文章推荐
- 窗口函数中获取主程序实例句柄的三种方法
- 获取线程句柄的三种方法
- 窗口函数中获取主程序实例句柄的三种方法
- linux编程获取本机IP地址的三种方法
- Struts2获取request三种方法
- unix网络编程之根据主机名(hostname)或网卡名获取IP地址(三种方法)
- 三种方法快速获取WordPress当前主题文件夹目录
- 【HTML5入门】Jquery中获取控件值的三种方法
- VC中获取窗体句柄的各种方法
- Android中获取网络图片的三种方法
- [WinAPI] 获取窗口句柄的几种方法
- 使用Hibernate获取最大值(max)的三种方法
- 获取屏幕宽高三种方法
- window.open方法打开的页面,在服务器端怎么获取opener的url
- Delphi获取其它进程窗口句柄的3种方法
- VC中获取窗体句柄的各种方法
- 获取http头部信息三种方法
- 获取活动窗口输入焦点控件句柄的方法
- MFC三种不同方式实现图形的保存和重绘---方法一:通过兼容DC(CompatibleDC)的方式
- MySQL提供了以下三种方法用于获取数据库对象的元数据: