「MFCコントロール - 分割ウインドウ」の版間の差分

7行目: 7行目:
MFCでは、分割ウインドウを作成するAPIが標準で用意されている。それが、CSplitterWnd::CreateStatic関数である。<br>
MFCでは、分割ウインドウを作成するAPIが標準で用意されている。それが、CSplitterWnd::CreateStatic関数である。<br>
下図のような1行2列の2ペインを持つ分割ウインドウのプログラムを記述する。<br>
下図のような1行2列の2ペインを持つ分割ウインドウのプログラムを記述する。<br>
[[ファイル:MFC Pane 01.jpg|フレームなし|中央]]
<br>
<br>
まず、各ペインを管理するViewクラスを作成する。<br>
まず、各ペインを管理するViewクラスを作成する。<br>
28行目: 29行目:
     // ...
     // ...
     public:
     public:
       CSplitterWnd    m_SplitWndMain;     // スプリッタウィンドウ
       CSplitterWnd    m_SplitMain; // スプリッタウインドウ
     // ...
     // ...
  }
  }
43行目: 44行目:
そして、CMainFrm.cppファイルに、以下のコードを追加する。<br>
そして、CMainFrm.cppファイルに、以下のコードを追加する。<br>
  <source lang="c++">
  <source lang="c++">
  #include  "CPaneTestDoc.h" // CPaneAView.hよりも先にインクルード
CMainFrm.cpp
  #include  "CPaneAView.h"   // CPaneAViewクラスのヘッダをインクルード
  #include  "CPaneBView.h"   // CPaneBViewクラスのヘッダをインクルード
  #include  "CPaneADoc.h"   // CPaneAView.hよりも先にインクルード
  #include  "CPaneAView.h" // CPaneAViewクラスのヘッダをインクルード
  #include  "CPaneBView.h" // CPaneBViewクラスのヘッダをインクルード
   
   
  // ...
  // ...
52行目: 55行目:
  {
  {
     // ...
     // ...
    // ...
     m_SplitWndMain.CreateStatic(  // スプリッタウインドウの作成
     m_SplitWndMain.CreateStatic(  // スプリッタウィンドウの作成
       this,                      // スプリッタウインドウの親ウィンドウを指定。ここではメインフレームを分割するのでthisを指定。
       this,                      // スプリッタウィンドウの親ウィンドウを指定。ここではメインフレームを分割するのでthisを指定。
       1,                        // 行の分割数を指定。ここでは縦分割は無いので1を指定
       1,                        // 行の分割数を指定。ここでは縦分割は無いので1を指定
       2);                        // 列の分割数を指定。ここでは左右分割なので2を指定
       2);                        // 列の分割数を指定。ここでは左右分割なので2を指定
   
   
     m_SplitWndMain.CreateView(     // paneA(ペイン場所1x1)を作成。
     m_SplitMain.CreateView(       // ペインA(ペイン場所1行1列目)を作成
       0,                          // スプリッタの行番号を指定
       0,                          // スプリッタの行番号を指定
       0,                          // スプリッタの列番号を指定
       0,                          // スプリッタの列番号を指定
65行目: 67行目:
       pContext);
       pContext);
   
   
     m_SplitWndMain.CreateView(     // paneB(ペイン場所1x2)を作成。
     m_SplitMain.CreateView(       // ペインB(ペイン場所1行2列目)を作成。
       0,                          // スプリッタの行番号を指定
       0,                          // スプリッタの行番号を指定
       1,                          // スプリッタの列番号を指定
       1,                          // スプリッタの列番号を指定
       RUNTIME_CLASS(CPaneBView),  // paneBを管理するViewクラスCPaneBViewを指定
       RUNTIME_CLASS(CPaneBView),  // paneBを管理するViewクラスCPaneBViewを指定
       CSize(0,0),                 // ペインのサイズ
       CSize(0, 0),               // ペインのサイズ
       pContext);
       pContext);
    // ...
     // ...
     // ...
  }
  }
78行目: 79行目:
ここで注意するのが、CSplitterWnd::CreateView関数の第3引数である。<br>
ここで注意するのが、CSplitterWnd::CreateView関数の第3引数である。<br>
第3引数において、指定ペインを管理するViewクラスを指定する。<br>
第3引数において、指定ペインを管理するViewクラスを指定する。<br>
paneAを管理するのはCPaneAViewなのでこれを指定する。同様に、paneBを管理するのはCPaneBViewクラスなので、CPaneBViewを指定する。<br>
ペインAを管理するのはCPaneAViewなのでこれを指定する。同様に、ペインBを管理するのはCPaneBViewクラスなので、CPaneBViewを指定する。<br>
尚、MDIアプリケーションの場合も同様に、CChildFrameクラスにOnCreateClient関数をオーバーライドして、OnCreateClient関数内に同様のコードを追加する。<br>
尚、MDIアプリケーションの場合も同様に、CChildFrameクラスにOnCreateClient関数をオーバーライドして、OnCreateClient関数内に同様のコードを追加する。<br>
<br><br>
<br><br>