获取HDC的几种方法
当需要在显示器上(当然包括打印机等设备上)绘图时,或者写文字的时候,需要取得设备的上下文句柄,即HDC,本文以下都称为HDC。那么,有哪些办法取得HDC呢?
1 BeginPain()和EndPaint()
在处理WM_PAINT消息时,使用
hdc = BeginPaint(hwnd, &ps);
//...
EndPaint(hwnd, &ps);
ps是类型为PAINTSTRUCT类型的变量,其中的rcPaint成员指明了显示的无效区域。该hdc只能在这个无效区域内进行绘图。同时BeginPaint会使无效区域变为有效。
2 GetDC()和ReleaseDC()
在WM_PAINT以外可以使用
hdc = GetDC(hwnd);
//...
ReleaseDC(hwnd, hdc);
GetDC返回的HDC可以在整个显示区域进行绘图,但是不会将无效区域变为有效区域。
3 GetWindowDC()和ReleaseDC()
hdc = GetWindowDC(hwnd);
//...
ReleaseDC(hwnd, hdc);
用来取得整个窗口的HDC,包括标题栏,菜单栏,状态栏,滚动条和边框(frame)。
以上三种方式取得的HDC都是与窗口相关的。当然有时还是需要使用与窗口无关的HDC。
4 CreateDC()和DeleteDC()
hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData);
//...
DeleteDC(hdc);
如:
hdc = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
取得整个屏幕的HDC。
5 CreateIC()
参数与CreateDC相同,用来创建获取信息的HDC,不能用此HDC进行绘图。
6 CreateCompatibleDC()
hdcMem = CreateCompatibleDC(hdc);
//...
DeleteDC();
创建内存DC。
7 CreateMetaFile()和CloseMetaFile()
hdcMeta = CreateMetaFile(pszFilename);
//...
hmf = CloseMetaFile(hdcMeta);
注意:所有取得HDC的函数都需要对应的关闭或者结束HDC的函数。
获取HDC的几种方法的更多相关文章
- PHP中获取星期的几种方法
PHP中获取星期的几种方法 PHP星期几获取代码: 1 date(l); 2 //data就可以获取英文的星期比如Sunday 3 date(w); 4 //这个可以获取数字星期比如123,注意0 ...
- VC++获取IDC_EDIT的7种方法
VC++获取IDC_EDIT的7种方法 http://blog.csdn.net/baizengfei/article/details/7997618 //第一种方法 int number1, num ...
- C#获取当前路径的7种方法
总结C#获取当前路径的7种方法 C#获取当前路径的方法如下: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName ...
- Java获取随机数的几种方法
Java获取随机数的几种方法 .使用org.apache.commons.lang.RandomStringUtils.randomAlphanumeric()取数字字母随机10位; //取得一个3位 ...
- spring 获取 WebApplicationContext的几种方法
spring 获取 WebApplicationContext的几种方法 使用ContextLoader WebApplicationContext webApplicationContext = C ...
- Struts2 后台获取路径的几种方法
Struts2 后台获取路径的几种方法 package actions.app; import java.io.File; import org.apache.struts2.ServletActio ...
- VC获取cookies的几种方法
方法一: CInternetSession::GetCookie This member function implements the behavior of the Win32 function ...
- 体温数据上传程序开发+获取时间的三种方法+DB Browser下载及安装
今天开始了体温上传程序的开发 今日所学: 获取时间 (21条消息) (转)安卓获取时间的三种方法_sharpeha的博客-CSDN博客_安卓获取时间 DB Browser安装教程 (20条消息) sq ...
- java 获取随机数的三种方法
方法1(数据类型)(最小值+Math.random()*(最大值-最小值+1))例:(int)(1+Math.random()*(10-1+1))从1到10的int型随数 方法2获得随机数for (i ...
随机推荐
- 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例
学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...
- mysql使用mysqldump 与 mysqlimport进行数据库迁移
1.导入数据库 1)source source /home/platvt/product/pc2_create_tables.sql 2)mysqlimport 使用mysqlimport导入数据: ...
- 微信小程序 - 考试倒计时
源码如下(csdn提供了思路 , 多谢 ,第二个小程序项目,有惊无险(_._): Page({ /** * 页面的初始数据 */ data: { timer: '', //定时器名字 countDow ...
- C 位域
C 位域 如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下: struct { unsigned int widthValidated; unsigned int heightV ...
- java命令行
Launches a Java application. Synopsis java [options] classname [args] java [options] -jar filename [ ...
- java导出excel不须要额外jar包
眼下我知道的在java中导出Excel能够用poi或在jsp的文件头改变输出流. 以下再介绍一种就用java基础包导出的Excel.导出的格式形如: 源代码例如以下: package csvExcel ...
- 云数据库 RDS 版怎么创建数据库和账号MySQL 5.7版
若要使用云数据库RDS,您需要在实例中创建数据库和账号.对于MySQL 5.7版本的实例,您需要通过RDS控制台创建一个初始账号,然后可以通过数据管理(DMS)控制台创建和管理数据库.本文将主要介绍在 ...
- java使用Runtime.exec()运行windwos dos或linux shell命令
使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试 实例代码: package com.bookoo.test.command; imp ...
- ORA-02050故障诊断一例
http://czmmiao.iteye.com/blog/1474678昨天客户反映说在下午某时间段有几个事务失败了,让我查下当时数据库系统的负载是否正常,看了下CPU的历史负载,很正常,于是看了下 ...
- JVM内存最大能调多大分析【经典】
http://hi.baidu.com/suofang/blog/item/49c637c71c0afbd0d1006028.html 上次用weblogic 把 -XmxXXXX 设成2G, ...