none
MFC程序最小化后再恢复的消息序列? RRS feed

  • 问题

  • 您好,

    程序经历了好几次和最小化再恢复有关的问题。有过启动多个程序,最小化话只能恢复一个窗口的问题。也有过最小化后恢复,窗口不刷新变成黑窗的问题。

    现在的问题是,启动多个程序。先最小化一个,启动另一个实例。再恢复之前启动的窗口,之前的dockpane窗口就变成黑窗了。

    请问,程序最小化到任务栏再恢复,历经的消息处理序列是什么?

    现在观察下来,单个实例没有这个问题。两个以上实例有这个问题,可能是什么原因导致。在这个处理过程中,哪些步骤和启动多个实例有关?

    2019年11月27日 1:32

全部回复

  • 你好

    感谢你在这里发帖。

    窗口类的程序都可以通过spy++软件监控消息。spy++属于VS自带的工具,可以通过下面的方式打开。

    >>程序最小化到任务栏再恢复,历经的消息处理序列是什么?

    很多很多,例如WM_KILLFOCUS,WM_ACTIVATEAPP,WM_MOVE,WM_SIZE之类的,这些通过SPY++查看就明白了。通过spy->window,找到你要监视的窗口,右键选择message,就能实时监控所有这个窗口上的消息了。

    >>再恢复之前启动的窗口,之前的dockpane窗口就变成黑窗了。

    是另外一个实例阻止了dockpane的WM_PAINT消息了吗?因为窗口从状态栏恢复到原样必须的一环就是WM_PAINT,它控制着窗口客户区的绘制。没有了这一步,窗口的客户区就会呈现一片黑的状态。你可以通过上面步骤监控dockpane的窗口消息看有没有WM_PAINT消息。

    >>现在观察下来,单个实例没有这个问题。两个以上实例有这个问题,可能是什么原因导致。在这个处理过程中,哪些步骤和启动多个实例有关?

    这几个程序实例有什么联系吗?普通运行几个程序不会出现这种问题,根据你的描述,似乎是其他程序干扰了问题程序的消息响应了。感觉还是你代码问题的可能性多一点。

    Best Regards,

    Suarez Zhou


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。



    2019年11月27日 6:42