我想在创建普通的“重叠”窗口时设置精确的客户端大小(例如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个像素。
如何创建具有精确给定客户端大小的重叠窗口?
我的错误是以下内容:
AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, WS_OVERLAPPEDWINDOW);
改为以下内容即可解决该问题:
AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, 0);
我不知道为什么AdjustWindowRect不起作用(除非您的客户区域包含一个带有一像素边框的子窗口)。
请注意,您可以将此函数用于重叠窗口。文档说您不能使用WS_OVERLAPPED样式(我猜是因为它的值为零),但您可以使用WS_OVERLAPPEDWINDOW。
作为替代方案,您可以调用GetWindowRect和GetClientRect,计算边框的宽度/高度(两个矩形的宽度/高度之差),将其添加到所需的客户端大小并设置窗口大小。我相信您可以在窗口显示之前执行此操作。
AdjustWindowRectEx
只接受四个。 - NathanAldenSr