写一段win32创建窗口的代码
时间: 2023-05-29 18:05:49 浏览: 94
以下是一个简单的win32创建窗口的代码,包括窗口的注册、创建和显示等步骤:
```c++
#include <Windows.h>
// 窗口回调函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
// 定义窗口类
WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc; // 窗口回调函数
wc.hInstance = hInstance; // 应用程序实例句柄
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 背景色
wc.lpszClassName = TEXT("MyWindowClass"); // 窗口类名
// 注册窗口类
if (!RegisterClass(&wc))
{
MessageBox(NULL, TEXT("注册窗口类失败!"), TEXT("Error"), MB_OK);
return 0;
}
// 创建窗口
HWND hwnd = CreateWindow(
TEXT("MyWindowClass"), // 窗口类名
TEXT("My Window"), // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口位置
500, 400, // 窗口大小
NULL, NULL, hInstance, NULL);
// 显示窗口
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
// 消息循环
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
// 窗口回调函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
```
在这个代码中,我们首先定义了一个窗口类 `WNDCLASS`,包括窗口回调函数、应用程序实例句柄、背景色和窗口类名等信息。然后通过 `RegisterClass` 函数注册窗口类。
接着通过 `CreateWindow` 函数创建窗口,并指定窗口类名、窗口标题、窗口样式、位置和大小等参数。最后通过 `ShowWindow` 和 `UpdateWindow` 函数显示窗口。
在程序的消息循环中,我们通过 `GetMessage` 函数获取消息,然后通过 `TranslateMessage` 和 `DispatchMessage` 函数将消息传递给窗口回调函数处理。
在窗口回调函数中,我们处理了 `WM_DESTROY` 消息,即用户关闭窗口时的消息,并通过 `PostQuitMessage` 函数退出消息循环。对于其他消息,我们使用 `DefWindowProc` 函数进行默认处理。