C++技巧之四

类别:VC语言 点击:0 评论:0 推荐:
代码清单2 window_redraw_scope的节略本

/* /////////////////////////////////////////////////////////////

*

* ...

*

* Extract from winstl_window_redraw_scope.h  

*摘录自winstl_window_redraw_scope.h

*

* www:        http://www.synesis.com.au/winstl

*             http://www.winstl.org/

*

* Copyright (C) 2002, Synesis Software Pty Ltd.

*版权所有(C) 2002, Synesis Software Pty Ltd公司

* (Licensed under the Synesis Software Standard Source License:

*  http://www.synesis.com.au/licenses/ssssl.html)

* (由Synesis Software Standard Source License授权许可:

*  http://www.synesis.com.au/licenses/ssssl.html)

*

* ...

*

* ////////////////////////////////////////////////////////// */

 

...

 

 

namespace winstl

{

 

    class window_redraw_scope

    {

// Construction

// 构造

    public:

        // Takes a HWND and changes it's current redraw-status,

        // which is set back to the original state in the

        // destructor.

       //取得HWND 句柄并改变其当前重画状态,在析构器中设置其回到初始状态。

        ws_explicit_k window_redraw_scope(HWND hwnd,

                        ws_bool_t bInvalidateOnUnlock = true)

            : m_hwnd(hwnd)

            , m_bInvalidateOnUnlock(bInvalidateOnUnlock)

        {

            ::SendMessage(m_hwnd, WM_SETREDRAW, false, 0L);

        }

 

        ~window_redraw_scope() winstl_throw_0()

        {

            ::SendMessage(m_hwnd, WM_SETREDRAW, true, 0L);

 

            if(m_bInvalidateOnUnlock)

            {

                ::InvalidateRect(m_hwnd, NULL, true);

            }

        }

 

// Members

// 成员变量

    protected:

        HWND        m_hwnd;

        ws_bool_t   m_bInvalidateOnUnlock;

 

// Not to be implemented

// 不被实现

    private:

        window_redraw_scope(window_redraw_scope const &rhs);

        window_redraw_scope const

            &operator =(window_redraw_scope const &rhs);

    };

 

} // namespace winstl 名称空间

 

图表 1 Window作用域(scope)例子

本文地址:http://com.8s8s.com/it/it1277.htm