在SDK中取得设备内容句柄的五种方法

=============《Windows 程序设计 第五版》读书笔记 ||  第五章 图形基础 =============

一、取得设备内容句柄的第三种方法

在处理WM_PAINT消息时用BeginPaint/EndPaint取得设备内容句柄hdc。

在处理非WM_PAINT消息时用GetDC/ReleaseDC取得设备内容句柄hdc。

提示:非WM_PAINT消息为WM_NCPAINT。

以前学VB和Delphi时就喜欢找些皮肤控件来玩,在学VC之前就一直在想,用VC如何画程序皮肤界面。在前面几章中,了解到了窗口显示区域和非显示区域,已经知道了可以用BeginPaint/EndPaint或GetDC/Release来在显示区域上绘图,但到目前为止还不知道怎么在非显示区域绘图,非显示区域包括窗体标题栏、菜单、滚动条和框架。

在这一章中接触到了一个新函数:GetWindoDC,使用GetWindowDC这个函数就能满足上面的需求了,该函数可以取得整个窗口的设备内容句柄,包括显示区域和非显示区域,也就是说可以在一个窗体的任何位置进行绘图。这样一来,对程序皮肤制作技术就了解了个初步。

GetWindowDC函数的使用方法如下:

  1. case WM_NCPAIN:
  2.     hdc = GetWindowDC( hwnd );
  3.     //绘图代码 
  4.     ReleaseDC(hwnd, hdc);
  5.     return 0;

由此可见,GetWindowDC函数和GetDC函数一样,是和ReleaseDC成对出现的,而且绘制非显示区域的程序代码得放到非WM_PAINT消息中。

二、取得设备内容句柄的第四种方法

至此,已经知道要取得一个设备内容句柄,有三种方法可供选择。其中在处理WM_PAINT消息时用BeginPaint/EndPaint,在处理 WM_NCPAINT消息时可以用GetDC/Release或GetWindowDC/Release。不过现在又有了第四种取得设备内容句柄的方法,前面三种方法都是只能取得一个窗口中的设备内容句柄,而这第四种方法可以取得整个屏幕的设备内容句柄,这第四种方法所使用的函数为CreateDC,其使用方法如下:

  1. hdc = CreateDC(pszDriver, pszDevice, pszOutput,pData);
  2. //绘图代码区域
  3. DeleteDC(hdc);

三、取得设备内容句柄的第五种方法

前面介绍的四种方法都是为了在取得的设备内容句柄中绘图,而如果需要取得设备内容句柄,但不用在该句柄上进行写操作的话,那就可以使用第五种方法:CreateIC。这类似于我们对文件的操作,有时找到文件需要对该文件进行修改,而有时找到文件只是想获取该文件里的一些信息。

CreateIC函数的使用方法如下:

  1. hdc = CreateIC(pszDriver, pszDevice, pszOutput,pData);
  2. //绘图代码区域
  3. DeleteDC(hdc);

不过到目前为止,还只是知其然而不知其所以然,不知道为什么需要获取设备内容句柄而不用对其进行绘图。

 

posted @ 2008-10-18 16:33  冷寒生  阅读(985)  评论(0编辑  收藏  举报
IT知识库