この Tips に興味を示す方は以下のフォームビューとドッキングウィンドウについてご存知の方だと思います。
これを踏まえて、次のページを読んで納得できる方はこの先を読む必要はありません。
How to put CFormView on CDockableView
こちら↑をペラ読みして、よくわからない方のために以下に作業メモを残します。
まずフォームビューのクラスと、ドッキングウィンドウのクラスをそれぞれ用意します。
※このとき、フォームビューのプロパティで「Style」を「子」に指定しておきます。(そうしないと実行時にエラーになります)
ドッキングウィンドウのクラスのヘッダーファイルにて、フォームビューのクラスへのポインタをメンバとして持たせます。
実体ではないので、ヘッダーファイルではフォームビューのクラスは前方宣言に留めておきます。
こちら↓がドッキングウィンドウのヘッダーファイルです。
※フォームビューのクラス名は「CSliderForm」になってます。
ここで示される OnCreate 関数と OnSize 関数は次に示すドッキングウィンドウのクラスの
プロパティのメッセージリストから自動で作成できます。
項目をクリックするだけで、コードがヘッダーファイルとソースファイルに作成されます。
それぞれの実装は次に示す通りです。
フォームビューである「CSliderForm」クラスのヘッダーファイルは次の通りです。
スライダーコントロールが一つあるフォームビューですね。
ここで示される OnInitialUpdate 関数 OnMouseActivate 関数の作り方は次に示す通りです。
フォームビュークラスのプロパティから、オーバーロードする関数を選択するだけです。
イベントハンドラも同じく、メッセージを選択するだけ。
OnSize 関数は先ほど作り方を示しましたから、もういいですね。
基本的に、ビューとかMFCの一般的なクラスはプロパティから関数をオーバーロードしたり
メッセージごとのイベントハンドラを用意するくらいしか仕事がありません。ただ、やり方を覚えるだけです。
ユーザーが新しく用意するのは、static 関数の CreateOne 関数だけです。
これらの関数のソースコードは次に示す通りです。
これでドッキングウィンドウにフォームが乗っかります。
こちら↑が実行結果です。
ドッキングウィンドウの中にスライダーコントロールがあるのがドッキングフォームウィンドウです。
ドッキングウィンドウにコントロールを配置したフォームが乗せられるようになると
MFCアプリケーションで出来ることがグっと広がる…かも?
最後に、ドッキングウィンドウを閉じたり、開いたりを繰り返すとフォームビューを作成している分メモリリークが起きると思います。
ドッキングウィンドウを閉じたら、フォームビューも解放するようにしておいてください。
以上です。
2011/04/09 最終更新