- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
Windows图形界面程序结构
Windows 程序结构
- WinMain 函数
WinMain
函数是 Windows 应用程序的入口点。它的原型如下:-
int WINAPI WinMain( HINSTANCE hInstance, // 当前应用程序实例的句柄 HINSTANCE hPrevInstance, // 以前的应用程序实例的句柄 (总是为 NULL) LPSTR lpCmdLine, // 命令行参数 int nCmdShow // 显示窗口的方式 );
hInstance
:当前应用程序实例的句柄。Windows 使用句柄来标识应用程序。hPrevInstance
:以前的应用程序实例的句柄。在 32 位 Windows 程序中,总是为 NULL。lpCmdLine
:传递给程序的命令行参数。nCmdShow
:指示窗口如何显示的标志。
窗口类和窗口过程函数
- 窗口类定义了窗口的属性,例如背景颜色、窗口过程函数等。窗口过程函数处理窗口的消息。
- 注册窗口类
-
WNDCLASSEX wc; ZeroMemory(&wc, sizeof(WNDCLASSEX)); wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.lpszClassName = "WindowClass"; RegisterClassEx(&wc);
- 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
创建和显示窗口
- 创建窗口需要调用
CreateWindowEx
函数,并显示和更新窗口。
HWND hwnd = CreateWindowEx(
0,
"WindowClass",
"Window Title",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
500, 500,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
消息循环和消息处理机制
- 消息循环(Message Loop)
- 消息循环用于捕获和分发消息。
-
MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
- 消息处理机制(Message Handling)
- 窗口过程函数处理窗口的各种消息,例如绘制、键盘输入、鼠标点击等。
-
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } }