该GetWindowRect和GetClientRect函数可用于计算所有窗口边框的大小.
Suite101有一篇关于调整窗口大小和保持客户区域大小的文章.
这是他们的示例代码:
void ClientResize(HWND hWnd, int nWidth, int nHeight) { RECT rcClient, rcWind; POINT ptDiff; GetClientRect(hWnd, &rcClient); GetWindowRect(hWnd, &rcWind); ptDiff.x = (rcWind.right - rcWind.left) - rcClient.right; ptDiff.y = (rcWind.bottom - rcWind.top) - rcClient.bottom; MoveWindow(hWnd,rcWind.left, rcWind.top, nWidth + ptDiff.x, nHeight + ptDiff.y, TRUE); }
有一个WinAPI函数来调整窗口大小以具有给定的客户区大小:AdjustWindowRectEx() (3认同)
我不认为这种方法适用于Windows 10,因为透明的8px边框允许调整窗口大小. (3认同)
我想我会坚持使用GetWindowRect() - GetClientRect()方法.这样我就不必混淆窗口样式了.这与GetSystemMetrics(无论如何)有同样的问题...谢谢大家 - 这个地方摇滚:) (2认同)
小智.. 12
int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
事实上,上述结果等于:
GetClientRect(hWnd, &rcClient); GetWindowRect(hWnd, &rcWind); int border_thickness = ((rcWind.right - rcWind.left) - rcClient.right) / 2;
但"GetSystemMetrics(SM_CXSIZEFRAME)"很容易使用.
该GetWindowRect和GetClientRect函数可用于计算所有窗口边框的大小.
Suite101有一篇关于调整窗口大小和保持客户区域大小的文章.
这是他们的示例代码:
void ClientResize(HWND hWnd, int nWidth, int nHeight) { RECT rcClient, rcWind; POINT ptDiff; GetClientRect(hWnd, &rcClient); GetWindowRect(hWnd, &rcWind); ptDiff.x = (rcWind.right - rcWind.left) - rcClient.right; ptDiff.y = (rcWind.bottom - rcWind.top) - rcClient.bottom; MoveWindow(hWnd,rcWind.left, rcWind.top, nWidth + ptDiff.x, nHeight + ptDiff.y, TRUE); }
int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
事实上,上述结果等于:
GetClientRect(hWnd, &rcClient); GetWindowRect(hWnd, &rcWind); int border_thickness = ((rcWind.right - rcWind.left) - rcClient.right) / 2;
但"GetSystemMetrics(SM_CXSIZEFRAME)"很容易使用.
我想你要找的是SM_CYCAPTION
- 这就是标题栏的高度.SM_CYBORDER
是窗口水平边缘的高度.