簡體   English   中英

如何在另一個CDialog中顯示嵌套的CDialog?

[英]How can I display a nested CDialog within another CDialog?

我創建了兩個CDialog類。 我們稱它們為MainDialog和ExtraDialog。 我希望ExtraDialog既可以通過doModal顯示,也可以作為MainDialog中的嵌套對話框顯示。

我已經可以通過Button和doModal分別提出它。 但是,我一直對如何將其放置在MainDialog中感到困惑。

CWnd* m_pWndStatic = new CWnd;
m_pWndStatic->Create(_T("Something"), _T("Title"), WS_CHILD | WS_VISIBLE, CRect(x, y, xEnd, yEnd), this, idWnd);

CExtraDialog* dlg = new CExtraDialog;
dlg->Create(IDD_NEW_DIALOG, this); //Or second variable can be m_pWndStatic?
//dlg->SetWindowPos(m_pWndStatic, x, y, xEnd, yEnd, SWP_NOZORDER | SWP_NOACTIVATE);
//dlg->Invalidate();
//dlg->ShowWindow(SW_SHOW);
//m_pWndStatic->ShowWindow(SW_SHOW);

在上面,我分享了我嘗試過的一些嘗試。 我希望創建一個CWnd並將對話框放入CWnd中,但是我感覺好像丟失了一些東西,我真的找不到在線上有用的東西。

編輯:我基本上是試圖將多個CWnd放入一個CDialog,並讓CWnd運行來自不同類的不同功能。 Kinda喜歡將樂高積木拼在一起。

Edit2:我發現了一個類似的問題? 我希望使其相似,但是我只是不想使用按鈕,而是希望其中兩個按鈕能夠一次顯示。 在主對話框中嵌入對話框並在MFC中單擊按鈕進行切換

我一直被困在如何將其放置在MainDialog中。

至少刪除WS_POPUPWS_CAPTIONWS_SYSMENU樣式。 添加WS_CHILD樣式。

強烈建議添加WS_EX_CONTROLPARENT擴展樣式,以允許鍵盤導航進出嵌入式對話框。

例如,在父對話框的OnInitDialog()中,您可以添加:

// Note: Create member variable CExtraDialog, so there is no need for dynamic allocation!
m_extraDlg.Create( IDD_NEW_DIALOG, this );

// Adjust styles. 1st parameter removes, 2nd adds.
m_extraDlg.ModifyStyle( WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME, WS_CHILD );

// Adjust extended styles. 1st parameter removes, 2nd adds.
m_extraDlg.ModifyStyleEx( WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE, WS_EX_CONTROLPARENT );

// As we have changed the frame, we let Windows recalculate the non-client area
// by passing the SWP_FRAMECHANGED flag to SetWindowPos().
m_extraDlg.SetWindowPos( nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED | 
     SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );

我希望創建一個CWnd並將對話框放入CWnd中

我建議始終使用CDialog派生類作為嵌入式對話框的父級。 這樣可以確保與Windows對話框管理器在標准鍵盤導航等功能方面的最佳兼容性。 您將使用該系統,而不是反對它。

更多閱讀:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM