首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

获取装置环境句柄

2013-02-05 
获取设备环境句柄获取和释放设备环境句柄最常用的是在处理 WM_PAINT 消息时使用 BeginPaint 函数和 EndPai

获取设备环境句柄

     

   获取和释放设备环境句柄最常用的是在处理 WM_PAINT 消息时使用 BeginPaint 函数和 EndPaint 函数:

     hdc = BeginPaint ( hwnd, &ps ) ;

       [ other program lines ]

      EndPaint ( hwnd, &ps) ;

      MSDN中对以上两个函数的解释为:

      

BeginPaint

The BeginPaint function prepares the specified window for painting and fills aPAINTSTRUCT structure with information about the painting.

Parameters
hwnd [in] Handle to the window to be repainted. lpPaint [out] Pointer to the PAINTSTRUCT structure that will receive painting information. 
----------------------------------------------


EndPaint

The EndPaint function marks the end of painting in the specified window. This function is required for each call to theBeginPaint function, but only after painting is complete.

Parameters
hWnd [in] Handle to the window that has been repainted. lpPaint [in] Pointer to a PAINTSTRUCT structure that contains the painting information retrieved byBeginPaint.  
    

       其中,变量ps是一个类型为 PAINTSTRUCT 的结构。这个结构中的字段 hdc 和 BeginPaint 函数的设备环境句柄的值相同。PAINTSTRUCT结构还包含一个名为rcPaint的矩形结构,该结构定义了一个包围窗口客户区无效范围的矩形。使用 BeginPaint 函数获取的设备环境句柄,就只能在这个矩形区域内绘图。调用 BeginPaint函数将使这个区域有效。

      设备环境句柄还可以处理非 WM_PAINT 消息时由 Wondows 程序获取:

      hdc =  GetDC( hwnd ) ;

         [ other program lines ]

      ReleaseDC( hwnd, hdc ) ;

       其中,设备环境指的是窗口句柄为 hwnd 的窗口客户区。调用这些函数和使用 BeginPaint、EndPaint 函数组合的主要差别是从 GetDC 函数返回的句柄可以再整个客户区内绘制。并且,GetDC 和 ReleaseDC 函数并不使任何客户区的无效区域变为有效。

    

        Windows程序还可以获得用于整个窗口的,而不仅仅是窗口客户区的设备环境句柄。

        hdc = GetWindowDC( hwnd ) ;

             [other program lines]

        ReleaseDC( hwnd, hdc ) ;

这里的设备环境除了包括客户区,还包含窗口标题栏、菜单、滚动条和客户区的外框。应用程序很少使用 GetWindowDC函数。如果你想尝试使用它,则还应该捕获WM_NCPAINT (nonclient paint ,非客户区绘制)消息,Windows使用这个消息在窗口的非客户区绘图。


     调用 BeginPaint 、GetDC 和 GetWindowDC 函数可以获得在视频显示器上与一个特定的窗口相关联的设备环境。还有一个更通用的用于获取设备环境句柄的函数是 CreateDC :

          hdc = CreateDC ( pszDriver , pszDevice , pszOutput , pData ) ;

              [other program lines]

          DeleteDC ( hdc ) ;

例如,你可以通过调用下面的函数获取当前整个屏幕的设备环境句柄:

        hdc = CreateDC ( TEXT ("DISPLAY" ) , NULL , NULL , NULL ) ;

在窗口外输出文字或图像不是很好,但是对于一些特殊的应用还是有用的。(虽然在官方文档中并没有提到这种方法,但是你还是可以通过在调用 GetDC 时使用一个 NULL 参数来得到整个屏幕的设备环境。)


        有时候仅需要获取一些关于设备环境的信息,而不需要在上面绘制任何东西。在这些情况下,可以调用 CreateIC 函数获取一个“信息上下文”(Information Context)句柄。这个函数的参数和CreateDC函数的参数相同。例如:

       hdc = CreateIC ( TEXT ( "DISPLAY" ) , NULL , NULL , NULL ) ;

      注意,往设备上写东西,不能使用信息上下文句柄。





热点排行