0%

[Window] Modal 與 non-Modal 視窗運作原理

前言

對於視窗運作有基本了解,才能夠在對的場景用對的對話框來呈現。這篇文章會帶出 Modal (模態) 與 non-Modal (非模態) 視窗的基本運作機制!

DialogBox 家族 (例如 DialogBoxDialogBoxIndirectDialogBoxParamDialogBoxIndirectParam) 創建的對話框是 Modal 視窗。

在創建之前,系統將禁用其父視窗,並在這些 API 函數中為其創建一個新的消息循環 (Message loop),這些函數還需要回調函數 (例如 DialogProc) 來處理消息。換句話說,Modal 對話框視窗具有其自己的消息循環和不同於主線程的視窗過程,在用戶單擊 確定取消關閉 之類的按鈕之前,它們始終處於 Modal 視窗消息循環中。單擊按鈕後,使用 EndDialog 返回至主線程中的主消息循環,父視窗可以再次響應。

non-Modal 視窗的運作機制

CreateDialog 家族 (例如 CreateDialogCreateDialogIndirectCreateDialogParamCreateDialogIndirectParam) 創建的對話框是 non-Modal 視窗。它們將在創建後返回,而不是創建新的消息循環,該對話框使用在主線程中的消息循環。因此,父視窗也可以響應。

參考原始碼:DialogBoxParam 使用範例

很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵