zoukankan      html  css  js  c++  java
  • [GUI开发]界面繁忙的处理

    当主线程需要进行耗时操作时,我们需要告知用户程序正在运行,需要用户耐心等待。这时可在按钮相应事件里添加
    CWaitCursor curWait;   
    该语句将会定义个CWaitCursor对象,在构造函数里会将光标设置为等待状态,在退出该作用域时会调用析构函数将恢复光标状态。

    CWaitCursor 定义在afxwin2.inl文件中

    _AFXWIN_INLINE CWaitCursor::CWaitCursor()
        { AfxGetApp()->BeginWaitCursor(); }
    _AFXWIN_INLINE CWaitCursor::~CWaitCursor()
    {
        AFX_BEGIN_DESTRUCTOR

            AfxGetApp()->EndWaitCursor();

        AFX_END_DESTRUCTOR
    }

    BeginWaitCursor和EndWaitCursor函数最后都调用了函数CWinApp::DoWaitCursor(int nCode)

    void CCmdTarget::BeginWaitCursor()
        { AfxGetApp()->DoWaitCursor(1); }
    void CCmdTarget::EndWaitCursor()
        { AfxGetApp()->DoWaitCursor(-1); }


    void CWinApp::DoWaitCursor(int nCode)
    {
        // 0 => restore, 1=> begin, -1=> end
        ENSURE_ARG(nCode == 0 || nCode == 1 || nCode == -1);
        ENSURE(afxData.hcurWait != NULL);
        AfxLockGlobals(CRIT_WAITCURSOR);
        m_nWaitCursorCount += nCode;
        if (m_nWaitCursorCount > 0)
        {
            HCURSOR hcurPrev = ::SetCursor(afxData.hcurWait);
            if (nCode > 0 && m_nWaitCursorCount == 1)
                m_hcurWaitCursorRestore = hcurPrev;
        }
        else
        {
            // turn everything off
            m_nWaitCursorCount = 0;     // prevent underflow
            ::SetCursor(m_hcurWaitCursorRestore);
        }
        AfxUnlockGlobals(CRIT_WAITCURSOR);
    }
    在CWinApp中有个等待计数,如果 等待数>0  则将光标设置为等待状态,反之则恢复光标状态

    因此,在合适的位置定义一个该类的对象,提示用户系统繁忙,能明显改善用户体验。

  • 相关阅读:
    Servlet
    Web服务器和Tomcat
    DOM文档对象模型
    JavaScript总结
    CSS总结
    商城——购物车模块
    用户注册登录认证模块
    P2P技术之STUN、TURN、ICE详解
    P2P中的NAT穿越(打洞)方案详解
    NAT技术详解
  • 原文地址:https://www.cnblogs.com/ityujian/p/3025046.html
Copyright © 2011-2022 走看看