关于windows api中SaveDC和RestoreDC的问题

[复制链接]
查看11 | 回复1 | 2009-3-5 09:48:32 | 显示全部楼层 |阅读模式
以下摘自《windows程序设计》图形基础的程序5-6WHATSIZE

其中有一个函数内容如下:
void Show (HWND hwnd, HDC hdc, int xText, int yText, int iMapMode,



TCHAR * szMapMode)


{



TCHAR szBuffer [60] ;



RECTrect ;
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保存的设备环境,那更没道理了,设置映射模式的代码岂不是无用的?
请大家指点,我的全部积分都拿出来了
有个疑问,既然这样,为什么还要更改dc的相关数据,RestoreDC将恢复到savedc之前的状态,在这之前对dc做的修改岂不是无效?

回复

使用道具 举报

千问 | 2009-3-5 09:48:32 | 显示全部楼层
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之前的状态了。道理很简单,明白了么?...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行