美文网首页
CDialog Keep Focus

CDialog Keep Focus

作者: 朝圣的路上 | 来源:发表于2015-10-12 13:58 被阅读35次

    CDiaolg 有 module 和 module-less两种模式。其中的区别可百度和google.
    这里主要介绍怎么保持dialog不被其他弹出的dialog夺取焦点。

    首先Dialog1需要保持用户输入。

    BOOL Dialog1::OnInitDialog() 
    {
        CDialog::OnInitDialog();
        ::SetWindowPos(m_hWnd,HWND_TOPMOST,100, 100, 0, 0, SWP_NOSIZE|SWP_NOMOVE);// set the topmost dialog 
    
        return TRUE;
    }
    

    其次Dialog2为pop dialog,但不希望夺走Dialog1的focus.

    BOOL Dialog2::OnInitDialog() 
    {
        CDialog::OnInitDialog();
        ShowWindow(SW_HIDE);// or ShowWindow(SW_SHOWNOACTIVATE)
        return FALSE;//must return false to keep no activeate.
    }
    

    如果需要设置为顶层窗口,又不要焦点。

    void Dialog::BringTop()
    {
          ::SetWindowPos(m_hWnd,HWND_TOP,100, 100, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
    }
    

    总之,焦点(focus)和激活(activate)基本关联,Create, Initialize,Show 等都可能激活一个dialog.

    相关文章

      网友评论

          本文标题:CDialog Keep Focus

          本文链接:https://www.haomeiwen.com/subject/zekocttx.html