#include#include #include "main.h" // 窗口过程回调函数,用于处理窗口消息 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: //来发送一个退出消息到应用程序的消 PostQuitMessage(0); // 当窗口关闭时,发送退出消息 break; case WM_SIZE: { int width = LOWORD(lParam); int height = HIWORD(lParam); // 背景处理 { //绘图相关的信息 PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); // 绘制背景色 RECT rect; // 窗口尺寸 //获取窗口的客户区域(不包括标题栏和边框)的坐标和大小,并将其存储在 rect 结构体中。 GetClientRect(hwnd, &rect); //创建了一个白色的实心画刷。 HBRUSH hBrush = CreateSolidBrush(RGB(255, 255, 255)); // FillRect 函数用于使用指定的画刷填充指定的矩形区域,这里将客户区域(&rect)以白色画刷填充。 FillRect(hdc, &rect, hBrush); //通知系统绘图已经完成,清理绘图环境并更新窗口。 EndPaint(hwnd, &ps); } // 控件处理 { } } break; default: return DefWindowProc(hwnd, message, wParam, lParam); // 处理默认消息 } return 0; } void MsgLoop() { // 4. 消息循环 MSG msg; //这个消息循环会持续运行,不断从消息队列中获取消息,将其翻译和分派给窗口过程函数,直到接收到退出消息 while (GetMessage(&msg, NULL, 0, 0)) { //这个函数用于翻译某些特殊键盘消息,例如按下和释放键盘键的消息 TranslateMessage(&msg); //数用于分派消息给窗口过程WndProc函数 DispatchMessage(&msg); } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 1. 注册窗口类 WNDCLASSEX wc = {sizeof(WNDCLASSEX)}; wc.lpfnWndProc = WndProc; // 设置窗口过程函数 wc.hInstance = hInstance; // 应用程序实例句柄 wc.lpszClassName = "MyWindowClass"; // 窗口类名称 //这一行将鼠标光标的句柄分配给 wc 结构体的 hCursor 成员。 wc.hCursor = LoadCursor(NULL, IDC_ARROW);//用于加载一个标准箭头光标。这是窗口的默认光标。 //使用 RegisterClassEx 函数来注册窗口类。如果注册失败,它返回一个错误代码。如果注册成功,它返回非零值。 if (!RegisterClassEx(&wc)) { MessageBoxW(NULL, L"Windows register error!", L"error", MB_ICONERROR); return -1; } // 2. 创建窗口 HWND hwnd = CreateWindowW( L"MyWindowClass", // 窗口类名称 L"Test", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式 CW_USEDEFAULT, // 窗口的X坐标 CW_USEDEFAULT, // 窗口的Y坐标 400, // 窗口的宽度 300, // 窗口的高度 NULL, // 父窗口句柄 NULL, // 菜单句柄 hInstance, // 应用程序实例句柄 NULL // 附加参数 ); // 创建一个 Group Box 容器 HWND groupBox = CreateWindowW( L"BUTTON", // 类名 L"Group Box", // 标题 WS_CHILD | WS_VISIBLE | BS_GROUPBOX, // 样式,表示这是一个子控件、可见,并且是 Group Box 100, // X 坐标 10, // Y 坐标 200, // 宽度 200, // 高度 hwnd, // 父窗口句柄 NULL, // 菜单句柄 hInstance, // 应用程序实例句柄 NULL // 附加参数 ); // 在 Group Box 容器中添加一个按钮 HWND buttonInGroupBox = CreateWindowW( L"BUTTON", // 类名 L"Button in Group Box", // 按钮文本 WS_CHILD | WS_VISIBLE, // 样式,表示这是一个子控件并且可见 20, // 相对于 Group Box 的 X 坐标 30, // 相对于 Group Box 的 Y 坐标 150, // 宽度 30, // 高度 groupBox, // Group Box 容器的句柄,将按钮作为 Group Box 的子控件 NULL, // 菜单句柄 hInstance, // 应用程序实例句柄 NULL // 附加参数 ); if (!hwnd) { MessageBoxW(NULL, L"Windows creat error!", L"error", MB_ICONERROR); return -1; } // 3. 显示窗口 ShowWindow(hwnd, nCmdShow); //强制窗口重新绘制,以确保它立即可见。 UpdateWindow(hwnd); // 创建一个按钮 HWND button = CreateWindowW( L"BUTTON", // 类名 L"Click Me", // 按钮文本 WS_CHILD | WS_VISIBLE, // 样式,表示这是一个子控件并且可见 150, // X 坐标 100, // Y 坐标 100, // 宽度 30, // 高度 hwnd, // 父窗口句柄 NULL, // 菜单句柄 hInstance, // 应用程序实例句柄 NULL // 附加参数 ); // 创建一个相对位置的按钮 HWND button2 = CreateWindowW( L"BUTTON", // 类名 L"Click Me2", // 按钮文本 WS_CHILD | WS_VISIBLE, // 样式,表示这是一个子控件并且可见 80, // 相对于窗口的 X 坐标 50, // 相对于窗口的 Y 坐标 100, // 宽度 30, // 高度 hwnd, // 父窗口句柄 (HMENU)button, // 控件标识符,用于在 WM_COMMAND 中识别控件 hInstance, // 应用程序实例句柄 NULL // 附加参数 ); MsgLoop(); return 0; }