我們有一個包含模態和非模態窗口的C#應用程序。用戶可能會打開幾個非模態窗口,並從其中一個窗口打開模態窗口。切換到應用程序後激活模態窗口
如果用戶切換到另一個應用程序,然後通過單擊任務欄中的其中一個非模態窗口(除了打開模態窗口的窗口之外)切換回我們的窗口,則非模態窗口將變爲激活狀態,但是不接受輸入,因爲模式窗口已打開,但位於其他窗口之後。
我們如何確保無論用戶切換到哪個窗口,模態的哪個窗口都是實際激活的窗口?例如,這是Microsoft Outlook展現的行爲。
任何援助將不勝感激。
我們有一個包含模態和非模態窗口的C#應用程序。用戶可能會打開幾個非模態窗口,並從其中一個窗口打開模態窗口。切換到應用程序後激活模態窗口
如果用戶切換到另一個應用程序,然後通過單擊任務欄中的其中一個非模態窗口(除了打開模態窗口的窗口之外)切換回我們的窗口,則非模態窗口將變爲激活狀態,但是不接受輸入,因爲模式窗口已打開,但位於其他窗口之後。
我們如何確保無論用戶切換到哪個窗口,模態的哪個窗口都是實際激活的窗口?例如,這是Microsoft Outlook展現的行爲。
任何援助將不勝感激。
它當然有可能,但真的很煩人。我經常在一個混合了模態窗口和非模態窗口的應用程序上工作。這是我的策略(這是不是100%全保護)
它真的很煩人維護重新安排窗口的代碼。我會敦促你儘量不要混用模態窗口和非模態窗口。
編輯
我忘了提,我使用WTL和原生Win32函數很多。我也嘗試創建具有父/子關係的窗口,以便鍵盤和鼠標消息儘可能地反射到子窗口。
我可以理解你的痛苦:P – 2009-11-26 06:19:29
謝謝你的迴應。 我添加了一些代碼來攔截WM_ACTIVATEAPP窗口消息,如MSDN上NativeWindow類的示例中所述,並在發生這種情況時激活最上面的模式窗口,這似乎會產生所需的行爲。 你對這種方法有什麼想法嗎? – 2009-11-27 06:55:44
我認爲這是可能的,但有多個窗口的設計? – 2009-11-26 05:17:17
有多個窗口打開和混合模式是非常相關的,正如所指出的那樣,使得行爲與您期望的模式窗口行爲一樣不重要。 – TheZenker 2011-03-15 12:53:51