1. 程式人生 > >第三章 控件(6~7課)

第三章 控件(6~7課)

pan 獨立 兩種 color 代碼 父窗口 及其 所有 外觀

第6課:創建和使用控件

第7課:常用控件

概述:

在MFC中,控件是具有獨立功能的人機交互的小窗口,它們除了可以使用自身成員外,還可使用其基類CWnd類的公有成員,因為幾乎所有的控件類都是從CWnd類派生而來的

正因為如此,當用控件類的Create創建控件時,除了自身的樣式預定義標識外,還有窗口通用的樣式預定義標識

當對話框資源創建對話框類後,控件只能以成員的方式出現在對話框類中。

控件變量:

用MFC ClassWizard可為控件在對話框類中創建兩種類別的成員變量:其一是控制類,即創建的是控件類對象;其二是數據類,即創建的是控件數據變量(我認為是控件變量)。這兩種類別的成員在對話框類中只能各有一個

。控件類對象可以引用控件類及其基類的公有成員,從而實現控件的操作;而數據類變量則是與控件綁定在一起,當使用UpdateData()時將控件上的數據存儲到綁定的數據變量中,而當使用UpdateData(FALSE)則是將綁定的數據變量的數值回填到控件中。

消息:

不同控件的“通知消息”有所不同,總體可分為三類:其一是與界面相關的單擊、選擇與取消或展開與收縮等的命令消息;其二是與輸入焦點相關的失去、得到等消息;其三是與數據相關的更新、改變等消息。這些消息,系統都會用一個稱為MSG結構的系統變量來記錄,並可用MFC ClassWizard對話框對其進行映射。

即控件不僅僅在對話框類中使用控件變量操作,還可通過控件的消息映射來實現代碼功能。

美觀:

MFC的控件更註重於控件的程序控制,而VB的控件更註重於控件的界面設計。

事實上,MFC的控件也可進行更深入的界面設計,包括兩種層次不同的方法:其一是使用“自畫”(Owner Draw,所有者繪制)體系;其二是跟蹤消息。

對於“自畫”體系,它可通過重載DrawItem函數來達到目的,但這種方法暫時較難。

跟蹤消息是一個簡單可行的方法。在前面的“調整對話框背景顏色”示例中,用到了WM_CTLCOLOR消息,這個消息是當對話框及控件等在顯示之前向父窗口發生的消息,通過跟蹤這個消息,在WM_CTLCOLOR消息函數OnCtrlColor返回之前,指定返回一個HBRUSH,系統就會用它繪制控件

,從而改變控件的背景顏色。當然,也可在此函數中添加設置控件文本的顏色、格式等的代碼,從而改變控件的外觀。

彩蛋:

由上可知,在界面設計中,對話框是一種常用的模板,它包含了許多控件等界面元素

實際上,在文檔應用程序中,除了對話框外,還有菜單、工具欄和狀態欄等界面模板,下一章將討論這些模板。

第三章 控件(6~7課)