Mission4: 必要な機能の組み込み。


【ステップ1】

 今度は、Mission3 の続きである。
 VisualC++ の画面は、以下のようになっているはずである。

【Misson3 画面】
図1 Mission3画面


【ステップ2 フルスクリーン表示への対応】

 プロジェクトを改造して行く。 以下の指令に従うべし。


【ステップ2−1 フレームウインドウクラスの改造 Part1】
解説
ワークスペースより、"MainFrm.cpp"
をダブルクリックする。
すると左のような画面になったはずだ。

続いて、ファイルの先頭近辺にある

#include "MainFrm.h"

の後に、

#include <d3d8.h>
#include <d3dx8.h>
#include "d3dmain.h"
の三行を書き足す。

図2 アプリケーションクラスの改造


改造前 改造後
リスト1a リスト1b


【ステップ2−2 最大化コントロールへの対応】
解説

「クラス名」に「CMainFrm」を選択、
「メッセージ」という欄より「WM_SIZE」を
探し出して、選択(マウスでクリック)する。

そのあと、「関数の作成」ボタンをクリックして、
「コード編集」ボタンをクリック。
図3 クラスウィザード画面


【ステップ2−3 プログラム改造】

リスト2 改造前

解説
すると、上のようなプログラムが表示されたはずです。
OnSize(・・・) は、Windows のウインドウのサイズが変更された時に
呼び出されるプログラムです。

つまり、画面が最大化されても、このプログラムが呼び出される
事になります。

これを、以下のように改造します。


リスト3 改造後


改造し終えたらF5キーを押して実行してみましょう。
図4 実行画面


見た目は何も変わっていないようですが、
ここで、最大化ボタンを押すと・・・・・・・。

図5 最大化
左図のようになりますね。

ただ、一般にゲーム画面ではマウスカーソルは
いらないはず。

次のステップで消してしまいましょう。


【ステップ3】

【ステップ3−1 マウスカーソルの消去】
解説

再度、ClassWizard です。

「クラス名」に「CMainFrm」を選択、
「メッセージ」という欄より「WM_SETCURSOR」を
探し出して、選択(マウスでクリック)する。

そのあと、「関数の作成」ボタンをクリックして、
「コード編集」ボタンをクリック。
図5 クラスウィザード画面


【ステップ3−2 プログラム改造】

リスト4 改造前

解説
すると、上のようなプログラムが表示されたはずです。
ここは、ウィンドウの上にカーソルが入った時など、
カーソルを変更すべきタイミングで呼び出されます。

これを、以下のように改造します。


リスト5 改造後



さて、F5キーを押して実行してみましょう。

すかさず画面を最大化すると・・・・・。


図6 改造後


カーソルは消えましたね。

ちなみに、AdjustCursor() という関数は、d3dmain.cpp の中で宣言されています。


【ステップ4】

このままではウィンドウモードに戻せないので、戻す方法を作ります。
Alt+Enter キーで切り替える方法が最も一般的な様なので、今回はそういう対応にします。

【ステップ4−1 フルスクリーン・ウインドウモード切替】
解説

再度、ClassWizard です。

「クラス名」に「CMainFrm」を選択、
「メッセージ」という欄より「WindowProc」を
探し出して、選択(マウスでクリック)する。

そのあと、「関数の作成」ボタンをクリックして、
「コード編集」ボタンをクリック。
図5 クラスウィザード画面



【ステップ4−2 プログラム改造】

リスト6 改造前

解説
すると、上のようなプログラムが表示されたはずです。
ここは、イベントが呼ばれた時、それをMFCが処理する前に受け取れる関数です。
これを、以下のように改造します。


リスト7 改造後

解説
ToggleFullscreen は、d3dmain.cpp の中にある関数です。
現在フルスクリーンモードであればウィンドウモードに切り替えます。
現在ウィンドウモードであればフルスクリーンモードに切り替えます。
また、IsWindowed は、d3dmain.h の中で宣言しているマクロです。
これは現在ウィンドウモードであれば TRUE を、
そうでなければFALSE を返します。
ここでは、もしフルスクリーンモードであれば、終了キー(Alt+F4) 以外の
アプリケーションに対するショートカットおよびメニュー操作を無効にしています。


Mission4 はここまでとします。

戻る