不使用QT库写窗口最大化最小化
时间: 2024-12-24 11:09:55 浏览: 16
在没有Qt库的情况下,你可以使用C++标准库中的`std::windows.h`来控制Windows窗口的大小和状态。以下是一个简单的示例,展示了如何使窗口最大化和最小化:
```cpp
#include <windows.h> // 引入Windows API头文件
// 定义窗口类
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_SIZE: // 处理窗口大小改变事件
if (wParam == SIZE_MAXIMIZED)
std::cout << "Window is maximized.\n";
else if (wParam == SIZE_MINIMIZED)
std::cout << "Window is minimized.\n";
break;
case WM_SYSCOMMAND: // 捕获WM_SYSCOMMAND消息(如最大化/最小化按钮)
if (HIWORD(wParam) == SC_MAXIMIZE)
SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
else if (HIWORD(wParam) == SC_MINIMIZE)
SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
break;
// 其他窗口处理事件...
default:
return DefWindowProc(hWnd, msg, wParam, lParam); // 默认处理
}
return 0;
}
int main() {
// 创建窗口句柄
HWND hWnd = CreateWindowEx(
WS_EX_CLIENTEDGE, // 带边框样式
L"MyWindowClass", // 自定义窗口类名(需注册或显式创建)
L"Title of Your Window",
WS_OVERLAPPEDWINDOW | WS_VISIBLE, // 集成标题栏、菜单栏等,以及可见
CW_USEDEFAULT, CW_USEDEFAULT, // 初始化位置为屏幕中心
800, 600, // 初始宽度和高度
NULL, // 父窗口句柄(NULL表示顶级窗口)
NULL, // 窗口类结构指针(这里用NULL,实际开发中需要自定义类结构)
GetModuleHandle(NULL), // 当前模块句柄
NULL);
// 注册窗口类(如果未提前注册)
static const wchar_t className[] = L"MyWindowClass";
if (!GetClassInfo(NULL, className, &cls)) {
WNDCLASS wc = { sizeof(WNDCLASS), CS_HREDRAW | CS_VREDRAW, WndProc, NULL, NULL, hInstance, LoadIcon(NULL, IDI_APPLICATION), LoadCursor(NULL, IDC_ARROW), (HBRUSH)NULL, NULL, className };
RegisterClass(&wc);
}
// 显示窗口
ShowWindow(hWnd, SW_SHOW);
// 运行消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
```
在这个例子中,你需要自定义一个窗口类(例如`MyWindowClass`),并确保已经正确注册。窗口的最大化和最小化操作是通过发送`WM_SYSCOMMAND`消息实现的。
请注意,这是一个基础示例,实际项目中可能还需要处理更多的窗口消息以及错误情况。
阅读全文