どのようにMDIアプリケーションでのCViewの子であることをMFCモーダルダイアログを変更するには?

StackOverflow https://stackoverflow.com/questions/2545517

  •  23-09-2019
  •  | 
  •  

質問

私は、ドキュメント/ビュー/フレームの実装です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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top