Win32で最低限のウィンドウを表示する。

メモ

#define WINWIDTH 300
#define WINHEIGHT 300

RECT rec;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
    switch (msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, msg, wp, lp);
}

int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    PSTR lpCmdLine,
    int nCmdShow) {

    MSG msg;
    WNDCLASS winc;
    HWND hDeskWnd = GetDesktopWindow();
    GetWindowRect(hDeskWnd, &rec);

    winc.style = CS_HREDRAW | CS_VREDRAW;
    winc.lpfnWndProc = WndProc;
    winc.cbClsExtra = winc.cbWndExtra = 0;
    winc.hInstance = hInstance;
    winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    winc.hCursor = LoadCursor(NULL, IDC_ARROW);
    winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    winc.lpszMenuName = NULL;
    winc.lpszClassName = TEXT("DECOY");

    if (!RegisterClass(&winc)) {
        return 0;
    }

    HWND hwnd = CreateWindow(
        TEXT("DECOY"), TEXT("win32"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        (rec.right - WINWIDTH) / 2, (rec.bottom - WINHEIGHT) / 2, WINWIDTH, WINHEIGHT, NULL, NULL,
        hInstance, NULL
    );

    if (hwnd == NULL) return 0;

    while (GetMessage(&msg, NULL, 0, 0))
    {
        DispatchMessage(&msg);
    }
    return  msg.wParam;
}