设备描述表默认很多属性的,书中记载的是Window98支持的属性内容具体参看图
也就是说从坐标系统到画笔画刷以及颜色还有图像都会因为设备描述表属性不同而不同
通常,在您调用GetDC或者BeginPaint时,Windows用默认值创建一个新的设备描述表,您对属性所做的一切改变在设备描述表用ReleaseDC或者EndPaint调用时候
会释放都会丢失。.如果您需要程序中使用非默认的设备描述表属性,则您必须在每次获取设备描述表句柄初始化设备描述表.
虽然在通常情况下这种做法已经令人满意了,但是您还是可能想要在释放设备描述表之后,仍然保存程序中对设备描述表属性所做的更改,以便下一次调用GetDC和
BeginPaint时他们仍然起作用.为此可在登录窗口类时,将CS_OWNDC标志包含为窗口类的一部分
wndclass.style =CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
现在,基于这个窗口类所创建的每一个窗口都将拥有自己的设备描述表,它一直存在,直到窗口被删除.如果使用了CS_OWNDC风格,它就只需初始化设备描述表一次
可以在处理WM_CREATE消息期间完成这一操作
case WM_CREATE:
hdc = GETDC(hwnd);
[intialize device context attributes]
ReleaseDC(hwnd,hdc);
CS_OWNDC风格只影响GetDC和BeginPaint获取的设备描述表,不影响其他函数(GetWindowDC)获取设备描述表
另外,某些时候您可能希望改变设备描述表属性,用改变后的属性进行绘图,然后恢复原来的设备描述表.要简化这一过程可以通过如下调用来保存设备描述表的状态
iSave =SaveDC(hdc);
现在可以改变一些属性,再想回到调用SaveDC前存在的设备描述表时,调用
RestoreDC(hdc,idSaved);
您可以在调用RestoreDC前调用SaveDC数次,例如
iSave =SaveDC(hdc);
改变属性
iSave =SaveDC(hdc);
RestoreDC(hdc,-1); //返回最近的一次
RestoreDC(hdc,-2); //返回第二次保存的那个