一般,在您呼叫GetDC或BeginPaint时,Windows用默认值创建一个新的设备内容,您对属性所作的一切改变在设备内容用 ReleaseDC或EndPaint呼叫释放时,都会丢失。若是您的程序须要使用非内定的设备内容属性,则您必须在每次取得设备内容句柄时初始化设备内 容:函数
case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; 设备内容属性 绘制窗口显示区域 EndPaint (hwnd, &ps) ; return 0 ;
虽然在一般状况下这种方法已经很使人满意了,可是您还可能想要在释放设备内容以后,仍然保存程序中对设备内容属性所作的改变,以便在下一次呼叫GetDC 和BeginPaint时它们仍然可以起做用。为此,可在登陆窗口类别时,将CS_OWNDC旗标归入窗口类别的一部分:性能
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC ;
如今,依据这个窗口类别所创建的每一个窗口都将拥有本身的设备内容,它一直存在,直到窗口被删除。若是使用了CS_OWNDC风格,就只需初始化设备内容一次,能够在处理WM_CREATE消息处理期间完成这一操做:code
case WM_CREATE: hdc = GetDC (hwnd) ; 初始化设备内容属性 ReleaseDC (hwnd, hdc) ;
这些属性在改变以前一直有效。内存
CS_OWNDC风格只影响GetDC和BeginPaint得到的设备内容,不影响其它函数(如GetWindowDC)得到的设备内容。之前不提倡使用CS_OWNDC风格,由于它须要内存;如今,在处理大量图形的Windows NT应用程序中,它能够提升性能。即便用了CS_OWNDC,您仍然应该在退出窗口消息处理程序以前释放设备内容。class
某些状况下,您可能想改变某些设备内容属性,用改变后的属性进行绘图,而后恢复原来的设备内容。要简化这一过程,能够经过以下呼叫来保存设备内容的状态:登录
idSaved = SaveDC (hdc) ;
如今,能够改变一些属性,在想要回到呼叫SaveDC前存在的设备内容时,呼叫:程序
RestoreDC (hdc, idSaved) ;
您能够在呼叫RestoreDC以前呼叫SaveDC数次。方法
大多数程序写做者以不一样的方式使用SaveDC和RestoreDC。然而,更像汇编语言中的PUSH和POP指令,当您呼叫SaveDC时,不须要保存传回值:高性能
SaveDC (hdc) ;
而后,您能够更改某些属性并再次呼叫SaveDC。要将设备内容恢复到一个已经保存的状态,呼叫:语言
RestoreDC (hdc, -1) ;
这就将设备内容恢复到最近由SaveDC函数保存的状态中。