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.