2

我发现SetWindowPos(...hwnd...)如果新大小与以前相同,该函数将不会生成 WM_SIZE 消息。但有时即使大小没有改变,我也需要 SetWindowPos 来生成 WM_SIZE 消息。虽然我可以使用SendMessage(hwnd, WM_SIZE...)after SetWindowPos,但这是一个糟糕的解决方案,因为它可能会生成 WM_SIZE 两次。

所以,

Is any flag for SetWindowPos or any similar functions so a WM_SIZE message is always generated?

ps:

我有一个主窗口hwndMain、一个子窗口hwndChild和一个hwndChild的子窗口hwndChild2。当 hwndMain 调整大小时,它接收 WM_SIZE,并且有一个 MainOnSize(...) 函数调整 hwndChild 的大小。同样,如果调整 hwndChild 的大小,它会收到 WM_SIZE,并且有一个 ChildOnSize(...) 函数可以调整 hwndChild2 的大小。

但是情况是这样的:在创建了hwndMain和hwndChild之后,而不是hwndChild2,hwndMain收到了WM_SIZE,所以hwndMain和hwndChild被resize了。现在 hwndChild2 被创建后,hwndMain 仍然会收到一个 WM_SIZE(见备注),所以它调用 MainOnSize 来调整 hwndChild 的大小。但是 hwndChild 的大小没有改变,所以它不会生成 WM_SIZE,也不会调用 ChildOnsize(),因此 hwndChild2 没有调整大小。

评论:

hwndMain 第一次收到 WM_SIZE 是在创建时,第二次是在使用 ShowWindow(...) 显示时。

4

0 回答 0