1. // 初始化窗口类对象,并使用 RegisterClass 函数注册到操作系统
    2. // 使用 CreateWindow 创建窗口,更新(UpdateWindow)并显示(ShowWindow)窗口
    3. // 编写消息泵,使用 GetMessage 获取消息并通过 DispatchMessage 分发消息
    4. #include <windows.h>
    5. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    6. {
    7. switch (uMsg)
    8. {
    9. // 当用户点击关闭按钮时会产生 WM_CLOSE 消息
    10. case WM_CLOSE:
    11. {
    12. DestroyWindow(hWnd);
    13. break;
    14. }
    15. // 当调用 DestroyWindow 函数的时候会产生下面的消息
    16. case WM_DESTROY:
    17. {
    18. PostQuitMessage(0);
    19. break;
    20. }
    21. }
    22. // 对于任何不关系的消息,我们应该使用操作系统的默认行为做出响应
    23. return DefWindowProc(hWnd, uMsg, wParam, lParam);
    24. }
    25. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    26. {
    27. // 1.注册窗口类,必须需要提供的成员有回调函数和窗口类名
    28. WNDCLASS WndClass{};
    29. WndClass.lpfnWndProc = WndProc;
    30. WndClass.lpszClassName = L"myclass";
    31. if(!RegisterClass(&WndClass))
    32. {
    33. MessageBoxA(NULL, "窗口类注册失败", "错误消息", MB_OK | MB_ICONERROR);
    34. return -1;
    35. }
    36. // 2.使用注册好的窗口类创建窗口并显示更新窗口
    37. HWND hWnd = CreateWindow(L"myclass", L"window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    38. ShowWindow(hWnd, SW_SHOWNORMAL);
    39. UpdateWindow(hWnd);
    40. // 3.编写消息泵接收并分发消息,【消息本质上是一个结构体】
    41. MSG msg{};
    42. while(GetMessage(&msg, NULL, 0, 0))
    43. {
    44. DispatchMessage(&msg);
    45. }
    46. return 0;
    47. }