【发布时间】:2010-01-19 10:36:03
【问题描述】:
我正在尝试调试一个巨大的 Win32 GUI 应用程序(我有完整的源代码),它分为几个进程。问题如下:在一个进程中,我有一个带有列表框的对话框,当我双击列表框中的一个项目时,另一个进程启动,该进程创建了自己的窗口,该窗口被带到前面并覆盖了初始对话框。如果我做了一些操作(我还不能完全解释,因为我还没有完全理解它们),就会强制初始对话框开始在任务栏中闪烁。
我尝试了 Microsoft Spy++,发现每当我执行该操作时,WM_ACTIVATE 都会发送到对话框,大多数情况下它具有以下参数:
fActive: WA_INACTIVE fMinimized:False hwndPrevious:(null)
在这些情况下,对话框不会开始闪烁。但有时参数是
fActive: WA_ACTIVE fMinimized:False hwndPrevious:(null)
这恰好对应于对话框闪烁。
MSDN says WM_ACTIVATE 与 WA_ACTIVE 一起发送时,通过鼠标单击以外的其他方法激活窗口(例如,通过调用 SetActiveWindow 函数或使用键盘界面选择窗口) .
现在,在应用程序代码中,SetActiveWindow() 从未被调用,并且我不会对可以切换窗口的键盘进行任何操作。
WM_ACTIVATE 与 WA_ACTIVE 一起发送还有哪些其他可能的原因?
【问题讨论】:
标签: user-interface winapi visual-c++