繁体   English   中英

使重点突出的无模式对话框最顶部

[英]Make focused modeless dialog topmost

因此,我有一个主对话框,可以通过此函数调用无模式对话框(这是项目上的旧代码):

void MyClass::ShowDialog(CDialog* dialog)
{
    if (!IsWindow(dialog->m_hWnd))
    {
        return;
    }

    int nCmdshow1 = dialog->IsWindowVisible() ? SW_HIDE : SW_SHOW;
    dialog->ShowWindow( nCmdshow1 );
}

问题:所有子对话框都位于主对话框的顶部。
所需的行为: 无论是主对话框还是子对话框, 无论是哪个焦点 (它们都是无模式的),我都希望它成为最顶层的对话框。 谢谢!

注意 :我已经在主对话框的OnInitDialog()上尝试过这些,但是没有用:
1. SetWindowPos(&this->wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
2. SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

编辑
此外,子对话框是通过以下方式创建的:
m_subDlg1->Create( SubDlg1::IDD, this );

只要两个窗口之间存在所有者关系。 窗口的拥有者永远不能在拥有的窗口之上。

Windows在所有者,父级,子级关系中的行为始终相同。 拥有/子窗口始终位于父/所有者的顶部。

如果要破坏此关系,则必须破坏所有者/子关系。 让所有对话框窗口都没有拥有者...可以自由浮动。

但是:我希望您的程序性能不会更好。 更糟。 用户可能会搜索位于其他窗口下方深处的窗口。 当您的程序启动时,它们将永远不会领先。

请参阅此处有关父/子/自有窗口的说明 此外, 本文可能会有所帮助。

编辑:问题是,如果没有给出父项,则MFC内部会将主窗口设置为所有者。 仅对BOOL Wnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd, HINSTANCE hInst)允许将BOOL Wnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd, HINSTANCE hInst)保留为NULL。

因此,您可以正常创建窗口,但是在创建窗口后使用SetParent(NULL)。 再次MFC ASSERTs。 因此,您可以使用API​​函数和对话框的句柄。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM