// 告诉编译器链接Windows图形库(Dev-C++必须加参数:-mwindows -lgdi32)
#include <windows.h>
// ====================== 窗口消息处理函数(系统自动调用)======================
// 作用:处理窗口的所有事件(创建、关闭、画图、按键等)
// 参数解释(固定格式,必须这么写):
// hWnd : 当前窗口的句柄(相当于窗口的身份证号)
// msg : 消息编号(比如创建消息、关闭消息、绘图消息)
// wParam : 消息附带的附加数据(不同消息含义不同)
// lParam : 消息附带的附加数据
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// 根据消息类型执行不同逻辑
switch(msg)
{
// 消息1:窗口创建成功时触发
case WM_CREATE:
break; // 纯白窗口,无需额外操作
// 消息2:窗口需要绘图时触发(保证窗口是白色)
case WM_PAINT:
{
PAINTSTRUCT ps; // 绘图信息结构体(系统用)
HDC hdc = BeginPaint(hWnd, &ps); // 开始绘图,获取绘图工具句柄
// 填充白色背景(纯白窗口核心)
RECT rect; // 矩形区域结构体
GetClientRect(hWnd, &rect); // 获取窗口客户区大小
HBRUSH whiteBrush = CreateSolidBrush(RGB(255,255,255)); // 创建白色画刷
FillRect(hdc, &rect, whiteBrush); // 用白色画刷填充窗口
DeleteObject(whiteBrush); // 释放画刷资源
EndPaint(hWnd, &ps); // 结束绘图
break;
}
// 消息3:点击窗口右上角关闭按钮时触发
case WM_DESTROY:
PostQuitMessage(0); // 关闭程序,退出消息循环
break;
// 默认消息:系统自动处理(如窗口拖动、缩放等)
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
// ====================== 程序入口(相当于main函数)======================
// WINAPI:固定调用约定,Windows程序必须写
// hInst : 当前程序的实例句柄(程序身份证号)
// hPrev : 废弃参数,固定写NULL
// cmd : 命令行参数
// nShow : 窗口显示方式(显示/隐藏)
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR cmd, int nShow)
{
// ===================== 1. 注册窗口类 =====================
WNDCLASSA wc; // 窗口类结构体(定义窗口样式)
wc.style = 0; // 窗口样式(0=默认)
wc.lpfnWndProc = WndProc; // 绑定消息处理函数
wc.cbClsExtra = 0; // 类额外内存(不用填0)
wc.cbWndExtra = 0; // 窗口额外内存(不用填0)
wc.hInstance = hInst; // 绑定程序实例
wc.hIcon = NULL; // 窗口图标(NULL=默认)
wc.hCursor = NULL; // 鼠标样式(NULL=默认箭头)
wc.hbrBackground = NULL; // 背景(我们手动绘制白色,所以填NULL)
wc.lpszMenuName = NULL; // 菜单(无菜单填NULL)
wc.lpszClassName = "WhiteWindow"; // 窗口类名(自定义名字)
RegisterClassA(&wc); // 向系统注册窗口类
// ===================== 2. 创建窗口 =====================
HWND hWnd = CreateWindowA(
"WhiteWindow", // 窗口类名(必须和注册一致)
"纯白窗口", // 窗口标题栏文字
WS_OVERLAPPEDWINDOW, // 窗口样式(有标题栏+关闭按钮)
100, // 窗口在屏幕的 X 坐标
100, // 窗口在屏幕的 Y 坐标
400, // 窗口宽度
600, // 窗口高度
NULL, // 父窗口(无父窗口填NULL)
NULL, // 菜单(无菜单填NULL)
hInst, // 程序实例句柄
NULL // 额外数据(不用填NULL)
);
// ===================== 3. 显示&更新窗口 =====================
ShowWindow(hWnd, nShow); // 显示窗口
UpdateWindow(hWnd); // 刷新窗口,立即显示
// ===================== 4. 消息循环(保持窗口不关闭) =====================
MSG msg; // 消息结构体
while(GetMessage(&msg, NULL, 0, 0)) // 持续获取消息
{
TranslateMessage(&msg); // 翻译消息(如键盘按键)
DispatchMessage(&msg); // 把消息交给 WndProc 处理
}
return 0; // 程序结束
}