我的应用中有一个无模式弹出对话框。我想只在它所属的应用程序中使它成为最顶层,而不是总是在桌面上最顶层。
我试图将第一个参数设置为wndTopMost,但这样对话框将保留在桌面上,这是非常糟糕的用户体验。
我还尝试过使用SWP_NOZORDER参数的wndNoTopMost,但这只会在显示时将对话框放在前面。如果我将另一个对话框/窗口移动到对话框位置,则该对话框将隐藏在新对话框/窗口下。
我目前在OnInitDialog();
中使用SetWindowPos SetWindowPos(&wndNoTopMost
, myRect.left
, myRect.top
, myRect.Width()
, myRect.Height()
, SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOZORDER
);
答案 0 :(得分:1)
是HWND_TOPMOST
是非常糟糕的用户体验,所以我会赞扬你没有采取简单的方法并尝试翻转此开关。
让对话框显示在其他窗口之上的关键是设置所有者。 (请注意in Win32, an owner is distinct from a parent window,尽管这些术语经常令人困惑。)所有对话框都有一个所有者,对话框始终位于其所有者之上。
因此,当您创建无模式对话框(例如,使用CreateDialog
功能)时,请确保将应用程序主窗口的句柄指定为其所有者。令人困惑的是,该参数名为hwndParent
,但它实际上指定了所有者窗口。