在尝试用 C++ 创建窗口并绘制窗口大小与我设置的大小不匹配的矩形时,我注意到一些非常烦人的事情。
例如,如果我设置 480x240 窗口并尝试通过获取 GetWindowRect(hwnd, &rect) 从上到下、从左到右绘制矩形并计算宽度和高度:
rectangle_width = (rect.right - rect.left) / amountRectangleX;
rectangle_height = (rect.bottom - rect.top) / amountRectangleY;
如果 amountRectangleX = 2 且 Y = 2,它会绘制 4 个矩形,但宽度和高度为“关闭”,因此它不会填满整个屏幕或在其上渲染。发生这种情况的唯一方法(我已经用很多其他语言做到了这一点,所以我知道它有效)是,如果我设置 Window Size = 480x240 我希望它成为“DRAW”的区域。因为如果边框包含在窗口的大小中 - 这在具有不同窗口样式等的另一台计算机上会有所不同。我不能只是为我的计算机手动“更改”它。
如果我设置窗口大小 = 480x240 并截取屏幕截图,我会看到窗口空间 = 452x232,这令人困惑。如果我设置窗口大小 = 480x240 就可以了,但是当我 GetWindowRect() 时,我得到的是 452x232 而不是 480x240,这是无效的,因为我可以绘制的空间较小。这可以解释为什么我的矩形渲染超出了窗口空间,而我不希望这样。但我仍然希望能够设置我的尺寸 = 480x240 或其他任何东西,但仍然有边框。
为什么会这样?有解决这个问题的方法吗?
我不可能是唯一一个希望能够设置窗口分辨率的人,无论您使用什么计算机,您设置的大小都是您可以在其上绘图的绘图区域。
我使用这个方法,现在它可以工作了:
if ( IsWindow( hwnd ) )
{
DWORD dwStyle = GetWindowLongPtr( hwnd, GWL_STYLE ) ;
DWORD dwExStyle = GetWindowLongPtr( hwnd, GWL_EXSTYLE ) ;
HMENU menu = GetMenu( hwnd ) ;
RECT rc = { 0, 0, width, height } ;
AdjustWindowRectEx( &rc, dwStyle, menu ? TRUE : FALSE, dwExStyle );
SetWindowPos( hwnd, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER | SWP_NOMOVE ) ;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)