• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小默

            [zz]MFC - 對話框和對話框類CDialog

            對話框經常被使用,因為對話框可以從模板創建,而對話框模板是可以使用資源編輯器方便地進行編輯的。模式和無模式對話框  對話框分兩種類型,模式對話框和無模式對話框。 模式對話框 一個模式對話框是一個有系統菜單、標題欄、邊線等的彈出式窗口。在創建對話框時指定WS_POPUP, WS_SYSMENU, WS_CAPTION和 DS_MODALFRAME風格。即使沒有指定WS_VISIBLE風格,模式對話框也會被顯示。創建對話框窗口時,將發送WM_INITDIALOG消息(如果指定對話框的DS_SETFONT風格,還有WM_SETFONT消息)給對話框過程。對話框過程(Dialog box procedure)不是對話框窗口的窗口過程(Window procedure)。在Win32里,對話框的窗口過程由Windows系統提供,用戶在創建對話框窗口時提供一個對話框過程由窗口過程調用。對話框窗口被創建之后,Windows使得它成為一個激活的窗口,它保持激活直到對話框過程調用::EndDialog函數結束對話框的運行或者Windows激活另一個應用程序為止,在激活時,用戶或者應用程序不可以激活它的所屬窗口(Owner window)。從某個窗口創建一個模式對話框時,Windows自動地禁止使用(Disable)這個窗口和它的所有子窗口,直到該模式對話框被關閉和銷毀。雖然對話框過程可以Enable所屬窗口,但是這樣做就失去了模式對話框的作用,所以不鼓勵這樣做。 Windows創建模式對話框時,給當前捕獲鼠標輸入的窗口(如果有的話)發送消息WM_CANCLEMODE。收到該消息后,應用程序應該終止鼠標捕獲(Release the mouse capture)以便于用戶能把鼠標移到模式對話框;否則由于Owner窗口被禁止,程序將失去鼠標輸入。為了處理模式對話框的消息,Windows開始對話框自身的消息循環,暫時控制整個應用程序的消息隊列。如果Windows收到一個非對話框消息時,則它把消息派發給適當的窗口處理;如果收到了WM_QUIT消息,則把該消息放回應用程序的消息隊列里,這樣應用程序的主消息循環最終能處理這個消息。當應用程序的消息隊列為空時,Windows發送WM_ENTERIDLE消息給Owner窗口。在對話框運行時,程序可以使用這個消息進行后臺處理,當然應該注意經常讓出控制給模式對話框,以便它能接收用戶輸入。如果不希望模式對話框發送WM_ENTERIDlE消息,則在創建模式對話框時指定DS_NOIDLEMSG風格。一個應用程序通過調用::EndDialog函數來銷毀一個模式對話框。一般情況下,當用戶從系統菜單里選擇了關閉(Close)命令或者按下了確認(OK)或取消(CANCLE)按鈕,::EndDialog被對話框過程所調用。調用::EndDialog時,指定其參數nResult的值,Windows將在銷毀對話框窗口后返回這個值,一般,程序通過返回值判斷對話框窗口是否完成了任務或者被用戶取消。 無模式對話框 一個無模式對話框是一個有系統菜單、標題欄、邊線等的彈出式窗口。在創建對話框模板時指定WS_POPUP、WS_CAPTION、WS_BORDER和WS_SYSMENU風格。如果沒有指定WS_VISIBLE風格,無模式對話框不會自動地顯示出來。一個無模式對話框既不會禁止所屬窗口,也不會給它發送消息。當創建一個(無?)模式對話框時,Windows使它成為活動窗口,但用戶或者程序可以隨時改變和設置活動窗口。如果對話框失去激活,那么即使所屬窗口是活動的,在Z軸順序上,它仍然在所屬窗口之上。應用程序負責獲取和派發輸入消息給對話框。大部分應用程序使用主消息循環來處理,但是為了用戶可以使用鍵盤在控制窗口之間移動或者選擇控制窗口,應用程序應該調用::IsDialogMessage函數。這里,順便解釋::IsDialogMessage函數。雖然該函數是為無模式對話框設計的,但是任何包含了控制子窗口的窗口都可以調用它,用來實現類似于對話框的鍵盤選擇操作。當::IsDialogMessage處理一個消息時,它檢查鍵盤消息并把它們轉換成相應對話框的選擇命令。例如,當Tab 鍵被壓下時,下一個或下一組控制被選中,當Down Arrow鍵按下后,一組控制中的下一個控制被選擇。 ::IsDialogMessage完成了所有必要的消息轉換和消息派發,所以該函數處理的消息一定不要傳遞給TranslateMessage和DispatchMessage處理。一個無模式對話框不能像模式對話框那樣返回一個值給應用程序。但是對話框過程可以使用::SendMessage給所屬窗口傳遞信息。在應用程序結束之前,它必須銷毀所有的無模式對話框。使用::DestroyWindow銷毀一個無模式對話框,不是使用::EndDiaLog。一般來說,對話框過程響應用戶輸入,如用戶選擇了“取消”按鈕,則調用::DestroyWindow;如果用戶沒有有關動作,則應用程序必須調用::DestroyWindow。 LINK:http://www.vczx.com/tutorial/mfc/mfc12.php

            posted on 2009-10-01 18:06 小默 閱讀(626) 評論(0)  編輯 收藏 引用 所屬分類: Language

            導航

            統計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久久午夜精品福利内容| WWW婷婷AV久久久影片| 久久久久国产精品| 韩国三级中文字幕hd久久精品| 久久亚洲精品中文字幕三区| 国产成人精品久久亚洲高清不卡 | 亚洲精品高清国产一久久| 欧美国产精品久久高清| 亚洲欧美日韩久久精品第一区| 久久九九久精品国产免费直播| 久久国产精品99久久久久久老狼| 亚洲精品无码久久不卡| 狠狠色婷婷综合天天久久丁香| 精品无码久久久久久久久久| 亚洲AV日韩AV天堂久久| 99久久国产综合精品网成人影院| 久久久国产打桩机| 精品久久久久久无码人妻热 | 伊人丁香狠狠色综合久久| 人人狠狠综合88综合久久| 26uuu久久五月天| 无码人妻精品一区二区三区久久久 | 国产AV影片久久久久久 | 人人狠狠综合久久亚洲88| 久久久亚洲AV波多野结衣 | 亚洲国产成人久久精品99| 四虎国产精品免费久久5151| 伊人久久综合精品无码AV专区| 欧美性猛交xxxx免费看久久久| 久久久av波多野一区二区| 国产精品免费福利久久| 久久无码专区国产精品发布 | 丰满少妇高潮惨叫久久久| 久久久久久精品免费看SSS| 久久久久久亚洲精品无码| 青青草国产97免久久费观看| 99久久精品无码一区二区毛片| 精品免费tv久久久久久久| 久久久精品午夜免费不卡| 99久久精品国产一区二区三区 | 久久综合国产乱子伦精品免费|