最基本的Windows应用程序
Windows下最基本的窗口程序。
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// 入口函数WinMain
int WINAPI WinMain(HINSTANCE hInstance, // 当前应用程序实例的句柄
HINSTANCE hPrevInstance, // 前一个应用程序实例的句柄
LPSTR lpCmdLine, // 命令行
int nShowCmd) // 显示状态
{
static TCHAR szAppName[] = TEXT("Hello");
WNDCLASS wc;
HWND hWnd;
MSG msg;
// 注册窗体类
wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口类风格
wc.lpfnWndProc = WndProc; // 窗口回调函数
wc.cbClsExtra = 0; // 窗口类附加数据,设为0即可
wc.cbWndExtra = 0; // 窗口附加数据,设为0即可
wc.hInstance = hInstance; // 拥有窗口类的应用程序句柄
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 窗口图标
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口内使用的光标形状
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 用于着色窗口的画刷
wc.lpszMenuName = NULL; // 指向菜单资源名的指针
wc.lpszClassName = szAppName; // 指向窗口类名的指针,不能为NULL
if (!RegisterClass(&wc))
{
MessageBox(NULL, "Start failed!", NULL, MB_ICONERROR);
return 0;
}
// 创建窗口实例
hWnd = CreateWindow(szAppName, // 窗口名称,不能为NULL
szAppName, // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口风格
CW_USEDEFAULT, // 初始x方向坐标
CW_USEDEFAULT, // 初始y方向坐标
CW_USEDEFAULT, // 初始x方向大小
CW_USEDEFAULT, // 初始y方向大小
NULL, // 父窗口句柄
NULL, // 菜单句柄
hInstance, // 应用程序实例句柄
NULL); // 附加数据,一般为0
// 显示窗口
ShowWindow(hWnd, nShowCmd);
// 重画窗口
UpdateWindow(hWnd);
// 消息循环
while (GetMessage(&msg, NULL, 0, 0)) // 取出消息队列中的第一个消息,取到WM_QUIT时返回0
{
TranslateMessage(&msg); // 翻译消息
DispatchMessage(&msg); // 将消息传递给msg中指定的窗口过程
}
return msg.wParam;
}
// 窗口过程函数WndProc
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_DESTROY: // 用户关闭窗口时窗口将收到该消息
PostQuitMessage(0); // 在消息队列中插入一个WM_QUIT消息
return 0;
}
return DefWindowProc(hWnd, Msg, wParam, lParam);
}