對話框的來龍去脈

 

1. Windows GUI程序的基礎
最基礎最精幹的Windows GUI程序包括以下幾個部分:
  1) 調用RegisterClass註冊窗口類。
  2) 調用CreateWindow創建窗口。
  3) 調用ShowWindow和UpdateWindow顯示窗口。
  4) 一個消息循環。
  5) 一個窗口函數,或者叫窗口消息處理函數。
具體的例子代碼參見《Windows 程序設計》第3章。順便提一下,要學習Windows GUI程序設計,這本書推薦看一下,一本好書的作用無論怎麼強調都不爲過。

 

2.基於對話框的Windows GUI程序

 

3.代碼的背後

  與1的窗體相比,2有自己的特點,比如程序的界面來自於資源管理器的定義,能響應Tab鍵切換焦點等等。但是對話框也是Windows窗體的一種,它的實現還是基於1的代碼。我們進入2的代碼的函數內部,就可以看到這一點。
  1)CreateDialog是一個宏,封裝了函數CreateDialogParam。CreateDialogParam首先LoadResource,然後調用CreateDialogIndirectParam。資源管理器裏面定義的模板,也由CreateDialogParam加載,再傳遞給CreateDialogIndirectParam。
 2)CreateDialogIndirectParam做了很多事情:
    A)建立對話框的框架,包括分析資源文件裏面定義的對話框風格,加載菜單,加載字體等。
    B)創建控件。這些控件都是在資源文件裏面定義的。
    C)調用CreateWindowEx,這個說明對話框本質上也是窗體。這個函數需要提供一個窗體類,這個傳給它的窗體類就是微軟提供的默認的對話框窗體類,類名是#32770,這個窗體類的窗體過程是DefDlgProc。
    D)需要注意的是,在CreateDialog也有一個過程,這個過程我們稱爲對話框過程。有消息過來,DefDlgProc會調用這個對話框過程,對話框過程響應消息。如果返回true,意味着告訴DefDlgProc,我已經處理消息了。如果返回false,意味着告訴DefDlgProc,這個消息還需要你處理一下。
  3)對話框的消息循環與1相比,多了一個IsDialogMessage。界面上控件的焦點切換正是在這個函數裏面實現的。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章