[C++][MFC] C++(VC++)でダイアログに枠無しの子ダイアログを埋め込み、フレーム管理や共通化を実現する

バージョン

C++:14

概要

例として複数のダイアログでトップエリアが同一の場合にそこを子ダイアログとして作成し、各ダイアログはそれを埋め込むだけで共通のデザインを実装できる。

要点

子ダイアログを親ダイアログで動的に生成する。
子ダイアログ自体を動的にコーディングしてもいいが、今回は予めDialogとして用意する。

コード

※記載を一部省略しています
■子ダイアログ
VSのリソースビューでDialogを新規で追加して、以下の属性を変更する。

  • ID:好きなIDに。今回はIDD_CHILDにする。
  • Border:なし(必要なら「細枠」にでも)
  • Style:子

■親ダイアログCParent.h

    public:
        std::unique_ptr<CChild> m_child;

■親ダイアログCParent.cpp

    コンストラクタ(){
        // 子に自身のウインドウハンドラを渡せばクリック処理などで親のメソッドを呼べる
        m_child = std::unique_ptr<CChild>(new CChild(this));
    } 

    表示処理(){
        m_child->Create(IDD_CHILE, this);
        m_child->ShowWindow(WS_VISIBLE, WS_CHILD);

        // ここに子コントローラの初期処理などを記載
        m_child->ほげ();

        m_child->MoveWindow(100, 50);
        m_child->ShowWindow(SW_SHOW);
    }

子ダイアログ側の初期処理(コードのほけの部分)で子ダイアログ固有の設定をすればいい。
たとえば、動的にボタンなどを生成するなど。




Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)