代码之家  ›  专栏  ›  技术社区  ›  Kieveli

如何将mfc非模式对话框更改为mdi应用程序中cview的子对话框?

  •  1
  • Kieveli  · 技术社区  · 14 年前

    我有一个mfc应用程序,它是一个doc/view/frame实现。一个对话框作为无模式对话框运行,该对话框根据需要(从菜单选项)弹出。我希望将无模式对话框添加到MDI子视图中。基本上,我想从资源文件加载模板,并将其作为cview的子级创建在我要添加到mdi模板列表中的新trio(doc/view/frame)中。

    我在派生的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的子级显示,我需要做什么?

    2 回复  |  直到 5 年前
        1
  •  1
  •   FKDev    14 年前

    我不知道。但是…
    根据应用程序的外观,您可以选择几个合适的选项。

    1 /使用 CFormView . 如果视图专用于对话框,则可以从mfc类cformview派生视图。此视图的目的是显示一个对话框。

    只需使用向导创建一个新的应用程序,我认为您应该能够选择cformview类作为您的视图类,然后将生成的文件复制到您的退出应用程序中。

    2 /使用A CSplitterWnd . 一个视图是cformview,另一个视图是您当前的cview。

    3 /使用 CDialogBar 如果视图已显示某些内容,则可以使用类cdialogbar将对话框添加为工具栏。

        2
  •  1
  •   Richard Chambers    5 年前

    这在我的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);
    }