用SetWindowLong给无边框窗口增加边框
时间: 2024-04-09 21:30:49 浏览: 166
您可以使用SetWindowLong函数来给无边窗口增加边框。以下是一个示例代码:
```cpp
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_NCCALCSIZE:
{
// 获取窗口的边框尺寸
NCCALCSIZE_PARAMS* params = reinterpret_cast<NCCALCSIZE_PARAMS*>(lParam);
params->rgrc[0].left += 4;
params->rgrc[0].top += 4;
params->rgrc[0].right -= 4;
params->rgrc[0].bottom -= 4;
return 0;
}
case WM_NCHITTEST:
{
// 设置鼠标在窗口边框上时显示调整大小的光标
LRESULT hit = DefWindowProc(hwnd, msg, wParam, lParam);
if (hit == HTCLIENT)
return HTBORDER;
else
return hit;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int main()
{
// 创建窗口类
WNDCLASSEX wc = { sizeof(WNDCLASSEX) };
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(nullptr);
wc.lpszClassName = L"BorderWindow";
// 注册窗口类
RegisterClassEx(&wc);
// 创建窗口
HWND hwnd = CreateWindowEx(
0,
L"BorderWindow",
L"无边框窗口",
WS_POPUP | WS_VISIBLE,
100,
100,
400,
300,
nullptr,
nullptr,
GetModuleHandle(nullptr),
nullptr);
// 设置窗口样式
LONG_PTR style = GetWindowLongPtr(hwnd, GWL_STYLE);
SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_BORDER);
// 消息循环
MSG msg;
while (GetMessage(&msg, nullptr, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return static_cast<int>(msg.wParam);
}
```
在上述代码中,我们通过在窗口过程(WndProc)中处理WM_NCCALCSIZE和WM_NCHITTEST消息来实现给无边框窗口增加边框的效果。在WM_NCCALCSIZE消息中,我们修改窗口的边框尺寸,使得客户区(即窗口的工作区域)相应地减小。在WM_NCHITTEST消息中,我们设置鼠标在窗口边框上时显示调整大小的光标。
请注意,以上代码仅为示例,您可能需要根据自己的需求进行适当的修改。
阅读全文