保存设备环境

来源:互联网 发布:linux ubuntu 安装gcc 编辑:程序博客网 时间:2024/04/29 16:33

保存设备环境:

     通常,当调用 GetDC 或者 BeginPaint  函数时,Windows返回一个设备环境,它的所有属性都被设定为默认值。当设备环境调用 ReleaseDC 或者 EndPaint 函数时,对属性所做的任何改变都会丢失。如果程序需要使用非默认的设备环境属性,则必须在每次获取一个新的设备环境句柄时初始化这个设备环境:

          case  WM_PAINT :

                      hdc = BeginPaint ( hwnd , &ps ) ;

                        [ intialize device context attributes ]

                        [ point client area of window ]

                      EndPaint (hwnd , &ps ) ;

                      Return 0 ;

     尽管这种方法通常令人满意,但是你可能喜欢在释放设备环境时保存对属性所做的改变,以便在下次调用GetDC 或者 BeginPaint 函数时,这些属性仍然有效。为此,在注册窗口类时将 CS_OWNDC 标志作为窗口类样式的一部分即可:

             wndclass.style=CS_HREDRAM | CS_VREDRAW | CS_OWNDC ;

     现在,每个基于这个窗口类创建的窗口都有它的私有的设备环境,当窗口被销毁时,这个设备环境继续存在。使用CS_OWNDC 样式时,只需要初始化设备环境属性一次,例如,在处理 WM_OWNDC 消息期间:

           case   WM_CREATE :

                       hdc = GetDC ( hwnd ) ;

                          [ initialize device context attributes ]

                       ReleaseDC ( hwnd, hdc ) ;

在再次改变这些属性值之前,它们会一直有效。

     

     CS_OWNDC 样式仅影响通过 GteDC 和 BeginPaint 函数获得的设备环境,通过其他函数(如 GetWindowDC 函数)获取的设备环境并不影响。以前,CS_OWNDC 样式不提倡使用,因为它需要一定的内存开销。注意使用了 CS_OWNDC 样式,设备环境句柄在退出窗口过程前也应该被释放。

      在一些情况下,可能想改变某些设备环境属性,然后使用变更后的属性进行绘制,接着在恢复原来的设备环境。为了简化这个过程,可以调用下面的函数保存设备环境的状态:

       idSave = SaveDC ( hdc ) ;

现在,可以改变一些属性。而调用下面的函数则可以返回调用 SaveDC 函数之前存在的设备环境:

       RestoreDC ( hdc ,idSaved ) ;

可以在调用 RestoreDC 之前,多次调用 SaveDC。

     不过,大部分程序员会以一种不同的方式使用 SaveDC 和 RestoreDC 函数,这种方式非常类似于汇编语言中的 PUSH 和 POP 指令。调用 SaveDC 函数时,返回值可以不必保存:

      SaveDC ( hdc ) ;

然后改变一些属性,并再次调用SaveDC 函数。而为了将设备环境恢复到以保存的状态,则调用下面的函数:

      RestoreDC ( hdc , -1 ) ;

这会使设备环境恢复到最近一次由 SaveDC 函数保存的状态。


原创粉丝点击