Winapi 调整窗口大小时未收到WM_大小

Winapi 调整窗口大小时未收到WM_大小,winapi,x86-64,windows64,Winapi,X86 64,Windows64,我有一个相当简单的windows程序,它创建了一个listview控件,该控件应该完全填充客户端区域。这在启动时起作用,我认为如果调整窗口大小,也会起作用——除了窗口从未收到任何WM_大小的消息(在创建窗口时发送的初始消息之后)。我使用Spy++x64作为管理员验证了这一点,以确保我捕获了所有信息。Spy++显示窗口接收WM_SIZE、WM_WINPOSCHANGED、WM_NCCALCSIZE和WM_WINPOSCHANGED(此列表不按任何特定顺序排列),但从不接收WM_SIZE 这是一个6

我有一个相当简单的windows程序,它创建了一个listview控件,该控件应该完全填充客户端区域。这在启动时起作用,我认为如果调整窗口大小,也会起作用——除了窗口从未收到任何WM_大小的消息(在创建窗口时发送的初始消息之后)。我使用Spy++x64作为管理员验证了这一点,以确保我捕获了所有信息。Spy++显示窗口接收WM_SIZE、WM_WINPOSCHANGED、WM_NCCALCSIZE和WM_WINPOSCHANGED(此列表不按任何特定顺序排列),但从不接收WM_SIZE

这是一个64位的程序,但我不知道为什么这很重要


那么,我是否可以做些什么来允许窗口完全调整大小,但防止窗口在这种情况下生成WM_大小的消息?如果没有,我是否需要做一些事情(在过去30年中从未做过)让Windows知道我需要查看那些WM_大小事件?

结果是,默认窗口过程在处理WM_WINDOWPOSCHANGED时生成WM_大小,并且由于我在处理WM_WINDOWPOSCHANGED,因此没有创建大小消息。因此,我将位置更改消息转发给默认处理程序,消息返回

这遵循记录的行为。文档中有一个关于文档的链接:

默认情况下,该函数向窗口发送和消息如果应用程序处理
WM\u WINDOWPOSCHANGED
消息而不调用
DefWindowProc
WM\u SIZE
则不会发送
WM\u MOVE
消息。在
WM\u WINDOWPOSCHANGED
消息期间,不调用
DefWindowProc

是的,我很抱歉地承认,我没有阅读所有窗口消息的文档,而我在需要了解WM_大小时没有遇到问题。愚蠢的我没有假设我需要的关于WM_大小的文档只在其他消息下找到!WM_SIZE文档中关于消息生成的所有说明如下:

在窗口大小更改后发送到窗口

对于要查找的不同消息,根本没有提到对默认处理的任何依赖性。因此,这种行为实际上是没有记录的,特别是因为它可能是关键信息,就像对我一样


哦,好吧,我放弃了,这个地方已经变得太多了,因为人们提出一些人们认为太容易回答的问题而打倒他们。试着记住,并不是每个人都有一个真实的记忆,也不是每个人都可以访问所有你记住的文档。我们中的一些人查找我们正在研究的东西,并期望找到关于它的重要细节。他们不在场。再见

:“默认情况下,函数将
WM_SIZE
WM_MOVE
消息发送到窗口。如果应用程序处理
WM_WINDOWPOSCHANGED
消息而不调用
DefWindowProc
,则不会发送
WM_SIZE
WM_MOVE
消息。@Steve Valliere:Inspectable是第一个,但这是有记录的behavior@IInspectable当前位置我不同意你的看法,因为微软没有记录这种行为,但事实上确实如此。所以,否决投票。这个答案有什么帮助?我不明白。@use:情况不再是这样了。编辑后,您可以取消投票。@IInspectable:否。如果用户不想阅读文档,则不值得取消投票。它就像:“我把电锯停在我的手上,但不看手册。现在我的手不见了,我就看这本手册。请给我投票。”