获取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 ...
随机推荐
- 新学到的linux命令
whatis xxx whatis ls 会返回一个ls的简要说明,可以简单的告诉你该命令的作用,不用man去看一大堆没啥用的英文 HISTTIMEFORMAT="%d/%m/%y %T & ...
- 2016.6.21 maven:Failure to transfer ... from ....
问题描述: 才刚新建的工程,什么都没做,就显示pom.xml有问题,在第一行的标签上 有如下错误: 点击详情: Failure to transfer org.apache.maven:maven-p ...
- openLayers加载高德地图
之前用openlayers对高德,百度,腾讯,bing,supermap,天地图,arcgis,google等地图进行了对接,今天简单介绍一下openlayers+高德: 在Openlayers.La ...
- SVN切分支步骤
1.右键project选择Brankch/Tag 2.选择SVN路径并在改路径下填写project名称 3.选择最新版本号 4.填写必要的凝视备忘,方便日后查看 5.刷新父文件夹文件夹.下载被切出来的 ...
- Sql 复习3之存储管理
一.事务管理 单个工作单元称为事务,我们将若干条sql命令组合在一起,形成存储过程.触发器等,利用存储过程和触发器可以进行事务管理. 二.编程基础介绍 主要有:函数.程序设计语句等. 程序设计语句: ...
- linux 内核(系统)、函数的理解、宏的程序调试
1.操作系统 1.1.Linux 内核(系统)的组成的部分: 内核主要有:进程调度.内存管理.虚拟文件系统.网络接口和进程通信五个部分组成. (1)进程调度 进程调度是CPU对多个进程对CPU访问的调 ...
- python thrift hbase安装连接
默认已装好 hbase,我的版本是hbase-0.98.24,并运行 python 2.7.x 步骤: sudo apt-get install automake bison flex g++ git ...
- ZooKeeper 系列(一)—— ZooKeeper核心概念详解
一.Zookeeper简介 二.Zookeeper设计目标 三.核心概念 3.1 集群角色 3.2 会话 3.3 数据节点 3.4 节点 ...
- 一起学Django之Day01
创建项目 SimilarFacedeMacBook-Pro:PycharmProjects similarface$ django-admin startproject StudyDjango 创建A ...
- ES 30 - Elasticsearch生产集群的配置建议
目录 1 服务器的内存 2 服务器的CPU 3 服务器的磁盘 4 集群的网络 5 集群的节点个数 6 JVM的参数设置 7 集群的数据量 8 总结 在生产环境中, 要保证服务在各种极限情况下的稳定和高 ...