Mission2: 画面サイズを固定する。


今回は、Direct3D を使う前段階として、
画面サイズ固定で起動するアプリケーションを作成してみる。
これは、先ほどの Mission1 のアプリケーションを改造する
だけでできる。カンタンだ。

DirectDraw の時のように画面一杯にはしない。
この方がデバッグがしやすいからでもある。

画面一杯で表示するための切り替えは mission4 で実装する。

【ステップ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の後、
左のような画面になったはずだ。
スペースの都合で、予め注釈は削除してある。

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

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

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


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

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

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

できたら、2−5へ。

BOOL CMission1App::InitInstance()
{
/*SetRegistryKey(_T("Local AppWizard-Generated Applications"));*/
LoadStdProfileSettings(0);

/* Load the main frame window. */
CMainFrame* pFrame = new CMainFrame;
if (!pFrame->LoadFrame(IDR_MAINFRAME, WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX)) {
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 で表示させた関数を書きかえると、
ウインドウのスタイルを変更できる。

以下の設定は、サイズ固定(640×480)ウインドウの作成。

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.right - rect.left)/2 - 320;
cs.y = (rect.bottom - rect.top)/2 - 240;
cs.cx= 640;
cs.cy= 480;
cs.dwExStyle=WS_EX_OVERLAPPEDWINDOW;
cs.style= WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX;
}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キーを押す」

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

え、何も変わって無いって?
いやそうでは無い、画面サイズを変えてみて欲しい。

どうやっても画面サイズは変わらないはずだ。

図10 mission2


これで、Mission2 は終了。

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

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

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

戻る