MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MFCコントロール - 分割ウインドウのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MFCコントロール - 分割ウインドウ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 分割ウインドウとは、ウインドウが2つ以上に分割されているウィンドウの事である。<br> Visual C++ではそれぞれの分割された個々のウインドウを「ペイン」と呼ぶ。<br> <br><br> == 左右2分割の分割ウインドウの作成 == MFCでは、分割ウインドウを作成するAPIが標準で用意されている。それが、CSplitterWnd::CreateStatic関数である。<br> 下図のような1行2列の2ペインを持つ分割ウインドウのプログラムを記述する。<br> <br> まず、各ペインを管理するViewクラスを作成する。<br> Viewクラスは、ペインの数だけ必要になるので、上図のように左右2つに分割すると、Viewクラスは全部で2つ必要になる。<br> paneA(左ペイン)にはプロジェクト作成時で用意されているViewクラスを利用し、paneB(右ペイン)のViewクラスは新規で作成する。<br> <br> プロジェクトに新規Viewクラスを追加する。<br> 流れは以下の通りである。<br> [挿入(I)]->[クラスの新規作成(N)]<br> [クラスの種類(T)] MFCクラスを選択<br> [クラス名(N)] 好きなクラス名(ここではCPaneAView)<br> [基本クラス(B)] CFormViewクラス(CViewの派生クラスならどれでもよい)<br> <br> まず、CMainFrm.hファイルを開いて、以下のコードを入力する。<br> '''※MDIアプリケーションの場合は、CChildFrm.hファイルのCChildFrameクラスに同様のコードを追加する。'''<br> <source lang="c++"> CMainFrame.h class CMainFrame : public CFrameWnd { // ... public: CSplitterWnd m_SplitWndMain; // スプリッタウィンドウ // ... } </source> <br> 次に、CMainFrm.cppファイルのCMainFrameクラスにOnCreateClientメンバ関数をオーバーライドする。<br> 手順は以下の通りである。<br> [表示(V)]->[ClassWizard(W)]<br> [プロジェクト(P)] PaneTest<br> [クラス名(N)] CMainFrame<br> [オブジェクトID(I)] CPaneBView<br> [メッセージ(G)] OnCreateClient<br> <br> そして、CMainFrm.cppファイルに、以下のコードを追加する。<br> <source lang="c++"> #include "CPaneTestDoc.h" // CPaneAView.hよりも先にインクルード #include "CPaneAView.h" // CPaneAViewクラスのヘッダをインクルード #include "CPaneBView.h" // CPaneBViewクラスのヘッダをインクルード // ... BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // ... // ... m_SplitWndMain.CreateStatic( // スプリッタウィンドウの作成 this, // スプリッタウィンドウの親ウィンドウを指定。ここではメインフレームを分割するのでthisを指定。 1, // 行の分割数を指定。ここでは縦分割は無いので1を指定 2); // 列の分割数を指定。ここでは左右分割なので2を指定 m_SplitWndMain.CreateView( // paneA(ペイン場所1x1)を作成。 0, // スプリッタの行番号を指定 0, // スプリッタの列番号を指定 RUNTIME_CLASS(CPaneAView), // 指定ペインを管理するViewクラスCPaneAViewを指定 CSize(20, 0), // ペインのサイズ pContext); m_SplitWndMain.CreateView( // paneB(ペイン場所1x2)を作成。 0, // スプリッタの行番号を指定 1, // スプリッタの列番号を指定 RUNTIME_CLASS(CPaneBView), // paneBを管理するViewクラスCPaneBViewを指定 CSize(0,0), // ペインのサイズ pContext); // ... // ... } </source> <br> ここで注意するのが、CSplitterWnd::CreateView関数の第3引数である。<br> 第3引数において、指定ペインを管理するViewクラスを指定する。<br> paneAを管理するのはCPaneAViewなのでこれを指定する。同様に、paneBを管理するのはCPaneBViewクラスなので、CPaneBViewを指定する。<br> 尚、MDIアプリケーションの場合も同様に、CChildFrameクラスにOnCreateClient関数をオーバーライドして、OnCreateClient関数内に同様のコードを追加する。<br> <br><br> __FORCETOC__ [[カテゴリ:MFC]]
MFCコントロール - 分割ウインドウ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse