SaveDC()和RestoreDC(nSavedDC)

在某些情况下,可能想改变某些设备描述表属性,确切的说应该是接下来的操作都会更改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 程序设计》第五章,虽然可以理解,但是并不能深刻体会。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值