切换到应用程序后激活Modal Windows

时间:2009-11-26 05:09:13

标签: c# modal-dialog

我们有一个C#应用程序,它包含模态和非模态窗口。用户可以打开几个非模态窗口并从其中一个打开模态窗口。

如果用户切换到另一个应用程序,然后通过单击任务栏中的一个非模态窗口(打开模态窗口的窗口除外)切换回我们的,非模态窗口将被激活,但是不接受输入,因为模态窗口是打开的,但是在其他窗口后面。

我们如何确保无论用户切换回哪个窗口,模态的窗口都是实际激活的窗口?例如,这是Microsoft Outlook展示的行为。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

它当然可能,但维护真的很烦人。我经常处理混合模态窗口和非模态窗口的应用程序。这是我的策略(不是100%全面证明)

  1. 将模态窗口设置为TOPMOST 可能的。
  2. 当某些行为是 检测到(比如按下windows-d按钮), 你必须手动设置窗口 回到最顶层。我不知道为什么窗户会向后移动,但是Windows XP,vista,2003等之间的行为并不一致。
  3. 维护重新排列窗口的代码非常烦人。我会敦促你尝试不混合模态窗口和非模态窗口。

    修改

    我忘了提到我使用WTL和很多本机win32函数。我还尝试创建具有父/子关系的窗口,以便键盘和鼠标消息尽可能多地反映到子窗口。