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