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

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

18行目: 18行目:
  [クラスの種類(T)]   MFCクラスを選択<br>
  [クラスの種類(T)]   MFCクラスを選択<br>
  [クラス名(N)]     好きなクラス名(ここではCPaneBView)<br>
  [クラス名(N)]     好きなクラス名(ここではCPaneBView)<br>
  [基本クラス(B)]    CFormViewクラス(CViewの派生クラスならどれでもよい)<br>
  [基本クラス(B)]    CViewの派生クラス(ここではCFormViewクラスを使用する)<br>
<br>
<br>
まず、CMainFrm.hファイルを開いて、以下のコードを入力する。<br>
まず、CMainFrm.hファイルを開いて、以下のコードを入力する。<br>
25行目: 25行目:
  CMainFrame.h
  CMainFrame.h
   
   
  class CMainFrame : public CFrameWnd
  class CMainFrame : public CFrameWndEx
  {
  {
     // ...
     // ...
     public:
     public:
       CSplitterWnd    m_SplitMain;  // スプリッタウインドウ
       CSplitterWndEx  m_SplitMain;  // スプリッタウインドウ
     // ...
     // ...
  }
  }
55行目: 55行目:
  {
  {
     // ...
     // ...
     m_SplitWndMain.CreateStatic(  // スプリッタウインドウの作成
     if(FLASE == m_SplitWndMain.CreateStatic(  // スプリッタウインドウの作成
      this,                      // スプリッタウインドウの親ウィンドウを指定。ここではメインフレームを分割するのでthisを指定。
                  this,                      // スプリッタウインドウの親ウィンドウを指定
      1,                        // 行の分割数を指定。ここでは縦分割は無いので1を指定
                                              // ここではメインフレームを分割するのでthisを指定
      2);                        // 列の分割数を指定。ここでは左右分割なので2を指定
                  1,                        // 行の分割数を指定。ここでは縦分割は無いので1を指定
                  2)                         // 列の分割数を指定。ここでは左右分割なので2を指定
    {
      return FALSE;
    }
   
   
     m_SplitMain.CreateView(        // ペインA(ペイン場所1行1列目)を作成
     if(FALSE == m_SplitMain.CreateView(        // ペインA(ペイン場所1行1列目)を作成
      0,                          // スプリッタの行番号を指定
                  0,                          // スプリッタの行番号を指定
      0,                          // スプリッタの列番号を指定
                  0,                          // スプリッタの列番号を指定
      RUNTIME_CLASS(CPaneAView),  // 指定ペインを管理するViewクラスCPaneAViewを指定
                  RUNTIME_CLASS(CPaneAView),  // 指定ペインを管理するViewクラスCPaneAViewを指定
      CSize(20, 0),              // ペインのサイズ
                  CSize(20, 0),              // ペインのサイズ
      pContext);
                  pContext)
    {
      return FALSE;
    }
   
   
     m_SplitMain.CreateView(        // ペインB(ペイン場所1行2列目)を作成。
     if(FALSE == 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)
    {
      return FALSE;
    }
     // ...
     // ...
    return TRUE;
  }
  }
  </source>
  </source>
<br>
<br>
ここで注意するのが、CSplitterWnd::CreateView関数の第3引数である。<br>
ここで注意するのが、CSplitterWndEx::CreateView関数の第3引数である。<br>
第3引数において、指定ペインを管理するViewクラスを指定する。<br>
第3引数において、指定ペインを管理するViewクラスを指定する。<br>
ペインAを管理するのはCPaneAViewなのでこれを指定する。同様に、ペインBを管理するのはCPaneBViewクラスなので、CPaneBViewを指定する。<br>
ペインAを管理するのはCPaneAViewなのでこれを指定する。同様に、ペインBを管理するのはCPaneBViewクラスなのでこれを指定する。<br>
尚、MDIアプリケーションの場合も同様に、CChildFrameクラスにOnCreateClient関数をオーバーライドして、OnCreateClient関数内に同様のコードを追加する。<br>
'''※MDIアプリケーションの場合も同様に、CChildFrameクラスにOnCreateClient関数をオーバーライドして、'''<br>
''' OnCreateClient関数内に同様のコードを追加する。'''<br>
<br><br>
<br><br>