关于windows api中SaveDC和RestoreDC的问题

来源:百度知道 编辑:UC知道 时间:2024/07/05 13:04:55
以下摘自《windows程序设计》图形基础的程序5-6 WHATSIZE
其中有一个函数内容如下:
void Show (HWND hwnd, HDC hdc, int xText, int yText, int iMapMode,

TCHAR * szMapMode)

{

TCHAR szBuffer [60] ;

RECT rect ;

SaveDC (hdc) ;

SetMapMode (hdc, iMapMode) ;

GetClientRect (hwnd, &rect) ;

DPtoLP (hdc, (PPOINT) &rect, 2) ;

RestoreDC (hdc, -1) ;

TextOut ( hdc, xText, yText, szBuffer,

wsprintf (szBuffer, TEXT ("%-20s %7d %7d %7d %7d"), szMapMode,

rect.left, rect.right, rect.top, rect.bottom)) ;

}
其中关于SaveDC和RestoreDC的使用有疑问,RestoreDC在这里有什么用,它是将目前的设备上下文恢复吗?如果是,那设置了映射模式不是已经对设备环境产生影响了吗,直接绘图不就是在这种模式下绘图吗?那这里还要RestoreDC何用?如果是恢复SaveDC保存的设备环境,那更没道理了,设置映射模式的代码岂不是无用的?
请大家指点,我的全部积分都拿出来了
有个疑问,既然这样,为

SaveDC 将DC的当前状态压入堆栈保存起来,然后返回一个int,标记保存的数据id。
RestoreDC恢复之。
本来DC里面都有映射模式等(such as the bitmap, brush, palette, font, pen, region, drawing mode, and mapping mode) 这些数据的,SaveDC后,数据被保存了一遍,但是DC里面还有啊,并没有被清除,接下来的操作都会更改DC的相关数据,但是使用 RestoreDC后,又都恢复到SaveDC之前的状态了。
道理很简单,
明白了么?