簡體   English   中英

如何在 MDI 應用程序中將 MFC 無模式對話框更改為 CView 的子項?

[英]How to Change an MFC Modeless Dialog to be the child of a CView in an MDI application?

我有一個 MFC 應用程序,它是一個文檔/視圖/框架實現。 一個對話框作為無模式對話框運行,按需彈出(從菜單選項)。 我希望將無模式對話框添加到 MDI 子視圖中。 基本上,我想從資源文件加載模板,並在我添加到 MDI 模板列表的新三重奏 (doc/view/frame) 中將其創建為 CView 的子項。

我在派生的 CMyView 類中嘗試了一些東西:

void CMyView::OnInitialUpdate()
{
  m_ListDialog = new Dialogs::CListDialog( m_config, this );
  m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
  m_ListDialog->ShowWindow( SW_SHOW );
}

我試過調用 SetWindowPos, ModifyStyle (WS_CHILD, WS_VISIBLE, DS_CONTROL)。 我嘗試修改資源文件以手動設置子項和控制。

每次調用 Create 時,ListDialog 的 m_hWnd 都保留為 0。這告訴我它沒有被正確創建。 對 SetWindowPos() 或 ShowWindow() 的任何調用都失敗,因為 m_hWnd 為 0(調試斷言失敗)。

我需要做什么才能在我的 MDI 應用程序中構造、創建和顯示為 CMyView 的子級的無模式對話框?

我不知道。 但...
根據您的應用程序的外觀,您有幾種可能適合的替代選擇。

1/使用CFormView 如果您的視圖專用於對話框,那么您可以從 MFC 類 CFormView 派生一個視圖。 此視圖的目的是顯示一個對話框。

Juste 使用向導創建一個新應用程序,我認為您應該能夠選擇 CFormView 類作為您的視圖類,然后將生成的文件復制到您現有的應用程序中。

2/ 使用CSplitterWnd 一個視圖是 CFormView,另一個是您當前的 CView。

3/ 使用CDialogBar如果你的視圖已經顯示了一些東西,你可以使用類 CDialogBar 添加你的對話框作為工具欄。

這在我的 MDI 應用程序中有效...

void CGUIView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    p_Dlg = new CTestDlg;   // a CDialog derived class
    p_Dlg->Create(IDD_DIALOG1,this);
    p_Dlg->ShowWindow(SW_SHOW);
}

暫無
暫無

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

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