11.2非模態對話方塊
非模態對話方塊允許使用者在對話方塊與其它程式之間進行切換,又可以在對話方塊與建立對話方塊的視窗之間進行切換。當使用者覺得讓對話方塊保留片刻會更加方便時,使用非模態對話方塊是合適的。
非模態對話方塊是使用createdialog來建立的,該函式所使用的引數與dialogbox相同。hdlgmodeless = createdialog ( hinstance, sztemplate, hwndparent, dialogproc); 區別是createdialog函式立即傳回對話方塊的視窗控制代碼,並通常將這個視窗控制代碼存放到整體變數中。
模態對話方塊與非模態對話方塊的區別
①非模態對話方塊通常包含乙個標題列和乙個系統選單按鈕。對於模態對話方塊,您通常無須提供標題列和系統選單。
②用於非模態對話方塊的對話方塊模板中的style敘述形如: style ws_popup | ws_caption | ws_sysmenu | ws_visible 如果省略了ws_visible,那麼您必須在createdialog呼叫之後呼叫showwindow
hdlgmodeless = createdialog ( . . . ) ; showwindow (hdlgmodeless, sw_show) ; 果您既沒有包含ws_visible樣式,又沒有呼叫showwindow,那麼非模態對話方塊將不會被顯示。
③與模態對話方塊和訊息框的訊息不同,非模態對話方塊的訊息要經過程式式的訊息佇列。要將這些訊息傳送給對話方塊視窗訊息處理程式,則必須改變訊息佇列。具體的**如下:
如果訊息是傳送給非模態對話方塊的,那麼isdialogmessage將它傳送給對話方塊中視窗訊息處理程式,並傳回true(非0);否則,它將傳回false(0)。簡單來說就是如果訊息是發給非模態對話方塊的話,該訊息就不進入windows的訊息迴圈。
④使用destroywindow而不是enddialog來結束非模態對話方塊。
也可以用createdialogparam來建立非模態對話方塊,並讓它儲存乙個結構指標。
模態對話方塊和非模態對話方塊的訊息迴圈
1、非模態對話方塊和父視窗共享當前執行緒的訊息迴圈
2、模態對話方塊新建乙個新的訊息迴圈,並由當前訊息迴圈派發訊息,而父視窗。模態對話方塊遮蔽了使用者對它父視窗的操作,但是不是在訊息迴圈裡面遮蔽,所以給父視窗傳送訊息,父視窗還是可以接收得到。
3、呼叫模態對話方塊的視窗處理函式會被阻塞,但是新的訊息迴圈仍然可以呼叫父視窗的訊息處理函式,所以,傳送給父視窗的新訊息仍然可以被及時處理。
新的colors程式
在colors2中,非模態對話方塊是在winmain函式裡建立的,緊跟在程式主視窗的showwindow呼叫之後。注意,主視窗的視窗樣式包含ws_clipchildren,這允許程式無須擦除對話方塊就能夠重畫主視窗。
colors2.rc
當建立對話方塊模板時,直接將三個滾動條的id分別設為10、11和12,將顯示滾動條目前值的三個靜態文字欄位的id分別設為13、14和15。將每個滾動條都設定為tab stop樣式,而從所有的六個靜態文字欄位中刪除group樣式。
hexcalc:視窗還是對話方塊?
hexcalc.rc
這個程式完全不呼叫createwindow,也不處理wm_paint訊息,不取得裝置內容,也不處理滑鼠訊息。
class敘述是這個對話方塊與曾經建立過的對話方塊之間最重要的區別。
包含class敘述就告訴windows將訊息傳送到其它的地方-具體的說,就是傳送到在hexcalc視窗類別中指定的視窗訊息處理程式。
wndclass結構的cbwndextra欄位設定為dlgwindowextra。對於您自己註冊的對話方塊程式,這是必需的。
unity學習記錄第十一章 對話
unity學習記錄第十一章 要點利用ugui新建對話方塊 textasset讀取文字 利用協程逐字元輸出文字語句 筆記1.對話方塊 panel text image,canvas的render mode要選擇world space才能自定義對話方塊的位置 2.建立textasset型別的文字變數,使...
modern c design 第十一章
本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...
第十一章3
第十一章 一 滾動元件 awt中的滾動元件包括scrollbar 滾動條 和滾動面板 scrollpane 兩種。1 滾動條scrollbar 在指定的取值範圍內快速選取某一值的功能。i.構造方法 public scrollbar int orientation,int value,int visi...