[C言語][Windows]何もしない空のウィンドウを作成するコード

WindowsのC言語で空のウィンドウを作るためのコード。

minimum_windows.c
#include <windows.h>

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
                   LPSTR cmdLine, int nCmdShow)
{
    LPCSTR pClassName = "Sample Window Class";

    WNDCLASSEX wc;
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WindowProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInst;
    wc.hIcon         = NULL;
    wc.hIconSm       = NULL;
    wc.hCursor       = LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = pClassName;
    
    if (!RegisterClassEx(&wc)) return FALSE;
    
    HWND hWindow = CreateWindow(pClassName, "何もしないただのウィンドウです。",
         WS_OVERLAPPEDWINDOW,
         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
         NULL, NULL, hInst, NULL);
    
    if (!hWindow) return FALSE;
    ShowWindow(hWindow, nCmdShow);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

LRESULT CALLBACK WindowProc(HWND hWindow, UINT msg, WPARAM wp, LPARAM lp)
{
    switch (msg) {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWindow, msg, wp, lp);
    }
    return 0;
}
コンパイル方法
自分はMinGWのGCCでコンパイルしました。
> gcc -mwindows minimum_windows.c
> a.exe
ぶっちゃけ、どのコードが何をしているというよりは全部おまじないだと理解しています。(^^;
初心者のうちはそのくらいの理解でよいんではないでしょうか。
詳しい解説
本家Microsoftのサイトをご覧ください。
モジュール 1. 初めての Windows プログラム (Windows)

余談
そもそも上のコードをどこから手に入れたのか?

最初、「猫でもわかるC言語」という本の最後に載っていたサンプルコードを写経してみたら異常に長くてこれはおかしいと思い、そこから「あなたもできる!C言語でテトリスを40分で作る方法」のコードを見ながら徹底的にリファクタリングしていったら上記のようになりました。
カテゴリ:

人気記事