1

Doc / View/Frame実装であるMFCアプリケーションがあります。1つのダイアログは、(メニューオプションから)オンデマンドでポップアップするモードレスダイアログとして実行されています。モードレスダイアログを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のままになります。これは、正しく作成されていないことを示しています。m_hWndが0であるため、SetWindowPos()またはShowWindow()の呼び出しは失敗します(デバッグアサーションは失敗します)。

モードレスダイアログを構築、作成し、MDIアプリケーションでCMyViewの子として表示するには、何をする必要がありますか?

4

2 に答える 2

1

知らない。しかし...
アプリケーションの外観に応じて適切な選択肢がいくつかあります。

1/使用CFormView。ビューがダイアログ専用の場合は、MFCクラスCFormViewからビューを派生させることができます。このビューの目的は、ダイアログを表示することです。

ウィザードを使用して新しいアプリケーションを作成するだけで、ビュークラスとしてCFormViewクラスを選択し、生成されたファイルを既存のアプリケーションにコピーできるはずです。

2/を使用しCSplitterWndます。1つのビューはCFormViewで、もう1つのビューは現在のCViewです。

3 /使用CDialogBar ビューにすでに何かが表示されている場合は、クラスCDialogBarを使用してダイアログをツールバーとして追加できます。

于 2010-03-31T09:46:41.807 に答える
1

これは私の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);
}
于 2010-03-31T14:23:55.773 に答える