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

时间:2012-09-14 11:26:07

标签: windows winapi user-interface

当我创建一个普通的“重叠”窗口时,我想设置一个不精确的客户端大小(比如说300 x 300)。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

作为替代方法,您可以调用GetWindowRect和GetClientRect,计算边框的宽度/高度(两个矩形的宽度/高度之间的差异),将这些添加到所需的客户端大小并设置窗口大小。我相信你可以在显示窗口之前做到这一点。

答案 1 :(得分:1)

我的错误如下:

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

更改为此修复了它:

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