gpt4 book ai didi

c++ - 获取准确的窗口区域大小 - CreateWindow 窗口大小不是正确的窗口大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:24 25 4
gpt4 key购买 nike

在尝试用 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 我希望它成为“绘制”的区域。因为如果边框包含在窗口的大小中——那在另一台具有不同窗口样式等的计算机上会有所不同。而且我不能只是为我的计算机手动“更改”它。

如果我设置窗口大小 = 480x240 并截取屏幕截图,我会看到窗口空间 = 452x232,这令人困惑。如果我设置 window size = 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 ) ;

}

关于c++ - 获取准确的窗口区域大小 - CreateWindow 窗口大小不是正确的窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com