当我创建一个正常的“重叠”窗口时,我想设置一个精确的客户端大小(比如 300 x 300)。
有一个AdjustWindowRectEx()
功能,我可以传递所需的客户区并获取可以传递给 CreateWindowEx 的大小,但它在文档中说我不应该将它用于重叠的窗口,我不明白为什么。
当我通过 300 x 300 时,我从中得到 306 x 326,当我收到时
WM_SIZE
,客户端尺寸为 298 x 298,所以它太小了 2 个像素。
如何创建具有精确给定客户端大小的重叠窗口?
当我创建一个正常的“重叠”窗口时,我想设置一个精确的客户端大小(比如 300 x 300)。
有一个AdjustWindowRectEx()
功能,我可以传递所需的客户区并获取可以传递给 CreateWindowEx 的大小,但它在文档中说我不应该将它用于重叠的窗口,我不明白为什么。
当我通过 300 x 300 时,我从中得到 306 x 326,当我收到时
WM_SIZE
,客户端尺寸为 298 x 298,所以它太小了 2 个像素。
如何创建具有精确给定客户端大小的重叠窗口?
我不知道为什么 AdjustWindowRect 不起作用(除非您的客户区包含一个带有一个像素边框的子窗口)。
请注意,您可以将此功能用于重叠窗口。文档说您不能使用 WS_OVERLAPPED 样式(我猜是因为它的值为零),但您可以使用 WS_OVERLAPPEDWINDOW。
作为替代方案,您可以调用 GetWindowRect 和 GetClientRect,计算边框的宽度/高度(两个矩形的宽度/高度之差),将它们添加到所需的客户端大小并设置窗口大小。我相信您可以在显示窗口之前执行此操作。
我的错误如下:
AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, WS_OVERLAPPEDWINDOW);
更改为此修复它:
AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, 0);