如何设置重叠窗口的确切客户端大小?(winapi)



当我创建一个正常的"重叠"窗口时,我想设置一个精确的客户端大小(比如300 x 300)。

有一个AdjustWindowRectEx()函数,我可以在其中传递所需的客户端区域,并获取我可以传递给CreateWindowEx的大小,但它显示在文档中,我不应该将其用于重叠窗口我不明白为什么。

当我通过300 x 300时,我得到了306 x 326,当我收到WM_SIZE,客户端大小为298 x 298,因此它太小了2个像素。

如何创建具有确切给定客户端大小的重叠窗口?

我的错误如下:

AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, WS_OVERLAPPEDWINDOW);

更改为这个修复它:

AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, 0);

我不知道为什么AdjustWindowRect不工作(除非您的客户端区域包含一个带有一个像素边框的子窗口)。

请注意,您可以将此功能用于重叠窗口。文档中说不能使用WS_OVERLAPPED样式(我想是因为它的值为零),但可以使用WS_OVERLAPPEDWINDOW。

或者,您可以调用GetWindowRect和GetClientRect,计算边界的宽度/高度(两个矩形的宽度/宽度之间的差),将它们添加到所需的客户端大小,并设置窗口大小。我相信你可以在窗口显示之前完成这项工作。

最新更新