無くては始まらないウインドウを作ります。ゲーム作りでは、 これらはほとんど変わることはありません。
#include <windows.h>
//定数宣言
#define APP_NAME "sample" //アプリケーション名
#define WINDOW_W 640 //幅
#define WINDOW_H 480 //高さ
//プロトタイプ宣言
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//ウインドウ関数
LRESULT CALLBACK WindowProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
HDC hdc; //デバイスコンテキスト
PAINTSTRUCT ps; //描画構造体
switch(uMsg)
{
case WM_DESTROY:
//アプリケーションの終了
PostQuitMessage(0);
return 0;
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
return 0;
case WM_PAINT:
//描画開始
hdc = BeginPaint(hWnd,&ps);
//描画終了
EndPaint(hWnd, &ps);
return 0;
}
// メインに返す情報
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
// メイン関数
int WINAPI WinMain(
HINSTANCE hInstance, //インスタンス番号
HINSTANCE hPrevInstance,
PSTR lpCmdLine,
int nCmdShow) {
HWND hWnd; //ウインドウハンドル
WNDCLASS wc; //ウインドウクラス構造体
MSG msg; //メッセージ
//ウインドウクラスの登録
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1;
wc.lpszMenuName = NULL;
wc.lpszClassName = APP_NAME;
// Windowsに登録
if(!RegisterClass(&wc))
{
MessageBox(NULL,
"ウインドウクラスの作成に失敗しました",
"エラーメッセージ", MB_OK);
return 0;
}
//ウインドウの作成
hWnd = CreateWindow(
APP_NAME,
"SampleWindow", //ウインドウ名
WS_OVERLAPPEDWINDOW, //ウインドウ設定
CW_USEDEFAULT, //表示位置Y
CW_USEDEFAULT, //表示位置X
WINDOW_W, //幅
WINDOW_H, //高さ
NULL,
NULL,
hInstance,
NULL);
if(hWnd == NULL)
{
MessageBox(NULL,
"ウインドウの作成に失敗しました",
"エラーメッセージ", MB_OK);
return 0;
}
// ウインドウの表示
ShowWindow(hWnd, SW_SHOW);
// メッセージループ
while(GetMessage(&msg, NULL, 0, 0) > 0){
DispatchMessage(&msg);
}
return 0;
}