簡體   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