ゲームプログラムのメモ書き

WindowsAPI

ウインドウを作る

無くては始まらないウインドウを作ります。ゲーム作りでは、 これらはほとんど変わることはありません。

#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;
}