zoukankan      html  css  js  c++  java
  • SaveDC 和 RestoreDC


    SaveDC (HDC hdc);
    保存设备上下文栈上。
    它的目的是,在不改变设备上下文的情况下,对HDC进行其它的操作,
    当这些操作完成后,再对HDC进行恢复。
    RestoreDC (HDC hdc, int id) 则是从设备上下文栈中对HDC进行恢复。

    典型的用法是:


    void
    Graphics::
    Draw (HDC hdc) {
    SaveDC (hdc);

    TextOut (hdc, ....);
    /** do more things */

    RestoreDC (hdc, -1);
    }

    如上函数,在进入Draw函数中时进行SaveDC, 退出时RestoreDC。
    这样,不论外面怎么调用Draw函数,它总能保证不改变调用Draw函数
    前的设备上下文。

    如:
    HDC hdc = GetDC ();
    SelectObject (hdc, GetStockObject (BLACK_BRUSH)); // 选个黑画刷
    Graphics gr;

    gr.Draw (hdc); // 先对gr进行一次画操作

    // 我们要保证的是,gr.Draw (hdc)不会改变hdc,这样先前的SelectObject
    // 才有效,否则,如果在Graphics::Draw()函数中进行了一次或多次SelectObject时,
    // 效果就会难以预料。
    FillRect (hdc, 0, 0, 100, 100); // 使用 BLACK_BRUSH进行填充矩形。

    ReleaseDC (hdc);

    这就是 SaveDC 和 RestoreDC 的作用。这个和汇编中参数的压栈、弹栈是类似的。

    ------ 补充 ------

    --------- SaveDC 和 RestoreDC 的用法 -----

    int SaveDC (HDC hdc); 它返回一个标识符,必定是一个正值。

    BOOL RestoreDC (HDC hdc, int id); 参数id是已保存的ID值,即为SaveDC的返回值。所以有此用法:

    --

    int id = SaveDC (hdc);

    /*** do something */

    RestoreDC (hdc, id);

    ---- 另一种用法。。很多人不愿意使用一个ID变量,在RestoreDC中可以把ID参数设为-1,表示恢复最近保存的HDC。

    SaveDC (hdc);

    /** ... */

    RestoreDC (hdc, -1);

  • 相关阅读:
    idea快捷键总结
    将对象序列化和反序列化
    在Springmvc中获取properties属性
    配置springmvc在其他类中(spring容器外)获取注入bean
    redis学习之三配置文件redis.conf 的含义
    redis学习之二from github
    敏捷开发方法XP的12个最佳实践
    IIS-网站发布之后访问HTTP 错误 403.14
    IIS-将iis直接指向.net代码会出现错误
    HTTP 错误 500.24
  • 原文地址:https://www.cnblogs.com/lin1270/p/2302998.html
Copyright © 2011-2022 走看看