久しぶりにゲームを作ろうと思います。6年ぶりなので久しぶりどころじゃないけど。この6年で、覚えたことは忘れちゃったし、そもそも時代が変わってるので、新たな気持ちでゼロから勉強です。
せっかくなので、開発日誌をつけていこうと思います。ちなみに開発環境は、
WindowsXP SP3
DirectX9.0c
Visual Studio 2008 Express Edition with SP1
C++
で行きます。
まずはウィンドウを表示する処理を作ります。WindowsのプログラムはWinMain()からですね。最近はUnicode対応の関係から_tWinMain()とかいうのが定義されてるみたいだけど、とりあえず今まで通りで。
ここの処理はもう定型文みたいなものですね。描画はDirectXにやらせるので、以下のソースコードではウィンドウ内には何も表示されません。
次はフレームレートかな、それともDirectX Graphicsに進んだ方がいいかな。
//---------------------------------------------------------
// メイン
#include "windows.h"
#define WINDOW_NAME "開発テスト"
#define APP_NAME "devtest"
// システムメッセージの処理
LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);
//---------------------------------------------------------
// アプリケーション開始
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
RECT rect={0, 0, 640, 480};
MSG msg;
// ウィンドウクラスを登録する
WNDCLASSEX wc={sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
APP_NAME, NULL};
RegisterClassEx(&wc);
// アプリケーションのウィンドウを作成する
AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, FALSE, NULL);
HWND hWnd=CreateWindow(APP_NAME, WINDOW_NAME,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, (rect.right-rect.left), (rect.bottom-rect.top),
GetDesktopWindow(), NULL, wc.hInstance, NULL);
// 独自の処理★
// ウィンドウ表示
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
// メッセージループ
ZeroMemory(&msg, sizeof(msg));
while (msg.message!=WM_QUIT) {
if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
// 独自の処理★
}
}
return 0;
}
//---------------------------------------------------------
// システムメッセージの処理
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_ACTIVATE:
// ウィンドウがアクティブになった
// 独自の処理★
return 0;
case WM_KEYDOWN:
switch (wParam) {
case VK_ESCAPE:
// 強制終了
DestroyWindow(hWnd);
return 0;
}
break;
case WM_DESTROY:
// ウィンドウが閉じられた
// 独自の処理★
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}