3

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

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

当我通过 300 x 300 时,我从中得到 306 x 326,当我收到时 WM_SIZE,客户端尺寸为 298 x 298,所以它太小了 2 个像素。

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

4

2 回答 2

1

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

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

作为替代方案,您可以调用 GetWindowRect 和 GetClientRect,计算边框的宽度/高度(两个矩形的宽度/高度之差),将它们添加到所需的客户端大小并设置窗口大小。我相信您可以在显示窗口之前执行此操作。

于 2012-09-14T13:39:49.103 回答
1

我的错误如下:

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

更改为此修复它:

AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, 0);
于 2012-09-18T15:13:37.170 回答