どのようにMDIアプリケーションでのCViewの子であることをMFCモーダルダイアログを変更するには?
質問
私は、ドキュメント/ビュー/フレームの実装ですMFCアプリケーションを持っています。 1つのダイアログは、(メニュー・オプションから)オンデマンドでポップアップするモードレスダイアログとして実行されています。私は、MDIの子ビューにモードレスダイアログを追加するために探しています。基本的に、私はMDIのテンプレートリストに追加していことをリソースファイルからテンプレートをロードし、私の新しいトリオ(DOC /ビュー/フレーム)内の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 );
}
私はModifyStyle(WS_CHILD、WS_VISIBLE、DS_CONTROL)、SetWindowPosを呼び出して試してみました。私は子供を設定し、手動で制御するためのリソースファイルを変更しようとしました。
毎回それが作成呼び出す0これは、それが適切に作成され得ていないです私に語ったように、ListDialogのm_hWndをが残されています。 m_hWndをが0であるため、任意のSetWindowPos()の呼び出しかのShowWindow()は(デバッグアサーションが失敗)失敗します。
私はモードレスダイアログを作成し、構築する取得し、私のMDIアプリケーションでCMyViewの子として表示されるように行う必要がありますか?
解決
私は知りません。しかし...
あなたはどのようにあなたのアプリケーションがすべきルックスに応じて適した可能性があり、いくつかの代替の選択肢があります。
1 /使用CFormView
。
あなたのビューがダイアログに専用されている場合、あなたは、MFCクラスのCFormViewからビューを導き出すことができます。このビューの目的は、ダイアログを表示することです。
ジュストウィザードを使用して新しいアプリケーションを作成し、私はあなたのビュークラスとしてCFormViewのクラスを選択することができるはずだと思うし、あなたのexistaingアプリケーションに生成されたファイルをコピーします。
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);
}