我有一个相当简单的Windows程序,它创建了一个应该完全填充客户区的listview控件。这在启动时起作用,并且我认为如果调整窗口大小会起作用---除了窗口从不接收任何WM_SIZE消息(在创建窗口后发送初始消息之后)。我使用Spy ++ x64作为管理员验证了此消息。确保我捕获了所有内容。 Spy ++显示了接收WM_SIZING,WM_WINPOSCHANGED,WM_NCCALCSIZE和WM_WINPOSCHANGING(此列表没有特定顺序)的窗口,但从未收到WM_SIZE。
这是一个64位程序,但我不知道为什么这很重要。
因此,我是否可以做一些事情来完全调整窗口大小,但又阻止Windows在发生这种情况时生成WM_SIZE消息?如果没有,我是否需要做一些事情(过去30年来从未有过)让Windows知道我需要查看那些WM_SIZE事件?
事实证明,默认窗口过程在处理WM_WINDOWPOSCHANGED时会生成WM_SIZE,并且由于我正在处理WM_WINDOWPOSCHANGED,因此没有创建大小消息。因此,我将位置更改的消息转发到默认处理程序,消息又返回了。
Mirosoft,如果您正在收听,知道文档中的一条消息会产生另一条消息肯定会有所帮助!不仅仅是说窗口大小改变后WINDOWS发送了WM_SIZE,尤其是因为该程序通过允许默认消息处理程序处理WM_WINDOWPOSCHANGED事件有效地结束了向自身发送消息!