当前位置:  开发笔记 > 编程语言 > 正文

Win32中的窗口边框宽度和高度 - 我如何获得它?

如何解决《Win32中的窗口边框宽度和高度-我如何获得它?》经验,为你挑选了3个好方法。

该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)"很容易使用.



1> stukelly..:

该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()
我不认为这种方法适用于Windows 10,因为透明的8px边框允许调整窗口大小.
我想我会坚持使用GetWindowRect() - GetClientRect()方法.这样我就不必混淆窗口样式了.这与GetSystemMetrics(无论如何)有同样的问题...谢谢大家 - 这个地方摇滚:)

2> 小智..:
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)"很容易使用.



3> Head Geek..:

我想你要找的是SM_CYCAPTION- 这就是标题栏的高度.SM_CYBORDER是窗口水平边缘的高度.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有