Mission2: 画面一杯で起動させる。


今回は、DirectDraw を使う前段階として、
画面一杯で起動するアプリケーションを作成してみる。
といっても、先ほどの Mission1 のアプリケーションを改造する
だけである。カンタンだ。


【ステップ1】

 先ほどの、Mission1 の続きである。
 VisualC++ の画面は、以下のようになっているはずである。

【Misson1 画面】
図1 Mission1画面


【ステップ2・改造計画】

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

【ステップ2−1 クラスウィザードの起動】
解説

「表示」メニュー
  −>「ClassWizard 」 と選択し、
クラスウィザードを起動する。

メニュー操作がうざいと感じるならば、
Ctrl-W (Control キーを押しながら"W"のキーを押す)
でも、同じクラスウィザードが起動する。
図2 クラスウィザードの起動


【ステップ2−2 クラスウィザードで関数を選択】
解説

この画面が、
Mission1 で作成したアプリケーションの
改造の舞台になる。

まずは、メス・・・・じゃなくて。
(仮面ライダーネタ、古いな・・・・・)

「クラス名」なるポップアップメニューより、
「CMission1App」を選択し、
「メッセージ」という欄より「InitInstance」を
探し出して、選択(マウスでクリック)しよう。

それができたら、「コード編集」ボタンをクリック。
図3 クラスウィザード画面


【ステップ2−3 InitInstance の改造 Part1】
解説

ステップ2−2の後、
左のような画面になったはずだ。
スペースの都合で、予め注釈は削除してある。

プロジェクト生成時、注釈をしない
にしたはずなのに、VisualC++ は注釈をつけてくる。

小さな親切大きなお世話というヤツである。

画像を縮小した関係で少々読みにくいが、
無理に読む必要は無い。

この関数の中はごっそり入れ替える事になる。

それは次のステップにて。
図4 InitInstance 関数


【ステップ2−4 InitInstance の改造 Part2】

改造後のInitInstance を以下に示す。
要するに、ステップ2−3で表示されたInitInstance の中身をごっそり
消して、以下の関数の中身を書きこめば良い。

これにより、ドキュメントビューアーキテクチャは使用されなくなる。

できたら、2−5へ。

BOOL CMission1App::InitInstance()
{
//SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(0); // 標準の INI ファイルのオプションをロードします (MRU を含む)

// Load the main frame window.
CMainFrame* pFrame = new CMainFrame;
if (!pFrame->LoadFrame(IDR_MAINFRAME, WS_VISIBLE | WS_POPUP | WS_SYSMENU)) {
return FALSE;
}

// Save the main window pointer.
m_pMainWnd = pFrame;

m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

return TRUE;
}

若干解説が必要かもしれない、解説はここをクリック。



【ステップ2−5 CMainFrame の改造 Part1】
解説

再度 ClassWizard を起動。
Control-W で起動するのが早いしラクチンだ。

「クラス名」に「CMainFrame」を選択し、
「メッセージ」欄より「PreCreateWindow」を選択する。

選択したら「コード編集」をクリック。
図5 ClassWizard 再度


【ステップ2−6 CMainFrame の改造 Part2】
解説

そうすると、 このようなリストが表示された
はずである。

例によって読みにくいが、
気にしないでOKだ。

また書きかえるので、次へ進もう。

図6 ウインドウの初期設定


【ステップ2−7 関数 PreCreateWindow の改造】

ステップ2−6 で表示させた関数を書きかえると、
ウインドウのスタイルを変更できる。

以下の設定は、画面いっぱいの、飾りのないウインドウを、全てのウインドウより前面に表示の設定。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
RECT rect;
CWnd *wnd;
wnd = this->GetDesktopWindow();
if (wnd){
wnd->GetWindowRect(&rect);
cs.x=rect.left;
cs.y=rect.top;
cs.cx=rect.right-rect.left;
cs.cy=rect.bottom-rect.top;
cs.dwExStyle=WS_EX_TOPMOST;
cs.style=WS_VISIBLE | WS_POPUP | WS_SYSMENU;
}else
return FALSE;
return TRUE;
}

これも解説しておこう。ここをクリック。


【ステップ2−7 ワークスペースいじり Part1】
解説
今度はVisualC++ のウインドウの左側部分。つまり、左の図の部分
に着目する。 この部分を、「ワークスペース」と言う。

そしてまず、ワークスペースの下部に着目。ここには、
"ClassView","ResourceView","FileView"という3つのタブがある。

この内、FileView タブをクリックし、表示されたリスト内の
「mission1 ファイル」の横の + マークをクリック。

続いて、"Source Files","Header Files"の横の + マークをクリック。

そうすると、ステップ2−8のような状況になるはずだ。
図7 ワークスペース


【ステップ2−8 ワークスペースいじりPart2】
解説
こういう画面になったはず、
まず、もはや役立たずのドキュメント・ビュー
アーキテクチャを放棄する。

Source Files より
mission1Doc.cpp
mission1View.cpp
Header Files より
mission1Doc.h
mission1View.h

をそれぞれ、選択して
キーボードのdel キーを押して行く
ことで、削除できる。

削除ができたら、
MainFrm.h
をダブルクリックする。
図8 確認画面1。


【ステップ2−8 CMainFrame の改造 Part3】
解説

すると、こういう画面になったはず。
変更箇所はごく一部だ。

ステップ2−9を参照してくれ。
図9 MainFrm.h


【ステップ2−9 CMainFrame の改造 Part4】

以下のリストの "protected" を "public"に書きかえる。
赤字部分が変更箇所だ。

【変更前】

class CMainFrame : public CFrameWnd
{

protected: // シリアライズ機能のみから作成します。

CMainFrame();
DECLARE_DYNCREATE(CMainFrame)


【変更後】
class CMainFrame : public CFrameWnd
{

public: // シリアライズ機能のみから作成します。

CMainFrame();
DECLARE_DYNCREATE(CMainFrame)



【ステップ3】

プロジェクトのビルドと実行を行う。
つまり、VisualC++ にプログラムを生成させ、実行して動作を確認する
のである。

以下の指令に従うべし。

「F・5キーを押す」

すると、下のような画面が表示されたはずだ。
解説

え、何もないって?
いやそうでは無い、これは画面一杯の
アプリケーションなのだ。

こうしておけば、ゲーム中にいろいろな
所をクリックしても、Windows に戻ったり
しないで済むのである。
図10 mission2


これで、Mission2 は終了。

動作確認できたらすかさず終了させましょう。

Alt-F4 で終了します。
これは、Windows アプリ共通。
覚えておきましょう。

次回はようやっと、DirectDraw に入ります。

戻る