所以我的主对话框通过这个函数调用无模式对话框(这是项目中的遗留代码):
registerNewConstraint
问题:所有子对话框都保留在我的主对话框之上 期望的行为:无论哪个是(它们都是无模式的),无论是主对话框还是子对话框,我希望它成为最顶层的对话框。谢谢!
注意:我已尝试使用我的主对话框void MyClass::ShowDialog(CDialog* dialog)
{
if (!IsWindow(dialog->m_hWnd))
{
return;
}
int nCmdshow1 = dialog->IsWindowVisible() ? SW_HIDE : SW_SHOW;
dialog->ShowWindow( nCmdshow1 );
}
这些但是没有工作:
1. OnInitDialog()
2。SetWindowPos(&this->wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
修改
此外,子对话框以这种方式创建:
SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
答案 0 :(得分:0)
只要两个窗口之间存在所有者关系。窗口的所有者永远不会位于拥有的窗口之上。
所有者,父级,子级关系中的Windows始终表现相同。拥有/子窗口始终位于父/所有者之上。
如果你想打破这个,你必须打破所有者/子关系。让所有对话窗口都没有所有者......而不是它们可以自由浮动。
但是:我希望你的程序表现不好。更糟。用户可能会搜索其他窗口下方深处的窗口。当你的程序活跃起来时,他们永远不会站在前面。
See the description about parent/child/owned windows here。此article也许有用。
编辑:问题是如果没有给出父级,MFC内部会将主窗口设置为所有者。只有对BOOL Wnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd, HINSTANCE hInst)
的调用才允许将pParentWnd保留为NULL。
因此您可以正常创建窗口,但在创建后使用SetParent(NULL)。 MFC再次提出这个问题。因此,您可以使用API函数和对话框的句柄。