Visual C++ MFCプログラミング
"MFC によるWindows95プログラミング"の第1章に書かれている MFC を理解する上で重要な記述を纏めておきます。
- MFC は、Windows API のまわりを取り巻くように配置されたオブジェクト指向のラッパーとして Microsoft が提供している C++クラスライブラリである。その一部はプログラマが直接使うものであり、その他は主にプログラマが独自のクラスを作成するためのベースクラスとなる。
- MFC はまたアプリケーションフレームワークである。MFC は事実上プログラムの動作のすべての側面をカプセル化する。MFC のドキュメント/ビューアーキテクチャは、API上に構築された強力な基盤である。
- MFC アプリケーションフレームワークの重要な基礎は、ドキュメント/ビューアーキテクチャである。ドキュメントとビューが重要な理由は、ドキュメント/ビューアプリケーションが、アプリケーションフレームワークから最大のメリットを受けるためである。MFC は広範囲なニーズ満たすために設計された各種クラスを提供している。
- MFC の CWnd クラスはウインドウの特性をカプセル化する。CWnd は直接使われることはなく、他のクラスのベースクラスとして使用される。
ドキュメント/ビューアーキテクチャについては第8章から記述があります。第8章まで読み進めるまでかなり時間を要しますので、第7章までは流し読みでいいかもしれません。MFC プログラムを始めるには、第8章が最も重要です。
- MFC は、2種類のドキュメント/ビューアーキテクチャをサポートしている。単一ドキュメントインターフェース(SDI)アプリケーションは、オープンされたドキュメントを同時に1つだけサポートする。複数ドキュメントインターフェース(MDI)アプリケーションは、ユーザーが同時に複数のドキュメントをオープンすることを可能にする。Msim は MDIアプリケーションです。
- ドキュメント/ビューアプリケーションは、フレームウィンドウのクライアント領域のデバイスコンテキストを取得し、そこに描画することはない。代わりにビューに描画する。
- SDIアプリケーションでは、フレームウィンドウクラスは CframeWnd から派生し、ドキュメントクラスは CDocument から派生し、ビュークラスは CView か、CScrollView などの関連クラスから派生する。
- すべての出力はビューに送られます。ビューはベースクラスの持つ機能を全て提供します。CEditView から派生するとエディットとスクロールの機能を持つビューになります。Msim のテキストを出力するビューは CEditView から、グラフを描画するビューは CScrollView から派生させています。
- 下記は MFC アプリケーションを新規作成した時の MFC AppWizard ステップ画面です。ステップ6/6 で基本クラスを設定しています。
MFC App Wizard により MFC アプリケーションフレームワークの最小構成が自動で作成されます。下記はこのままビルドして実行した画面です。ビューは CEditView から派生している為、テキストエディタの機能を持っています。Msim では回路図データの編集を行うビューとして使用します。MFC を使用することでデータの編集、保存などの機能を一行のコードも書かずに実現できてしまいます。
この状態から Msim では、実行ボタンなどのメニューリソースと計算プログラムを呼び出すコードを追加していきます。計算プログラムは最初にコマンドプロンプトから実行できるプログラムとして記述したもので十分に動作確認をした後、ウィンドウズフレームワーク上から実行するようにするとデバックの範囲をウインドウとの連携動作に絞れるのでデバッグが楽になります。ウインドウとの連携には、下記の動作が必要です。
- 回路図データの読み込み、実行時の設定値の書き出し、計算結果の描画とテキストの書き出し。
- 計算結果は、テキスト出力とグラフの描画を行う 2つのウインドウに出力します。
- MFC が提供しているウィンドウフレームワークには、1つのフレーム内に複数のウインドウを表示するスプリッタウィンドウの機能があります。Msim は 3つのウィンドウ表示の機能を持ちます。第9章にスプリッタウインドウについて記述があります。MFC を使用すると数行のコードを追加するだけでスプリッタウインドウが構成できます。
- 3つのウィンドウが表示できた後は、計算プログラムの呼び出しと終了を監視するコード、計算プログラムの計算結果をウインドウに出力するように計算プログラム中のコードを修正することです。
- 連携動作を理解するには、MFC の用意しているウィンドウメッセージについて理解することが必要です。ベースクラスのメッセージを処理する関数は、派生クラスで必要な機能を実現する為に追記します。これをオーバライドと呼んでいます。
- 計算プログラムには、3つのウインドウを区別するハンドルと呼ばれるポインタを渡します。計算プログラムはビュークラスの用意している関数を使用して、ウィンドウポインタを介して直接計算結果を出力します。関数の使用例は、流し読みした第2章から第6章が参考になります。
- ここまでできると、デバッグしながら MFC の理解を深められます。
Visual C++ の入門書は AppWizard、リソースエディタ、ClassWizard などのツールの利用方法を理解する上で必要です。下記は参考にした書籍です。メニューとダイアログの使い方についてやさしく記述されています。
第1部の最後に下記の記述があります。MFC は難解な部分もありますが、非常に強力で効率的です。
- Visual C++ が提供する各種ツールと MFC を利用することによって Windowsプログラムは Windows API をそのまま利用していた頃よりも格段に簡単になるはずです。
- Visual C++ に限らず、大規模なクラスライブラリを利用した開発環境は、ほとんどの場合、最初の取っ掛かりが非常に悪いのです。しかし、ライブラリの使いこなし方がわかってくれば、プログラミングはかならず効率的に、簡単に、そして楽しく行えるようになるはずです。
Msim について
2013-09-18
ホーム