获取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的函数。

转载于:https://www.cnblogs.com/furzoom/p/7710152.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值