2017-05-16 20 views
0

MFCを使用して親ダイアログ内に子ダイアログを埋め込む方法を示すtutorialが出ました。私はVisual Studio 2015を使用しています。私の設定は以下の通りです。 Visual Studio MFCアプリケーションウィザードを使用してMFCApplication3という新しいMFC Visual C++プロジェクトを作成するには、ダイアログベースのアプリケーションを選択します。共有DLLでMFCを使用します。ボイラープレートコードを使用すると、シンプルなThick Frame Dialogがあり、最大化または最小化はできません。MFC:Emdedded子ダイアログが親ダイアログ内に表示されない

私のリソースビューでは、メインダイアログを編集するためにダイアログエディタに行きます。私は中央に空白の領域を持つ画像コントロールを追加し、それをIDC_STATICと命名します。これは、私が埋めたい子ダイアログのプレースホルダとして使われます。

リソースビューではまだ

MFC Basic Dialog with Placeholder

、私は新しいダイアログを作成します。それは次のようになります。私はそれをIDD_CHILDと呼ぶ。私はいくつかのコンポーネントを追加します。それは次のようになります。

MFC Dialog no border

は今バックソリューションエクスプローラで、私は、MFCクラスを追加するために選択し、クラスの追加ウィザードを使用してクラスを追加します。クラス名はCChildDialogで、基底クラスはCDialogであり、既に生成されたIDD_CHILDをダイアログIDとして使用します。 .cppと関連するファイル.hを生成します。

CChildDialog::CChildDialog(CWnd* pParent /*=NULL*/) 
    : CDialog(IDD_CHILD, pParent) 
{ 
    Create(IDD_CHILD, pParent); 
} 

今、私はプロジェクトを作成したときに自動的に生成されたダイアログのコードを変更:コンストラクタになるようCChildDialogのコンストラクタでは、私はCreate関数の呼び出しを追加します。 CMFCApplication3Dlg.hには、と、#includeと呼ばれるタイプCChildDialog*のメンバーであるprivateを追加します。 CMFCApplication3Dlg.cppでは、私が前returnステートメントにOnInitDialog機能にこれを追加します。

CRect rc; 
GetDlgItem(IDC_STATIC)->GetWindowRect(rc); 
ScreenToClient(&rc); 

m_childDlg = new CChildDialog(this); 
m_childDlg->MoveWindow(rc); 

今、私はそれを実行し、ソリューションをビルドし、それは最初の画像でないように見えます。子ダイアログの空白のプレースホルダスポットですが、子ダイアログはありません。私は何が間違っていますか?

答えて

1

私の問題に対する答えは、リソースビューで設定する必要がある2つのプロパティであることが判明しました。私は子ダイアログオープン(IDD_CHILD)を持っているときにプロパティペイン内、私は次のプロパティを設定する必要があります。

  • スタイル:子供
  • 可視:TRUE

を(私はなぜVisibleがこの場合デフォルトでFALSEになっているのかわかりません)。それらの2つの変更を行う、愚か!これらのダイアログボックスの一般的な使用は、複数のボックスが同じスペースを占有し、必要に応じて示されているタブコントロール、であるため、

MFC Dialog with Child Dialog

+0

は 'false'に「目に見える」デフォルト:私は私の埋め込まれたダイアログを取得します私見では – YePhIcK

関連する問題