CDialog Keep Focus

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)