2012-10-02 50 views
0

在Win32編程中,MessageBox函數會啓動一個需要操作的對話框,直到按下「確定」之後,才能將焦點對準應用程序中的另一個窗口。那麼我有一個對話框,我在Visual Studio 2008的資源編輯器中設計的,問題是我可以單擊啓動它的菜單項,並且當對話框仍然顯示時,我可以再次單擊它並顯示另一個其中。當對話框打開時,我也可以使用我的應用程序的其餘部分。Win32 - 使對話框需要焦點/動作

我想使用戶必須在我的自定義對話框中按'OK'或'Cancel'才能在應用程序中執行其他任何操作,就像它是一個MessageBox一樣。我怎麼做到這一點?是否有我可以在我的Dialog資源上設置的特定Windows風格或前風格?我試過WS_TOPMOST,但沒有效果,我不知道還有什麼可以嘗試的。

回答

1

您的對話框需要使用DialogBox().,DialogBoxParam()或任何直接對話模式啓動器啓動。此外,您需要確保並在您調用應用程序時提供應用程序的頂級窗口作爲父窗口。這樣做應該讓你的對話模式,而不是無模式。在資源腳本中爲對話框模板使用WS_POPUP窗口樣式也很重要,但通常會默認設置它,所以這可能不是您的問題。

+0

太好了,差不多就是這樣。現在,我仍然有一個問題。我有可以隨我的主窗口一起浮動的toolwindows。當我現在啓動我的對話框時,它不允許我按預期使用我的主窗口,但是,我可以使用我的toolwindow,它恰好有一個也會啓動對話框的按鈕,所以我仍然可以產生此對話框的多個實例。是否有任何可能的方法來確保當該對話框在屏幕上時,我的應用程序中沒有其他窗口可以使用?順便說一句,這些工具窗口是使用CreateDialogParam創建的,因此可以顯示和隱藏它們。 –

+0

該主窗口的所有子窗口也都應該是對話框的模態。工具窗口如何設置?如果他們是沒有父母關係的自由流動彈出窗口,那可能就是你所看到的。如果它們可以通過處理,最終可能會在對話框啓動時對其進行枚舉和禁用。還有其他的方式,但那只是我的頭頂。你提到它們是用CreateDialogBoxParam創建的,以允許顯示/隱藏。所以..在DialogBox調用之前隱藏? = P – WhozCraig

+0

這就是我如何創建Windows的工具。樣式/除外樣式:'DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_EX_TOOLWINDOW',當我使用'CreateDialogParam'時,我將父窗口設置爲與「DialogBox」對話框相同,我將它設置爲主窗口的句柄。它們是自由浮動的,在應用程序退出之前不會被銷燬。所以你說我可以使用'EnableWindow'來禁用toolwindow,直到'DialogBox'返回?我不想,但如果這是最實際的,它會做。 –