登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

SaveDC()和RestoreDC(nSavedDC)  

2011-02-09 13:23:10|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在某些情况下,可能想改变某些设备描述表属性,确切的说应该是接下来的操作都会更改dc的相关数据,用改变后的属性进行某些操作,但是使用 restoredc后,又都恢复到savedc之前的状态了。

 

idsaved = savedc(hdc);

现在,可以改变一些属性,在想要回到调用savedc前存在的设备描述表时,调用:

restoredc(hdc,idsave);

恢复savedc之前的状态

简单的说,这对函数就是可以让你在独立的函数中保证cdc对象的属性不会被修改,这样你的多个操作就不会造成相互影响了

 

 

 

 

=========================================

保存指定设备上下文环境的当前状态,通过拷贝数据(该数据描述选择的对象和图形模式,比如位图、画笔、调色板、字体、笔、区域、绘图模式、映射模式)到上下文环境堆栈来完成。

This function saves the current state of the specified device context by copying data describing selected objects and graphic modes (such as the bitmap, brush, palette, font, pen, region, and drawing mode) to a context stack. 

原型:

int SaveDC(HDC hdc);

参数:

hdc:要保存的设备上下文环境的句柄。

返回值:

   如果成功,返回值标识保存的设备上下文环境,如果失败,返回零。调用GetLastError获取扩展错误信息。    

说明:

   SaveDC函数可以用来保存设备上下文环境状态的任何数目的实例和保存任何次数。

   一个被保存的状态以后可以用RestoreDc函数进行恢复。

 

RestoreDC 

   

该函数恢复设备上下文环境(DC)到指定状态,该设备上下文环境的恢复是通过使状态信息出栈而进行的。该堆栈由先前调用SaveDC函数时创建的。

原型:

BOOL RestoreDC(HDC hdc, int nSavedDC);

参数:

   hdc:设备上下文环境句柄。

   nSaveDC:指定将要被恢复的设备上下文环境的实例,如果该参数为正,则nSaveDC代表要恢复的设备上下文环境的一个指定实例。如果该参数为负,则nSaveDC代表与当前设备上下文环境有关的一个实例。 比如,-1恢复当前最近保存的状态。

If this parameter is positive, nSavedDC represents a specific instance of the device context to be restored. 

If this parameter is negative, nSavedDC represents an instance relative to the current device context. 

For example, –1 restores the most recently saved state. 

返回值:

如果成功,返回非零;如果失败,返回零。调用GetLastError获取扩展错误信息。

说明:

堆栈可以包含设备上下文环境多个实例的状态信息,如果给定参数指定的状态不在堆栈的顶部,那么RestoreDC就删除栈顶和指定实例之间的所有状态信息。


 ======================================

    在某些情况下,您可能想改变某些设备描述表属性,用改变后的属性进行绘图,然后恢复原来的设备描述表。要简化这一过程,可以通过如下调用来保存设备描述表的状态:

    idSaved = SaveDC(hdc);

    现在,可以改变一些属性,在想要回到调用SaveDC前存在的设备描述表时,调用:

    RestoreDC(hdc,idSave);

    您可以在调用RestoreDC之前调用SaveDC数次。

    大多数程序员以不同的方式使用SaveDC和RestoreDC。然而,更像汇编语言中的PUSH和POP指令,当您调用SaveDC时,不需要保存返回值:

    SaveDC(hdc);

    然后,您可以更改某些属性并再次调用SaveDC。要将设备描述表恢复到一个已经保存的状态,调用:

    RestoreDC(hdc,-1);

    这就将设备描述表恢复到最近由SaveDC函数保存的状态中。


      这两个函数以前没有用过,上述描述摘自《Windows 程序设计》第五章,虽然可以理解,但是并不能深刻体会。

    在学习这本书的过程中,遇到不少这些可以看懂但似乎又不能体会的知识,这需要以后大量的编程实践,把这些知识点一个一个字地打出来加深印象,以便以后再和他们相遇时有点印象也方便自己查阅。

  评论这张
 
阅读(1224)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018