[英]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.