2009-11-26 89 views
1

我們有一個包含模態和非模態窗口的C#應用​​程序。用戶可能會打開幾個非模態窗口,並從其中一個窗口打開模態窗口。切換到應用程序後激活模態窗口

如果用戶切換到另一個應用程序,然後通過單擊任務欄中的其中一個非模態窗口(除了打開模態窗口的窗口之外)切換回我們的窗口,則非模態窗口將變爲激活狀態,但是不接受輸入,因爲模式窗口已打開,但位於其他窗口之後。

我們如何確保無論用戶切換到哪個窗口,模態的哪個窗口都是實際激活的窗口?例如,這是Microsoft Outlook展現的行爲。

任何援助將不勝感激。

+0

我認爲這是可能的,但有多個窗口的設計? – 2009-11-26 05:17:17

+0

有多個窗口打開和混合模式是非常相關的,正如所指出的那樣,使得行爲與您期望的模式窗口行爲一樣不重要。 – TheZenker 2011-03-15 12:53:51

回答

1

它當然有可能,但真的很煩人。我經常在一個混合了模態窗口和非模態窗口的應用程序上工作。這是我的策略(這是不是100%全保護)

  1. 設置模式窗口TOPMOST時 可能。
  2. 當某些動作檢測到 (如按下windows-d按鈕), 時,您必須手動將窗口 重新設置回頂端。我不知道爲什麼窗戶背後,但行爲是不一致的Windows XP之間,Vista的,2003年等。

它真的很煩人維護重新安排窗口的代碼。我會敦促你儘量不要混用模態窗口和非模態窗口。

編輯

我忘了提,我使用WTL和原生Win32函數很多。我也嘗試創建具有父/子關係的窗口,以便鍵盤和鼠標消息儘可能地反射到子窗口。

+0

我可以理解你的痛苦:P – 2009-11-26 06:19:29

+0

謝謝你的迴應。 我添加了一些代碼來攔截WM_ACTIVATEAPP窗口消息,如MSDN上NativeWindow類的示例中所述,並在發生這種情況時激活最上面的模式窗口,這似乎會產生所需的行爲。 你對這種方法有什麼想法嗎? – 2009-11-27 06:55:44