可視化編程入門_第1頁(yè)
可視化編程入門_第2頁(yè)
可視化編程入門_第3頁(yè)
可視化編程入門_第4頁(yè)
可視化編程入門_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1馮耀霖馮耀霖2本課程簡(jiǎn)要介紹本課程簡(jiǎn)要介紹Windows應(yīng)用程序的形式和在應(yīng)用程序的形式和在VC+集成開發(fā)環(huán)境下使用集成開發(fā)環(huán)境下使用MFC編寫編寫Windows應(yīng)用程序的基本應(yīng)用程序的基本方法,以使同學(xué)們對(duì)面向?qū)ο蟮目梢暬ǚ椒?,以使同學(xué)們對(duì)面向?qū)ο蟮目梢暬╒isual)程序設(shè))程序設(shè)計(jì)建立一個(gè)初步的概念并掌握一些基本方法,為深入學(xué)習(xí)計(jì)建立一個(gè)初步的概念并掌握一些基本方法,為深入學(xué)習(xí)和使用和使用VC+和其他可視化編程工具打下基礎(chǔ)。和其他可視化編程工具打下基礎(chǔ)。 3主題主題 可視化編程概述可視化編程概述使用使用MFCMFC進(jìn)行可視化編程進(jìn)行可視化編程常用控件及其應(yīng)用常用控件及其應(yīng)用菜單設(shè)計(jì)

2、菜單設(shè)計(jì)4 可視化編程的基本特點(diǎn)可視化編程的基本特點(diǎn) 可視化編程方法可視化編程方法 窗口窗口51.1可視化編程的基本特點(diǎn)可視化編程的基本特點(diǎn) 可視化(可視化(Visual)編程有三個(gè)基本特點(diǎn):)編程有三個(gè)基本特點(diǎn):可視化的圖形用戶界面設(shè)計(jì)可視化的圖形用戶界面設(shè)計(jì)使用面向?qū)ο蠓椒ň幊淌褂妹嫦驅(qū)ο蠓椒ň幊滩捎檬录?qū)動(dòng)的程序運(yùn)行方式采用事件驅(qū)動(dòng)的程序運(yùn)行方式 61.可視化的圖形用戶界面設(shè)計(jì)可視化的圖形用戶界面設(shè)計(jì)我們已經(jīng)相當(dāng)熟悉以下小程序:我們已經(jīng)相當(dāng)熟悉以下小程序:【例【例1.1】#includeusing namespace std;int main( ) coutVC+是功能強(qiáng)大的編程工具!是

3、功能強(qiáng)大的編程工具!endl; coutVC+是面向?qū)ο蟮木幊坦ぞ?!是面向?qū)ο蟮木幊坦ぞ?!endl; coutVC+是可視化的編程工具!是可視化的編程工具!endl; return 0; 7【例【例1.2】#includeusing namespace std;int main( ) double r; cout”請(qǐng)輸入圓半徑:請(qǐng)輸入圓半徑:”r; cout”圓周長(zhǎng)圓周長(zhǎng)”2*3.1416*r endl; cout”圓面積圓面積”3.1416*r*rendl; return 0; 這是基于控制臺(tái)的文本用戶界面應(yīng)用程序。運(yùn)行這種程序之這是基于控制臺(tái)的文本用戶界面應(yīng)用程序。運(yùn)行這種程序之后,屏幕出

4、現(xiàn)后,屏幕出現(xiàn)MS-DOS窗口,并且按照程序代碼的流程執(zhí)窗口,并且按照程序代碼的流程執(zhí)行,用戶輸入數(shù)據(jù)后即顯示執(zhí)行結(jié)果。行,用戶輸入數(shù)據(jù)后即顯示執(zhí)行結(jié)果。89進(jìn)行可視化編程,同樣可以寫出相同功能的程序,程序運(yùn)進(jìn)行可視化編程,同樣可以寫出相同功能的程序,程序運(yùn)行出現(xiàn)如圖行出現(xiàn)如圖1和圖和圖2所示的窗口。圖所示的窗口。圖1中的窗口稱為文檔窗中的窗口稱為文檔窗口,圖口,圖2中的窗口稱為對(duì)話框。顯然,它們比中的窗口稱為對(duì)話框。顯然,它們比MS-DOS的的文本用戶界面更為友好且方便。這種界面稱為文本用戶界面更為友好且方便。這種界面稱為(GUI, Graphical User Interface)。)。在

5、非可視化環(huán)境下,圖形用戶界面的設(shè)計(jì)在非可視化環(huán)境下,圖形用戶界面的設(shè)計(jì)都需通過編寫程序代碼來實(shí)現(xiàn),且在設(shè)計(jì)都需通過編寫程序代碼來實(shí)現(xiàn),且在設(shè)計(jì)過程中是看不到界面的實(shí)際顯示效果的。過程中是看不到界面的實(shí)際顯示效果的。10Visual Studio支持可視化的圖形用戶界面設(shè)計(jì)。支持可視化的圖形用戶界面設(shè)計(jì)。Windows應(yīng)用程序的每個(gè)圖形界面元素(如對(duì)話框、菜應(yīng)用程序的每個(gè)圖形界面元素(如對(duì)話框、菜單、命令按鈕、文本框等)都是單、命令按鈕、文本框等)都是,即設(shè)計(jì)時(shí)在顯即設(shè)計(jì)時(shí)在顯示器屏幕上是可見的,且所見即所得示器屏幕上是可見的,且所見即所得。編程者可根據(jù)具體。編程者可根據(jù)具體用戶界面設(shè)計(jì)的要求,

6、直接使用用戶界面設(shè)計(jì)的要求,直接使用VS系統(tǒng)提供的標(biāo)準(zhǔn)工具系統(tǒng)提供的標(biāo)準(zhǔn)工具在屏幕上在屏幕上“”出各種出各種Windows風(fēng)格的圖形界面元素,風(fēng)格的圖形界面元素,而不必為這些界面元素的構(gòu)建設(shè)計(jì)大量代碼,而不必為這些界面元素的構(gòu)建設(shè)計(jì)大量代碼,VS會(huì)自動(dòng)會(huì)自動(dòng)生成這些界面元素的設(shè)計(jì)代碼,開發(fā)人員只需為每個(gè)圖形生成這些界面元素的設(shè)計(jì)代碼,開發(fā)人員只需為每個(gè)圖形界面元素設(shè)置特定的屬性值,代碼編寫只針對(duì)界面元素設(shè)置特定的屬性值,代碼編寫只針對(duì)界面元素所要實(shí)現(xiàn)的具體功能。界面元素所要實(shí)現(xiàn)的具體功能。 112. 面向?qū)ο缶幊谭绞矫嫦驅(qū)ο缶幊谭绞接捎谟捎赪indows應(yīng)用程序的復(fù)雜性,從圖形用戶界面到整個(gè)應(yīng)

7、用程序的復(fù)雜性,從圖形用戶界面到整個(gè)應(yīng)用程序,都是采用面向?qū)ο蟮姆椒ńM織的。應(yīng)用程序,都是采用面向?qū)ο蟮姆椒ńM織的。Windows中中的的可以是所有的規(guī)范部件,如窗口、菜單、工具欄、可以是所有的規(guī)范部件,如窗口、菜單、工具欄、按鈕、文本框、以及程序模塊等按鈕、文本框、以及程序模塊等。從從用戶的觀點(diǎn)看,用戶的觀點(diǎn)看,Windows應(yīng)用程序有一個(gè)窗口,窗口上應(yīng)用程序有一個(gè)窗口,窗口上有若干菜單、命令按鈕、圖標(biāo)等界面圖形元素;有若干菜單、命令按鈕、圖標(biāo)等界面圖形元素;而窗口背后是一些對(duì)應(yīng)的程序。而窗口背后是一些對(duì)應(yīng)的程序。從從MFC的面向?qū)ο竽P涂矗粋€(gè)的面向?qū)ο竽P涂?,一個(gè)Windows應(yīng)應(yīng)用程序

8、可以拆分成許多功能獨(dú)立的對(duì)象,各用程序可以拆分成許多功能獨(dú)立的對(duì)象,各自負(fù)責(zé)不同類型的工作,其最基本的構(gòu)成對(duì)象可以分為兩大自負(fù)責(zé)不同類型的工作,其最基本的構(gòu)成對(duì)象可以分為兩大類:類:程序?qū)ο蟪绦驅(qū)ο蠛秃痛翱趯?duì)象窗口對(duì)象。12一個(gè)應(yīng)用程序的執(zhí)行就像一場(chǎng)舞臺(tái)演出。應(yīng)用程序?qū)ο笫且粋€(gè)應(yīng)用程序的執(zhí)行就像一場(chǎng)舞臺(tái)演出。應(yīng)用程序?qū)ο笫悄缓笕藛T(導(dǎo)演、劇務(wù)等),它們負(fù)責(zé)安排并指揮幕后人員(導(dǎo)演、劇務(wù)等),它們負(fù)責(zé)安排并指揮“演員演員”(窗口)上場(chǎng),準(zhǔn)備和調(diào)度各種演出(窗口)上場(chǎng),準(zhǔn)備和調(diào)度各種演出“資源資源”(如菜單、(如菜單、工具欄、圖標(biāo)等)。從操作系統(tǒng)來看,具有工具欄、圖標(biāo)等)。從操作系統(tǒng)來看,具有“法

9、人法人”地位地位的是應(yīng)用程序?qū)ο蠖谴翱趯?duì)象,應(yīng)用程序可以占有的是應(yīng)用程序?qū)ο蠖谴翱趯?duì)象,應(yīng)用程序可以占有CPU時(shí)間和內(nèi)存空間,還可擁有演出所需的時(shí)間和內(nèi)存空間,還可擁有演出所需的“資源資源”。Visual Studio系統(tǒng)給每個(gè)對(duì)象分配一個(gè)系統(tǒng)給每個(gè)對(duì)象分配一個(gè)(handle),),它是一個(gè)它是一個(gè)4 4字節(jié)長(zhǎng)的整數(shù)值,字節(jié)長(zhǎng)的整數(shù)值,是對(duì)象的唯一內(nèi)部編號(hào)是對(duì)象的唯一內(nèi)部編號(hào)。應(yīng)用程序通過句柄。應(yīng)用程序通過句柄訪問相應(yīng)的對(duì)象。每個(gè)對(duì)象除了句柄外,還訪問相應(yīng)的對(duì)象。每個(gè)對(duì)象除了句柄外,還有一個(gè)對(duì)象標(biāo)識(shí)符有一個(gè)對(duì)象標(biāo)識(shí)符IDID,可看作是對(duì)象的外可看作是對(duì)象的外部名。部名。ID與句柄的區(qū)別主要

10、在于:與句柄的區(qū)別主要在于:ID可以是可以是用戶自行設(shè)定的;而句柄是系統(tǒng)內(nèi)定的,對(duì)用戶自行設(shè)定的;而句柄是系統(tǒng)內(nèi)定的,對(duì)用戶是透明的,這能防止應(yīng)用程序直接訪問用戶是透明的,這能防止應(yīng)用程序直接訪問對(duì)象的內(nèi)部信息。對(duì)象的內(nèi)部信息。133. 事件驅(qū)動(dòng)的程序運(yùn)行機(jī)制事件驅(qū)動(dòng)的程序運(yùn)行機(jī)制 傳統(tǒng)的文字用戶界面的應(yīng)用程序都有一個(gè)起點(diǎn)和終點(diǎn),程傳統(tǒng)的文字用戶界面的應(yīng)用程序都有一個(gè)起點(diǎn)和終點(diǎn),程序中的各模塊(函數(shù)或?qū)ο螅┑目刂七^程和執(zhí)行順序是在序中的各模塊(函數(shù)或?qū)ο螅┑目刂七^程和執(zhí)行順序是在編寫程序時(shí)精心設(shè)置好的,是預(yù)知的、確定的,整個(gè)程序編寫程序時(shí)精心設(shè)置好的,是預(yù)知的、確定的,整個(gè)程序的運(yùn)行過程是明確

11、的。這種程序運(yùn)行機(jī)制稱為過程驅(qū)動(dòng)。的運(yùn)行過程是明確的。這種程序運(yùn)行機(jī)制稱為過程驅(qū)動(dòng)。可視化應(yīng)用程序則采用的是事件驅(qū)動(dòng)的程序運(yùn)行機(jī)制:可視化應(yīng)用程序則采用的是事件驅(qū)動(dòng)的程序運(yùn)行機(jī)制:即應(yīng)用程序的運(yùn)行沒有嚴(yán)格的起點(diǎn)和終點(diǎn)以及固即應(yīng)用程序的運(yùn)行沒有嚴(yán)格的起點(diǎn)和終點(diǎn)以及固定的流程,各對(duì)象之間沒有規(guī)定的執(zhí)行順序,定的流程,各對(duì)象之間沒有規(guī)定的執(zhí)行順序,即程序的運(yùn)行過程是不明確的,而是由事件即程序的運(yùn)行過程是不明確的,而是由事件及其消息控制著對(duì)象的激活和程序的運(yùn)行過程。及其消息控制著對(duì)象的激活和程序的運(yùn)行過程。對(duì)象通常處于循環(huán)休眠狀態(tài),當(dāng)發(fā)生了某個(gè)事件并有相應(yīng)對(duì)象通常處于循環(huán)休眠狀態(tài),當(dāng)發(fā)生了某個(gè)事件并有

12、相應(yīng)消息傳遞給對(duì)象,才會(huì)按照消息的指示執(zhí)行程序代碼,一消息傳遞給對(duì)象,才會(huì)按照消息的指示執(zhí)行程序代碼,一次消息的處理工作完畢后又恢復(fù)休眠狀態(tài)以等待下一個(gè)事次消息的處理工作完畢后又恢復(fù)休眠狀態(tài)以等待下一個(gè)事件的發(fā)生及其消息的到來。件的發(fā)生及其消息的到來。14(event)是什么?事件的含義很廣泛,簡(jiǎn)單地說,)是什么?事件的含義很廣泛,簡(jiǎn)單地說,事事件就是激活對(duì)象執(zhí)行程序代碼的一種動(dòng)作件就是激活對(duì)象執(zhí)行程序代碼的一種動(dòng)作。在在Windows的操作環(huán)境中,無(wú)論系統(tǒng)產(chǎn)生的動(dòng)作還是運(yùn)行程的操作環(huán)境中,無(wú)論系統(tǒng)產(chǎn)生的動(dòng)作還是運(yùn)行程序時(shí)用戶產(chǎn)生的動(dòng)作都稱為事件。最常見的用戶事件是鼠標(biāo)序時(shí)用戶產(chǎn)生的動(dòng)作都稱為

13、事件。最常見的用戶事件是鼠標(biāo)事件和鍵盤事件。實(shí)際上,任何一個(gè)擁有設(shè)備驅(qū)動(dòng)程序的系事件和鍵盤事件。實(shí)際上,任何一個(gè)擁有設(shè)備驅(qū)動(dòng)程序的系統(tǒng)輸入設(shè)備(包括端口)都可以產(chǎn)生各種事件,發(fā)送自己的統(tǒng)輸入設(shè)備(包括端口)都可以產(chǎn)生各種事件,發(fā)送自己的消息。消息。(message)是)是Visual Studio定定義(義(WinUser.h頭文件)的頭文件)的一種特殊的數(shù)一種特殊的數(shù)據(jù)結(jié)構(gòu)(據(jù)結(jié)構(gòu)(MSG),它打包了),它打包了“事件事件”發(fā)發(fā)生的相關(guān)信息生的相關(guān)信息,例如:消息接收者的句柄、,例如:消息接收者的句柄、事件的類型和來源、消息參數(shù)等。事件的類型和來源、消息參數(shù)等。15Windows系統(tǒng)有各種各

14、樣的消息,消息的傳遞無(wú)時(shí)不在發(fā)系統(tǒng)有各種各樣的消息,消息的傳遞無(wú)時(shí)不在發(fā)生,即使電腦閑置時(shí),還會(huì)有系統(tǒng)時(shí)間的消息傳遞出來。生,即使電腦閑置時(shí),還會(huì)有系統(tǒng)時(shí)間的消息傳遞出來。任何一個(gè)看似十分簡(jiǎn)單的動(dòng)作都會(huì)引發(fā)窗口之間許多消息任何一個(gè)看似十分簡(jiǎn)單的動(dòng)作都會(huì)引發(fā)窗口之間許多消息的交換。在的交換。在Visual C+中,中, 什么對(duì)象可以產(chǎn)生或接收什么事件,是由什么對(duì)象可以產(chǎn)生或接收什么事件,是由MFCMFC規(guī)定的規(guī)定的。 例如,命令按鈕有鼠標(biāo)單擊(例如,命令按鈕有鼠標(biāo)單擊(BN_CLICKED)和雙擊)和雙擊(BN_DOUBLECLICKED)事件;)事件; 文本編輯框有改變文本(文本編輯框有改變文

15、本(EN_CHANGE) 、接受輸入焦點(diǎn)(、接受輸入焦點(diǎn)(EN_SETFOCUS)、)、 失去輸入焦點(diǎn)(失去輸入焦點(diǎn)(EN_KILLFOCUS)、)、單擊垂直滾動(dòng)條(單擊垂直滾動(dòng)條(EN_VSCROLL)等事件。)等事件。 16當(dāng)在對(duì)象上發(fā)生了某個(gè)事件并發(fā)出了相應(yīng)的消息后,接收當(dāng)在對(duì)象上發(fā)生了某個(gè)事件并發(fā)出了相應(yīng)的消息后,接收者對(duì)象就要響應(yīng)并處理該消息。者對(duì)象就要響應(yīng)并處理該消息。每個(gè)需要響應(yīng)的消息要求每個(gè)需要響應(yīng)的消息要求對(duì)應(yīng)一個(gè)處理該消息的程序?qū)?yīng)一個(gè)處理該消息的程序。響應(yīng)響應(yīng)消息就是啟動(dòng)相應(yīng)的事件驅(qū)動(dòng)程序消息就是啟動(dòng)相應(yīng)的事件驅(qū)動(dòng)程序。Visual Studio中將中將響應(yīng)消息的過程稱為

16、響應(yīng)消息的過程稱為。171.2 可視化編程方法可視化編程方法 使用使用VC+進(jìn)行可視化編程有兩種方法:進(jìn)行可視化編程有兩種方法:基于基于Windows API函數(shù)的編程方法函數(shù)的編程方法基于基于Microsoft MFC的編程方法的編程方法 181. 基于基于Windows API函數(shù)的編程方法函數(shù)的編程方法 APIAPI是應(yīng)用程序編程接口(是應(yīng)用程序編程接口(Application Programming Interface)的縮寫,是)的縮寫,是Windows操作系統(tǒng)與操作系統(tǒng)與Windows應(yīng)應(yīng)用程序之間的標(biāo)準(zhǔn)接口。作為用程序之間的標(biāo)準(zhǔn)接口。作為Windows操作系統(tǒng)的組成操作系統(tǒng)的組成

17、部分(部分(shell),),API提供了提供了1000多個(gè)可供應(yīng)用程序直接調(diào)多個(gè)可供應(yīng)用程序直接調(diào)用的用的C函數(shù)(在函數(shù)(在Windows API參考手冊(cè)中有詳細(xì)介紹),參考手冊(cè)中有詳細(xì)介紹),這些函數(shù)大致可分為三類:這些函數(shù)大致可分為三類:窗口管理函數(shù)窗口管理函數(shù):實(shí)現(xiàn)窗口的創(chuàng)建、移動(dòng)和修改功能。:實(shí)現(xiàn)窗口的創(chuàng)建、移動(dòng)和修改功能。圖形設(shè)備接口函數(shù)圖形設(shè)備接口函數(shù):實(shí)現(xiàn)與具體顯示設(shè)備無(wú)關(guān)的圖形操:實(shí)現(xiàn)與具體顯示設(shè)備無(wú)關(guān)的圖形操作。作。系統(tǒng)服務(wù)函數(shù)系統(tǒng)服務(wù)函數(shù):實(shí)現(xiàn)操作系統(tǒng)提供的各種實(shí)用服務(wù)功能。:實(shí)現(xiàn)操作系統(tǒng)提供的各種實(shí)用服務(wù)功能。 19使用使用API設(shè)計(jì)設(shè)計(jì)Windows應(yīng)用程序,對(duì)于理解

18、和掌握面應(yīng)用程序,對(duì)于理解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的思想和方法是相當(dāng)關(guān)鍵的,是想成為向?qū)ο蟪绦蛟O(shè)計(jì)的思想和方法是相當(dāng)關(guān)鍵的,是想成為Windows編程高手的必經(jīng)之路。但它要求編程者必須熟編程高手的必經(jīng)之路。但它要求編程者必須熟知知Windows應(yīng)用程序的架構(gòu)、事件驅(qū)動(dòng)以及消息傳遞等應(yīng)用程序的架構(gòu)、事件驅(qū)動(dòng)以及消息傳遞等內(nèi)部機(jī)制,并且仍然必須編寫大量代碼,即它要求編程者內(nèi)部機(jī)制,并且仍然必須編寫大量代碼,即它要求編程者具備較高的專業(yè)素質(zhì),這對(duì)初學(xué)者來說無(wú)疑是比較困難的。具備較高的專業(yè)素質(zhì),這對(duì)初學(xué)者來說無(wú)疑是比較困難的。當(dāng)然,使用當(dāng)然,使用API編程更具靈活性和個(gè)性化。編程更具靈活性和個(gè)性化。AP

19、I支持所有支持所有Windows應(yīng)用程序的開發(fā)系統(tǒng),應(yīng)用程序的開發(fā)系統(tǒng),如如VC+、VB、Java等。等。 202. 2. 基于基于Microsoft MFCMicrosoft MFC的編程方法的編程方法 MFCMFC是是微軟基礎(chǔ)類庫(kù)微軟基礎(chǔ)類庫(kù)(Microsoft Foundation Class)的縮寫。與的縮寫。與API不同,不同,MFC不是不是Windows操作系統(tǒng)的組成操作系統(tǒng)的組成部分,而是微軟公司專為部分,而是微軟公司專為VC+開發(fā)的配套軟件包。與開發(fā)的配套軟件包。與VC6配套的是配套的是MFC6.0。MFC充分使用了面向?qū)ο蠓椒ㄖ械睦^承和多態(tài)性技術(shù),以充分使用了面向?qū)ο蠓椒ㄖ械?/p>

20、繼承和多態(tài)性技術(shù),以類的方式封裝了類的方式封裝了Windows應(yīng)用程序所涉及的幾應(yīng)用程序所涉及的幾乎所有的標(biāo)準(zhǔn)部件,如乎所有的標(biāo)準(zhǔn)部件,如Windows應(yīng)用程序的應(yīng)用程序的架構(gòu)、各種標(biāo)準(zhǔn)的圖形界面元素、其核心是架構(gòu)、各種標(biāo)準(zhǔn)的圖形界面元素、其核心是它以它以C+的形式封裝了的形式封裝了Windows API的大部分函數(shù)。的大部分函數(shù)。21MFC是一個(gè)很大的類層次體系(是一個(gè)很大的類層次體系(MFC6.0中包含了中包含了200多個(gè)多個(gè)類),它由一個(gè)稱為類),它由一個(gè)稱為CObjectCObject的類作為根基類,其他類大的類作為根基類,其他類大部分從該類派生而來,其整個(gè)類體系可大致劃分為:部分從該

21、類派生而來,其整個(gè)類體系可大致劃分為:基類基類應(yīng)用程序框架類應(yīng)用程序框架類。包括:應(yīng)用程序類、命令類、文檔包括:應(yīng)用程序類、命令類、文檔/ /視窗類、框架窗口類、文檔模板類等視窗類、框架窗口類、文檔模板類等可視對(duì)象類可視對(duì)象類。包括:窗口類、對(duì)話框類、控件類等包括:窗口類、對(duì)話框類、控件類等繪圖類繪圖類。包括:繪圖工具類、設(shè)備描述表類等。包括:繪圖工具類、設(shè)備描述表類等。簡(jiǎn)單數(shù)據(jù)類型類簡(jiǎn)單數(shù)據(jù)類型類通用類通用類包括:數(shù)組類、類表類、映像類包括:數(shù)組類、類表類、映像類文件和數(shù)據(jù)庫(kù)類文件和數(shù)據(jù)庫(kù)類包括:文件包括:文件I/OI/O類、類、ODBCODBC類、類、ADOADO類類Internet和網(wǎng)絡(luò)

22、工作類和網(wǎng)絡(luò)工作類包括:包括:Win32 InternetWin32 Internet類、類、Windows SocketWindows Socket類等類等對(duì)象鏈接和嵌入對(duì)象鏈接和嵌入(OLE, Object Lingking and Embedding)類類調(diào)試和異常類調(diào)試和異常類22事實(shí)上,事實(shí)上,MFC封裝了一個(gè)封裝了一個(gè)Windows應(yīng)用程序操作的每一方應(yīng)用程序操作的每一方面,因此使用面,因此使用MFC編程,編程者可以把注意力集中于自己程序編程,編程者可以把注意力集中于自己程序所特有的部分,不需要事事親自動(dòng)手。與直接調(diào)用所特有的部分,不需要事事親自動(dòng)手。與直接調(diào)用API函數(shù)相函數(shù)相比

23、,這將大大減少編程者編寫的代碼數(shù)量,使編程工作變得更比,這將大大減少編程者編寫的代碼數(shù)量,使編程工作變得更容易;同時(shí),程序標(biāo)準(zhǔn)部分由容易;同時(shí),程序標(biāo)準(zhǔn)部分由MFC的類來提供,可使程序變得的類來提供,可使程序變得更規(guī)范,更具可讀性,效率也更高。更規(guī)范,更具可讀性,效率也更高。對(duì)編程新手來說,對(duì)編程新手來說,MFC的最大優(yōu)點(diǎn)是它以高效簡(jiǎn)潔的方式的最大優(yōu)點(diǎn)是它以高效簡(jiǎn)潔的方式為編程者做了所有標(biāo)準(zhǔn)部分的工作,特別是編程者可以在不需為編程者做了所有標(biāo)準(zhǔn)部分的工作,特別是編程者可以在不需要寫一行代碼的情況下完成一個(gè)完整的應(yīng)用要寫一行代碼的情況下完成一個(gè)完整的應(yīng)用程序架構(gòu)程序架構(gòu)(約需千行代碼)。(約需千

24、行代碼)。MFC中包含了成中包含了成千上萬(wàn)行功能強(qiáng)大的、經(jīng)過優(yōu)化的千上萬(wàn)行功能強(qiáng)大的、經(jīng)過優(yōu)化的Windows程序代碼。編程者只要定義了某個(gè)程序代碼。編程者只要定義了某個(gè)MFC類的對(duì)象,就可以調(diào)用類的對(duì)象,就可以調(diào)用該類的成員函數(shù),輕輕松松完成本該由你自己一行行編寫的程該類的成員函數(shù),輕輕松松完成本該由你自己一行行編寫的程序代碼。從這點(diǎn)上說,序代碼。從這點(diǎn)上說,MFC極大地降低了程序開發(fā)難度。極大地降低了程序開發(fā)難度。231.3 窗窗 口口 窗口窗口是是Windows圖形用戶界面的最基本和最重要的部件,圖形用戶界面的最基本和最重要的部件,每一個(gè)每一個(gè)Windows程序至少有一個(gè)窗口。故程序至少

25、有一個(gè)窗口。故Windows圖形圖形用戶界面也稱窗口界面。用戶界面也稱窗口界面。241. 框架窗口框架窗口框架窗口是應(yīng)用程序的主窗口,負(fù)責(zé)管理其包容的其框架窗口是應(yīng)用程序的主窗口,負(fù)責(zé)管理其包容的其他窗口。一個(gè)應(yīng)用程序的最頂層的框架窗口是應(yīng)用程序啟他窗口。一個(gè)應(yīng)用程序的最頂層的框架窗口是應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建的第一個(gè)窗口。動(dòng)時(shí)創(chuàng)建的第一個(gè)窗口。MFC提供了由基類提供了由基類CWnd(窗口類)派生的(窗口類)派生的4個(gè)框架個(gè)框架窗口類:窗口類:CFrameWndCMDIFrameWndCMDIChildWndCdialog用于支持三種標(biāo)準(zhǔn)框架窗口:用于支持三種標(biāo)準(zhǔn)框架窗口:25單文檔單文檔(Sing

26、le document)窗口)窗口由由CframeWnd類支持。文檔窗口主要由邊框、標(biāo)題欄、類支持。文檔窗口主要由邊框、標(biāo)題欄、菜單欄、工具欄、編輯區(qū)等組成。菜單欄、工具欄、編輯區(qū)等組成。多文檔多文檔(Multiple documents,MDI)窗口)窗口由多個(gè)文檔窗口組成,其中第一個(gè)打開的是主框架窗口,由多個(gè)文檔窗口組成,其中第一個(gè)打開的是主框架窗口,由由CMDIFrameWnd類支持,其他為子框架窗口,由類支持,其他為子框架窗口,由CMDIChildWnd類支持。子框架窗口沒有菜單欄類支持。子框架窗口沒有菜單欄和工具欄,它們共享主窗口的菜單欄和工具欄。和工具欄,它們共享主窗口的菜單欄和工

27、具欄。對(duì)話框?qū)υ捒颍―ialog)對(duì)話框是一種特殊類型的窗口,它沒有菜單欄和工具欄,對(duì)話框是一種特殊類型的窗口,它沒有菜單欄和工具欄,且一般不能改變窗口的大小。對(duì)話框由且一般不能改變窗口的大小。對(duì)話框由Cdialog類支持。類支持。262.2.對(duì)話框與控件對(duì)話框與控件 是應(yīng)用程序用于顯示或提示,并且等待用戶輸是應(yīng)用程序用于顯示或提示,并且等待用戶輸入信息的彈出式窗口。入信息的彈出式窗口。對(duì)對(duì)話框的操作一般是通過在對(duì)話對(duì)對(duì)話框的操作一般是通過在對(duì)話框上添加控件來實(shí)現(xiàn)的??蛏咸砑涌丶韺?shí)現(xiàn)的。對(duì)話框與控件密不可分,在每個(gè)對(duì)話框與控件密不可分,在每個(gè)對(duì)話框內(nèi)都有一些控件,對(duì)話框依靠這些控件與用戶交互

28、對(duì)話框內(nèi)都有一些控件,對(duì)話框依靠這些控件與用戶交互??梢哉f,對(duì)話框是可以說,對(duì)話框是Windows應(yīng)用程序中最重要的用戶界面應(yīng)用程序中最重要的用戶界面元素,是應(yīng)用程序與用戶進(jìn)行交互的主要部件。元素,是應(yīng)用程序與用戶進(jìn)行交互的主要部件。Visual Studio把主要設(shè)置在對(duì)話框上的把主要設(shè)置在對(duì)話框上的一些標(biāo)準(zhǔn)的圖形界面元素定義為一些標(biāo)準(zhǔn)的圖形界面元素定義為控件控件(Control) ,如文本框、列表框、命令按鈕、復(fù)選框等,如文本框、列表框、命令按鈕、復(fù)選框等,它們中的大它們中的大多數(shù)可以捕獲事件并向?qū)υ捒虬l(fā)送消息。控件實(shí)際上也都多數(shù)可以捕獲事件并向?qū)υ捒虬l(fā)送消息??丶?shí)際上也都是窗口,是窗口

29、,所有的控件類都是所有的控件類都是CWnd類的派生類??丶ǔn惖呐缮???丶ǔJ亲鳛閷?duì)話框的子窗口而創(chuàng)建的。是作為對(duì)話框的子窗口而創(chuàng)建的。272 使用使用MFC進(jìn)行可視化編程進(jìn)行可視化編程建立項(xiàng)目架構(gòu)建立項(xiàng)目架構(gòu) 設(shè)計(jì)圖形用戶界面設(shè)計(jì)圖形用戶界面 設(shè)計(jì)對(duì)象的事件驅(qū)動(dòng)程序,編寫相關(guān)代碼設(shè)計(jì)對(duì)象的事件驅(qū)動(dòng)程序,編寫相關(guān)代碼 項(xiàng)目的編譯、鏈接和運(yùn)行項(xiàng)目的編譯、鏈接和運(yùn)行 28Visual Studio把開發(fā)一個(gè)應(yīng)用程序的過程稱之為把開發(fā)一個(gè)應(yīng)用程序的過程稱之為“項(xiàng)目項(xiàng)目”(Project,很多人把它翻譯成,很多人把它翻譯成“工程工程”)。開發(fā)一個(gè))。開發(fā)一個(gè)Windows應(yīng)用程序的項(xiàng)目遠(yuǎn)比開發(fā)一

30、個(gè)控制臺(tái)應(yīng)用程序項(xiàng)目應(yīng)用程序的項(xiàng)目遠(yuǎn)比開發(fā)一個(gè)控制臺(tái)應(yīng)用程序項(xiàng)目要復(fù)雜得多,工作量也要浩大得多。好在要復(fù)雜得多,工作量也要浩大得多。好在Visual Studio提供提供了一組強(qiáng)大的了一組強(qiáng)大的MFC項(xiàng)目的開發(fā)工具。項(xiàng)目的開發(fā)工具。開發(fā)一個(gè)開發(fā)一個(gè)MFC項(xiàng)目通常有四個(gè)步驟:項(xiàng)目通常有四個(gè)步驟:Step.1建立項(xiàng)目架構(gòu)建立項(xiàng)目架構(gòu)Step.2設(shè)計(jì)圖形用戶界面設(shè)計(jì)圖形用戶界面Step.3設(shè)計(jì)對(duì)象的事件驅(qū)動(dòng)程序設(shè)計(jì)對(duì)象的事件驅(qū)動(dòng)程序Step.4項(xiàng)目的編譯、鏈接和運(yùn)行項(xiàng)目的編譯、鏈接和運(yùn)行下面結(jié)合一個(gè)簡(jiǎn)單的編程實(shí)例(下面結(jié)合一個(gè)簡(jiǎn)單的編程實(shí)例(Case1)“計(jì)算圓的周長(zhǎng)和計(jì)算圓的周長(zhǎng)和面積面積”來介紹

31、這四個(gè)步驟。來介紹這四個(gè)步驟。292.1 建立項(xiàng)目架構(gòu)建立項(xiàng)目架構(gòu)建立項(xiàng)目架構(gòu)(建立項(xiàng)目架構(gòu)(skeleton),類似于一個(gè)項(xiàng)目的總),類似于一個(gè)項(xiàng)目的總體設(shè)計(jì),它需要確定項(xiàng)目的類型,根據(jù)項(xiàng)目類型創(chuàng)建并體設(shè)計(jì),它需要確定項(xiàng)目的類型,根據(jù)項(xiàng)目類型創(chuàng)建并組織各種基本組件,包括:所有的類、一些基本對(duì)象、組織各種基本組件,包括:所有的類、一些基本對(duì)象、項(xiàng)目所需的必要資源等。從而為項(xiàng)目搭建起一個(gè)完整的項(xiàng)目所需的必要資源等。從而為項(xiàng)目搭建起一個(gè)完整的架構(gòu)。架構(gòu)。30所謂項(xiàng)目類型,是以項(xiàng)目采用什么框架窗口作為主窗口來所謂項(xiàng)目類型,是以項(xiàng)目采用什么框架窗口作為主窗口來界定的。界定的。MFC支持三種標(biāo)準(zhǔn)項(xiàng)目類型

32、:支持三種標(biāo)準(zhǔn)項(xiàng)目類型:?jiǎn)挝臋n單文檔(Single document)項(xiàng)目)項(xiàng)目以單文檔窗口作為項(xiàng)目主窗口。以單文檔窗口作為項(xiàng)目主窗口。多文檔多文檔(Multiple documents)項(xiàng)目)項(xiàng)目以多文檔窗口作為項(xiàng)目的主窗口。以多文檔窗口作為項(xiàng)目的主窗口。對(duì)話框?qū)υ捒颍―ialog based)項(xiàng)目)項(xiàng)目以對(duì)話框作為項(xiàng)目主窗口。這是最緊湊、以對(duì)話框作為項(xiàng)目主窗口。這是最緊湊、最簡(jiǎn)單的一種標(biāo)準(zhǔn)項(xiàng)目架構(gòu)。最簡(jiǎn)單的一種標(biāo)準(zhǔn)項(xiàng)目架構(gòu)。31VC+為用戶建立項(xiàng)目架構(gòu)提供了一個(gè)強(qiáng)大的工具為用戶建立項(xiàng)目架構(gòu)提供了一個(gè)強(qiáng)大的工具 MFC AppWizardMFC AppWizard (MFC應(yīng)用程序向?qū)В?。?yīng)

33、用程序向?qū)В?。本?shí)例采用的是對(duì)話框架構(gòu)。本實(shí)例采用的是對(duì)話框架構(gòu)。32操作步驟操作步驟1. 選擇選擇VC6主窗口菜單欄中的主窗口菜單欄中的“文件新建文件新建”菜單項(xiàng),菜單項(xiàng),彈出一個(gè)如圖彈出一個(gè)如圖3所示的所示的“新建新建”對(duì)話框。對(duì)話框。2. 在對(duì)話框中選擇在對(duì)話框中選擇“項(xiàng)目項(xiàng)目”(project)選項(xiàng)卡。選擇)選項(xiàng)卡。選擇MFC AppWizardexe項(xiàng),在對(duì)話框右部輸入項(xiàng)目的路徑項(xiàng),在對(duì)話框右部輸入項(xiàng)目的路徑和項(xiàng)目名,然后單擊和項(xiàng)目名,然后單擊“確定確定”按鈕。按鈕。VC+以文件夾方式管理項(xiàng)目,如圖以文件夾方式管理項(xiàng)目,如圖3 3所示所示,case1是是D:CPPMFC_PRJ下的一

34、個(gè)文件夾,該項(xiàng)目的下的一個(gè)文件夾,該項(xiàng)目的各種文件都將存放在這個(gè)文件夾中。各種文件都將存放在這個(gè)文件夾中。3. 在系統(tǒng)彈出如圖在系統(tǒng)彈出如圖4所示的所示的“MFC應(yīng)用程序向?qū)Р襟E應(yīng)用程序向?qū)Р襟E1”對(duì)話框中進(jìn)行項(xiàng)目類型選擇。先選擇單選按鈕對(duì)話框中進(jìn)行項(xiàng)目類型選擇。先選擇單選按鈕“Dialog based”(對(duì)話框項(xiàng)目),再單擊(對(duì)話框項(xiàng)目),再單擊“下一個(gè)下一個(gè)”按鈕。按鈕。334. 依次選擇系統(tǒng)彈出的圖依次選擇系統(tǒng)彈出的圖5至圖至圖7(步驟(步驟2至步驟至步驟4)中對(duì)話框)中對(duì)話框的選項(xiàng),用戶可以先全部采用默認(rèn)選擇,然后在編程過程中再的選項(xiàng),用戶可以先全部采用默認(rèn)選擇,然后在編程過程中再按需

35、要修改。單擊圖按需要修改。單擊圖7中的中的“完成完成”按鈕,或者在出現(xiàn)其中任按鈕,或者在出現(xiàn)其中任一個(gè)對(duì)話框時(shí)單擊一個(gè)對(duì)話框時(shí)單擊“完成完成”按鈕,表示默認(rèn)其他選項(xiàng),系統(tǒng)就按鈕,表示默認(rèn)其他選項(xiàng),系統(tǒng)就不再?gòu)棾銎渌麑?duì)話框。不再?gòu)棾銎渌麑?duì)話框。5. 系統(tǒng)彈出如圖系統(tǒng)彈出如圖8所示的所示的“新建項(xiàng)目信息新建項(xiàng)目信息”對(duì)話框,其中列對(duì)話框,其中列出前面所做的選擇內(nèi)容,單擊出前面所做的選擇內(nèi)容,單擊“確定確定”按鈕。按鈕。至此,項(xiàng)目架構(gòu)創(chuàng)建完成,系統(tǒng)回到至此,項(xiàng)目架構(gòu)創(chuàng)建完成,系統(tǒng)回到VC6的的集成開發(fā)環(huán)境,如圖集成開發(fā)環(huán)境,如圖9所示。所示。從該窗口的左窗格的各選項(xiàng)卡中可以觀察到從該窗口的左窗格的各

36、選項(xiàng)卡中可以觀察到MFC AppWizard為一個(gè)對(duì)話框項(xiàng)目的架構(gòu)創(chuàng)建的所有組件:為一個(gè)對(duì)話框項(xiàng)目的架構(gòu)創(chuàng)建的所有組件: 34CCase1Dlg等三個(gè)類等三個(gè)類其中最主要的是其中最主要的是CCase1Dlg類(項(xiàng)目類(項(xiàng)目case1的對(duì)話框類),的對(duì)話框類),它由它由Cdialog類派生。類派生。 35case1Dlg.h等四個(gè)頭文件等四個(gè)頭文件case1Dlg.h是最主要的一個(gè)頭文件,它包含了是最主要的一個(gè)頭文件,它包含了CCase1Dlg類的聲明。類的聲明。36case1Dlg.cpp等四個(gè)等四個(gè)C+源程序文件源程序文件case1Dlg.cpp是是CCase1Dlg類的實(shí)現(xiàn),它不僅是最重要

37、類的實(shí)現(xiàn),它不僅是最重要的源程序文件,而且是整個(gè)項(xiàng)目的核心。用戶的編程工作的源程序文件,而且是整個(gè)項(xiàng)目的核心。用戶的編程工作主要是在這個(gè)文件上完成,它將包含實(shí)現(xiàn)具體應(yīng)用功能的主要是在這個(gè)文件上完成,它將包含實(shí)現(xiàn)具體應(yīng)用功能的全部代碼。全部代碼。case1.cpp是項(xiàng)目的是項(xiàng)目的啟動(dòng)程序,類似于非啟動(dòng)程序,類似于非Windows應(yīng)用程序中應(yīng)用程序中的的main函數(shù)。函數(shù)。 37另外,另外,MFC AppWizard為項(xiàng)目生成了一個(gè)對(duì)話框窗體、為項(xiàng)目生成了一個(gè)對(duì)話框窗體、一個(gè)項(xiàng)目圖標(biāo)、項(xiàng)目版本等資源。一個(gè)項(xiàng)目圖標(biāo)、項(xiàng)目版本等資源。38至此,雖然一行代碼都沒有編寫,但這個(gè)應(yīng)用程序架構(gòu)是至此,雖然一行

38、代碼都沒有編寫,但這個(gè)應(yīng)用程序架構(gòu)是可以運(yùn)行的程序。進(jìn)行編譯鏈接后,其運(yùn)行結(jié)果如圖可以運(yùn)行的程序。進(jìn)行編譯鏈接后,其運(yùn)行結(jié)果如圖10所所示。以這種方式建立的應(yīng)用程序,其主窗口即是對(duì)話框。示。以這種方式建立的應(yīng)用程序,其主窗口即是對(duì)話框。圖圖10. 對(duì)話框項(xiàng)目架構(gòu)的運(yùn)行結(jié)果對(duì)話框項(xiàng)目架構(gòu)的運(yùn)行結(jié)果392.2 設(shè)計(jì)圖形用戶界面設(shè)計(jì)圖形用戶界面設(shè)計(jì)工具與設(shè)計(jì)方案設(shè)計(jì)工具與設(shè)計(jì)方案 操作步驟操作步驟401.設(shè)計(jì)工具和設(shè)計(jì)方案設(shè)計(jì)工具和設(shè)計(jì)方案在完成了對(duì)話框項(xiàng)目架構(gòu)的創(chuàng)建后,在完成了對(duì)話框項(xiàng)目架構(gòu)的創(chuàng)建后,VC6窗口上彈出窗口上彈出了了MFC的對(duì)話框編輯器(圖的對(duì)話框編輯器(圖11)。)。對(duì)話框編輯器主

39、要用于創(chuàng)建、編輯對(duì)話框窗口,向?qū)?duì)話框編輯器主要用于創(chuàng)建、編輯對(duì)話框窗口,向?qū)υ捒虼绑w上添加控件和調(diào)整布局。對(duì)話框編輯器主要包括話框窗體上添加控件和調(diào)整布局。對(duì)話框編輯器主要包括如下組件:對(duì)話框窗體、控件箱、調(diào)整(布局)工具欄以如下組件:對(duì)話框窗體、控件箱、調(diào)整(布局)工具欄以及對(duì)話框和控件的屬性對(duì)話框。及對(duì)話框和控件的屬性對(duì)話框。是是MFC給每個(gè)工程默認(rèn)生成的一給每個(gè)工程默認(rèn)生成的一個(gè)圖形資源,它是個(gè)圖形資源,它是CCase1Dlg類的圖形化。類的圖形化。所謂窗體即窗口毛坯,是還未完全成形的初所謂窗體即窗口毛坯,是還未完全成形的初始窗口,它如同一塊始窗口,它如同一塊“畫布畫布”,在它上面可以

40、畫上各種,在它上面可以畫上各種控件來構(gòu)成項(xiàng)目所需的實(shí)際窗口。窗體的標(biāo)題欄上顯示的控件來構(gòu)成項(xiàng)目所需的實(shí)際窗口。窗體的標(biāo)題欄上顯示的是本項(xiàng)目的名字,窗體上可設(shè)置網(wǎng)格,用于安排控件的位是本項(xiàng)目的名字,窗體上可設(shè)置網(wǎng)格,用于安排控件的位置和大小。在程序運(yùn)行時(shí),網(wǎng)格會(huì)自動(dòng)消失。置和大小。在程序運(yùn)行時(shí),網(wǎng)格會(huì)自動(dòng)消失。41,MFC設(shè)計(jì)有設(shè)計(jì)有20多個(gè)標(biāo)準(zhǔn)控件類,每個(gè)控件類就多個(gè)標(biāo)準(zhǔn)控件類,每個(gè)控件類就是制作控件的工具,控件工具箱,簡(jiǎn)稱是制作控件的工具,控件工具箱,簡(jiǎn)稱控件箱控件箱(圖(圖12)是)是存放控件類的容器,這些控件類都以圖標(biāo)式按鈕表示。開存放控件類的容器,這些控件類都以圖標(biāo)式按鈕表示。開發(fā)人員

41、可利用控件箱在對(duì)話框上創(chuàng)建各種所需的控件。發(fā)人員可利用控件箱在對(duì)話框上創(chuàng)建各種所需的控件。將控件箱中的控件工具復(fù)制到對(duì)話框窗體中,即在對(duì)話框?qū)⒖丶渲械目丶ぞ邚?fù)制到對(duì)話框窗體中,即在對(duì)話框中創(chuàng)建了相應(yīng)的控件對(duì)象中創(chuàng)建了相應(yīng)的控件對(duì)象,這可通過可視化操作實(shí)現(xiàn):,這可通過可視化操作實(shí)現(xiàn):方法方法1:用鼠標(biāo)按住控件箱上所選中的控件圖標(biāo),拖到:用鼠標(biāo)按住控件箱上所選中的控件圖標(biāo),拖到對(duì)話框中合適的位置?;?qū)υ捒蛑泻线m的位置?;蚍椒ǚ椒?:先單擊控件箱上所選中的控件圖標(biāo),:先單擊控件箱上所選中的控件圖標(biāo),然后移動(dòng)鼠標(biāo)到對(duì)話框中合適的位置。然后移動(dòng)鼠標(biāo)到對(duì)話框中合適的位置。復(fù)制到對(duì)話框上的控件,可以移動(dòng)

42、、復(fù)制、調(diào)整復(fù)制到對(duì)話框上的控件,可以移動(dòng)、復(fù)制、調(diào)整或刪除,也可拖動(dòng)鼠標(biāo)縮放控件的大小?;騽h除,也可拖動(dòng)鼠標(biāo)縮放控件的大小。42對(duì)于本實(shí)例,可在對(duì)話框上建立如下控件:對(duì)于本實(shí)例,可在對(duì)話框上建立如下控件:1個(gè)編輯框個(gè)編輯框:用于用戶輸入半徑值;:用于用戶輸入半徑值;5個(gè)靜態(tài)文本框個(gè)靜態(tài)文本框(靜態(tài)文本框只能顯示文本而不能輸入(靜態(tài)文本框只能顯示文本而不能輸入文本),其中:文本),其中:2個(gè)靜態(tài)文本框分別用于顯示圓周長(zhǎng)和圓面積,個(gè)靜態(tài)文本框分別用于顯示圓周長(zhǎng)和圓面積,其余其余3個(gè)靜態(tài)文本框分別用于對(duì)上述三個(gè)文本框進(jìn)行文個(gè)靜態(tài)文本框分別用于對(duì)上述三個(gè)文本框進(jìn)行文字說明。字說明。2個(gè)命令按鈕個(gè)命令

43、按鈕,“確定確定”和和“退出退出”: 前者用于前者用于確定輸入值,計(jì)算圓周長(zhǎng)和圓面積,然后把確定輸入值,計(jì)算圓周長(zhǎng)和圓面積,然后把結(jié)果顯示在對(duì)應(yīng)的輸出框上;后者用于結(jié)束結(jié)果顯示在對(duì)應(yīng)的輸出框上;后者用于結(jié)束程序的執(zhí)行。程序的執(zhí)行。效果如圖效果如圖2。432. 2. 操作步驟操作步驟(1)設(shè)置主窗口的屬性值設(shè)置主窗口的屬性值單擊對(duì)話框窗體,使其成為當(dāng)前窗口(周圍出現(xiàn)單擊對(duì)話框窗體,使其成為當(dāng)前窗口(周圍出現(xiàn)8個(gè)小方個(gè)小方塊)。塊)。從從VC6窗口的菜單欄上的窗口的菜單欄上的“查看查看”菜單中選擇菜單中選擇“屬性屬性”選選項(xiàng),或者用鼠標(biāo)右擊窗體,從彈出的快捷菜單中選擇項(xiàng),或者用鼠標(biāo)右擊窗體,從彈出

44、的快捷菜單中選擇“屬屬性性”,都將彈出圖,都將彈出圖13所示的所示的“對(duì)話框?qū)傩詫?duì)話框?qū)傩浴睂?duì)話框。對(duì)話框。在在“常規(guī)常規(guī)”(General)選項(xiàng)卡下:)選項(xiàng)卡下:該對(duì)話框?qū)ο蟮脑搶?duì)話框?qū)ο蟮腎D默認(rèn)為:默認(rèn)為:IDD_CASE1_DIALOG將標(biāo)題值設(shè)置為:將標(biāo)題值設(shè)置為:計(jì)算圓周長(zhǎng)和圓面積計(jì)算圓周長(zhǎng)和圓面積單擊單擊“字體字體”按鈕,進(jìn)行字體屬性的設(shè)置按鈕,進(jìn)行字體屬性的設(shè)置其余屬性采用默認(rèn)值。其余屬性采用默認(rèn)值。關(guān)閉屬性對(duì)話框。關(guān)閉屬性對(duì)話框。上述設(shè)置在上述設(shè)置在CCase1Dlg類的代碼中立即被反映。類的代碼中立即被反映。44(2)添加編輯框控件添加編輯框控件 用鼠標(biāo)把控件工具箱上的編輯

45、框拖到對(duì)話框窗體的合適用鼠標(biāo)把控件工具箱上的編輯框拖到對(duì)話框窗體的合適位置,就建立了一個(gè)編輯框控件。位置,就建立了一個(gè)編輯框控件。用鼠標(biāo)右擊該編輯框,從彈出的快捷菜單中選擇用鼠標(biāo)右擊該編輯框,從彈出的快捷菜單中選擇“屬屬性性”,彈出如圖,彈出如圖14所示的編輯框?qū)傩詫?duì)話框。所示的編輯框?qū)傩詫?duì)話框。 該編輯框?qū)ο蟮脑摼庉嬁驅(qū)ο蟮腎D默認(rèn)為:默認(rèn)為:IDC_EDIT1在在“樣式樣式”(Styles)選項(xiàng)卡中設(shè)置相關(guān)屬性值為:)選項(xiàng)卡中設(shè)置相關(guān)屬性值為:“靠靠左左”(Left)和)和“垂直居中垂直居中”(Center)。)。其余屬性采用默認(rèn)值。其余屬性采用默認(rèn)值。關(guān)閉屬性對(duì)話框。關(guān)閉屬性對(duì)話框。45

46、(3)添加靜態(tài)文本框控件添加靜態(tài)文本框控件用鼠標(biāo)把控件工具箱上的靜態(tài)文本框拖到對(duì)話框窗體的合用鼠標(biāo)把控件工具箱上的靜態(tài)文本框拖到對(duì)話框窗體的合適位置,就建立了一個(gè)靜態(tài)文本框控件。用同樣的操作(或適位置,就建立了一個(gè)靜態(tài)文本框控件。用同樣的操作(或復(fù)制)建立其他四個(gè)靜態(tài)文本框。復(fù)制)建立其他四個(gè)靜態(tài)文本框。用鼠標(biāo)右擊靜態(tài)文本框,從彈出的快捷菜單中選擇用鼠標(biāo)右擊靜態(tài)文本框,從彈出的快捷菜單中選擇“屬屬性性”,彈出如圖,彈出如圖15所示的靜態(tài)文本框?qū)傩詫?duì)話框。所示的靜態(tài)文本框?qū)傩詫?duì)話框??蓪?duì)這可對(duì)這5個(gè)靜態(tài)文本框的屬性值設(shè)置如下:個(gè)靜態(tài)文本框的屬性值設(shè)置如下: ID標(biāo)題其他屬性標(biāo)題其他屬性 -IDC

47、_STATIC1 輸入半徑輸入半徑: 居中,垂直居中居中,垂直居中IDC_STATIC2圓周長(zhǎng)圓周長(zhǎng) 居中,垂直居中居中,垂直居中IDC_STATIC3圓面積圓面積 居中,垂直居中居中,垂直居中IDC_STATIC4默認(rèn)默認(rèn) 靠左,垂直居中靠左,垂直居中,Client edgeIDC_STATIC5默認(rèn)默認(rèn) 靠左,垂直居中靠左,垂直居中,Client edge其中,其中,IDC_STATIC45作為結(jié)果輸出框,分別顯示圓周長(zhǎng)和圓面積;作為結(jié)果輸出框,分別顯示圓周長(zhǎng)和圓面積;IDC_STATIC13分別作為輸入框和輸出框的文字說明。分別作為輸入框和輸出框的文字說明。46(4)建立命令按鈕控件建立

48、命令按鈕控件建立建立2個(gè)命令按鈕,它們的屬性值設(shè)置如下:個(gè)命令按鈕,它們的屬性值設(shè)置如下: ID 標(biāo)題標(biāo)題 -IDC_BUTTON1 確定確定IDC_BUTTON2退出退出 -至此,控件在窗體上至此,控件在窗體上“擺放擺放”完畢,可以用鼠標(biāo)完畢,可以用鼠標(biāo)調(diào)整它們的大小和位置,也可以用調(diào)整工具調(diào)整它們的大小和位置,也可以用調(diào)整工具欄調(diào)整控件之間的對(duì)齊方式、分布、大小規(guī)格,以及測(cè)試欄調(diào)整控件之間的對(duì)齊方式、分布、大小規(guī)格,以及測(cè)試效果,設(shè)計(jì)好的圖形用戶界面如圖效果,設(shè)計(jì)好的圖形用戶界面如圖16所示。所示。472.3 設(shè)計(jì)對(duì)象的事件驅(qū)動(dòng)程序設(shè)計(jì)對(duì)象的事件驅(qū)動(dòng)程序設(shè)計(jì)的工作和方法設(shè)計(jì)的工作和方法設(shè)計(jì)

49、工具與設(shè)計(jì)方案設(shè)計(jì)工具與設(shè)計(jì)方案操作步驟操作步驟481.設(shè)計(jì)的工作和方法設(shè)計(jì)的工作和方法對(duì)象的事件驅(qū)動(dòng)程序在對(duì)象的事件驅(qū)動(dòng)程序在VC+中稱為中稱為消息處理成員函數(shù)消息處理成員函數(shù)。對(duì)于對(duì)話框工程,作為工程的主界面,對(duì)話框?qū)ο笮枰憫?yīng)對(duì)于對(duì)話框工程,作為工程的主界面,對(duì)話框?qū)ο笮枰憫?yīng)并處理所有的控件消息。設(shè)計(jì)對(duì)話框的消息處理成員函數(shù)的并處理所有的控件消息。設(shè)計(jì)對(duì)話框的消息處理成員函數(shù)的工作主要包括:工作主要包括:確定各個(gè)控件要傳遞的數(shù)據(jù);確定各個(gè)控件要傳遞的數(shù)據(jù);確定對(duì)象的消息映射,即接收什么消息,建立確定對(duì)象的消息映射,即接收什么消息,建立什么消息處理函數(shù);什么消息處理函數(shù);在消息處理函數(shù)的

50、函數(shù)體內(nèi)添加代碼。在消息處理函數(shù)的函數(shù)體內(nèi)添加代碼。 49在實(shí)際應(yīng)用中,讀取或更新控件上的數(shù)據(jù)是對(duì)話框的非常在實(shí)際應(yīng)用中,讀取或更新控件上的數(shù)據(jù)是對(duì)話框的非常重要的工作。重要的工作。MFC為此提供了一套標(biāo)準(zhǔn)方法:為此提供了一套標(biāo)準(zhǔn)方法:DDX(Data Exchange,數(shù)據(jù)交換)和,數(shù)據(jù)交換)和DDV(Data Validation,數(shù)據(jù)校驗(yàn))技術(shù)。,數(shù)據(jù)校驗(yàn))技術(shù)。DDX通過通過成員變量成員變量(member variable)的方式實(shí)現(xiàn))的方式實(shí)現(xiàn)對(duì)話框與控件之間的數(shù)據(jù)傳遞。對(duì)話框與控件之間的數(shù)據(jù)傳遞。如果要在對(duì)話框的消息處如果要在對(duì)話框的消息處理函數(shù)中訪問控件上的數(shù)據(jù),就必須先在對(duì)話框

51、類理函數(shù)中訪問控件上的數(shù)據(jù),就必須先在對(duì)話框類(CCase1Dlg類)類)中分別為這些控件添加中分別為這些控件添加(聲明)一個(gè)成員變量,(聲明)一個(gè)成員變量,每一個(gè)成員變量每一個(gè)成員變量綁定一個(gè)控件綁定一個(gè)控件。在消息處理函數(shù)中是通過。在消息處理函數(shù)中是通過成員變量訪問控件的。成員變量訪問控件的。50成員變量是對(duì)話框的成員變量是對(duì)話框的public數(shù)據(jù)成員。有兩類成員變量:數(shù)據(jù)成員。有兩類成員變量:ValueValue類成員變量:表示該變量的值為控件的數(shù)據(jù)。類成員變量:表示該變量的值為控件的數(shù)據(jù)。ControlControl類成員變量:表示該成員變量就代表控件本類成員變量:表示該成員變量就代表

52、控件本身,即它是控件的一個(gè)對(duì)象,其值實(shí)際上就是控件的句柄。身,即它是控件的一個(gè)對(duì)象,其值實(shí)際上就是控件的句柄。DDV用于數(shù)據(jù)的校驗(yàn),例如自動(dòng)校驗(yàn)字符串的長(zhǎng)度和取值用于數(shù)據(jù)的校驗(yàn),例如自動(dòng)校驗(yàn)字符串的長(zhǎng)度和取值范圍。范圍。 51使用使用MFC DDX/DDV的流程是:的流程是:首先定義用于接收控件數(shù)據(jù)的成員變量。例如,為編輯首先定義用于接收控件數(shù)據(jù)的成員變量。例如,為編輯框框IDC_EDIT1定義一個(gè)定義一個(gè)Value類的類的double型的成員變量,型的成員變量,用于接收用戶輸入的半徑值。定義變量的同時(shí)可以設(shè)定數(shù)用于接收用戶輸入的半徑值。定義變量的同時(shí)可以設(shè)定數(shù)據(jù)取值范圍,提供校驗(yàn)。據(jù)取值范圍

53、,提供校驗(yàn)。然后,在對(duì)應(yīng)的消息處理成員函數(shù)中調(diào)用然后,在對(duì)應(yīng)的消息處理成員函數(shù)中調(diào)用MFC函數(shù)傳遞函數(shù)傳遞數(shù)據(jù)。最簡(jiǎn)單的相關(guān)數(shù)據(jù)。最簡(jiǎn)單的相關(guān)MFC函數(shù)有:函數(shù)有:UpdateData()UpdateData() /更新成員變量,將控件上的數(shù)據(jù)傳遞給成員變量更新成員變量,將控件上的數(shù)據(jù)傳遞給成員變量UpdateData(FALSE)UpdateData(FALSE) /更新控件,將成員變量的值傳遞給控件更新控件,將成員變量的值傳遞給控件 522. 設(shè)計(jì)工具和設(shè)計(jì)方案設(shè)計(jì)工具和設(shè)計(jì)方案完成上述工作可使用完成上述工作可使用VC+提供的一個(gè)強(qiáng)大工具提供的一個(gè)強(qiáng)大工具M(jìn)FC Class WizardM

54、FC Class Wizard (類向?qū)В愊驅(qū)В┧饕怯脕砉芾眄?xiàng)目中的對(duì)象和消息及其消息處理函數(shù)它主要是用來管理項(xiàng)目中的對(duì)象和消息及其消息處理函數(shù)的,是的,是MFC編程必不可少的重要工具。編程必不可少的重要工具。53對(duì)于本實(shí)例,可設(shè)計(jì)如下成員變量和消息處理函數(shù):對(duì)于本實(shí)例,可設(shè)計(jì)如下成員變量和消息處理函數(shù):為編輯框?yàn)榫庉嬁騃DC_EDIT1定義一個(gè)定義一個(gè)double型的成員變量型的成員變量m_rm_r,用于接收用戶在編輯框中輸入的半徑值;,用于接收用戶在編輯框中輸入的半徑值;為靜態(tài)文本框?yàn)殪o態(tài)文本框IDC_STATIC4和和IDC_STATIC5分別定義分別定義一個(gè)一個(gè)Cstring型

55、成員變量型成員變量m_girthm_girth和和m_aream_area用于向靜用于向靜態(tài)文本框傳遞計(jì)算結(jié)果。態(tài)文本框傳遞計(jì)算結(jié)果。靜態(tài)文本框只能處理靜態(tài)文本框只能處理CstringCstring(字符串)型數(shù)據(jù)(字符串)型數(shù)據(jù)。注意:成員變量名的前綴注意:成員變量名的前綴“m_”m_”是是MFCMFC的風(fēng)格。的風(fēng)格。MFCMFC也有自也有自己的數(shù)據(jù)類型,不過與己的數(shù)據(jù)類型,不過與C+C+很相似,容易理解。很相似,容易理解。為為“確定確定”按鈕建立一個(gè)按鈕建立一個(gè)“單擊單擊”(BN_CLICKEDBN_CLICKED)消息處理函數(shù),用于)消息處理函數(shù),用于計(jì)算圓周長(zhǎng)和圓面積,并顯示計(jì)算結(jié)果。

56、計(jì)算圓周長(zhǎng)和圓面積,并顯示計(jì)算結(jié)果。為為“退出退出”按鈕建立一個(gè)按鈕建立一個(gè)“單擊單擊”消息處理函數(shù),用于消息處理函數(shù),用于結(jié)束程序的運(yùn)行。結(jié)束程序的運(yùn)行。建立一個(gè)對(duì)話框的初始化函數(shù),對(duì)成員變量建立一個(gè)對(duì)話框的初始化函數(shù),對(duì)成員變量m_r、m_girth、m_area進(jìn)行初始化。進(jìn)行初始化。542. 操作步驟操作步驟(1)添加成員變量添加成員變量打開打開“MFC Class Wizard”(類向?qū)В?duì)話框,如圖(類向?qū)В?duì)話框,如圖17所示。方法可以是:從所示。方法可以是:從VC6窗口的菜單欄上的窗口的菜單欄上的“查看查看”菜單中選擇菜單中選擇“建立類向?qū)Ы㈩愊驅(qū)А边x項(xiàng),或者用鼠標(biāo)右擊窗體,

57、選項(xiàng),或者用鼠標(biāo)右擊窗體,從彈出的快捷菜單中選擇從彈出的快捷菜單中選擇“建立類向?qū)Ы㈩愊驅(qū)А保蛘甙纯旖萱I,或者按快捷鍵Ctrl+W。 選擇選擇“Member Variables”(成員變量)選項(xiàng)卡。從(成員變量)選項(xiàng)卡。從“Control IDs”(控件(控件ID)列表框中,可以看到)列表框中,可以看到已經(jīng)建立的各控件對(duì)象的已經(jīng)建立的各控件對(duì)象的ID。 為編輯框添加成員變量:選擇為編輯框添加成員變量:選擇IDC_EDIT1,單擊,單擊右邊的右邊的“Add Variable”(添加變量)按鈕,彈出如圖(添加變量)按鈕,彈出如圖18所示的所示的“添加成員變量添加成員變量”對(duì)話框?qū)υ捒?55 在

58、第一個(gè)文本框(在第一個(gè)文本框(Member variable name)中輸入成)中輸入成員變量名,如員變量名,如m_r;在第二個(gè)下拉框(在第二個(gè)下拉框(Category)中選擇成員變量的種類,)中選擇成員變量的種類,Value;在第三個(gè)下拉框(在第三個(gè)下拉框(Variable Type)中選擇成員變量的數(shù))中選擇成員變量的數(shù)據(jù)類型,據(jù)類型,double。 單擊單擊OK按鈕?;氐桨粹o?;氐健癕ember Variables”選項(xiàng)卡,設(shè)置選項(xiàng)卡,設(shè)置變量變量m_r的取值范圍,如最小值為的取值范圍,如最小值為0,最大值為,最大值為1000.0。 用同樣的方法為靜態(tài)文本框用同樣的方法為靜態(tài)文本框ID

59、C_STATIC4和和IDC_STATIC5添加添加Cstring型成員變量型成員變量m_girth和和m_area,最大字符個(gè)數(shù)為,最大字符個(gè)數(shù)為10(圖(圖19)。56(2)編寫消息處理成員函數(shù)編寫消息處理成員函數(shù)主窗口的初始化函數(shù)主窗口的初始化函數(shù) 切換到類向?qū)У那袚Q到類向?qū)У摹癕essage Map”(消息映射)選項(xiàng)(消息映射)選項(xiàng)卡,如圖卡,如圖20所示。所示。 在在“Object IDs”(對(duì)象名)列表框中選擇主窗口的對(duì)(對(duì)象名)列表框中選擇主窗口的對(duì)象名象名CCase1DlgCCase1Dlg; 在在“Messages”(消息)列表框中選擇消息(消息)列表框中選擇消息WM_INI

60、TDIALOGWM_INITDIALOG;此時(shí)在此時(shí)在“Member functions”(成員函數(shù))(成員函數(shù))列表框中會(huì)自動(dòng)指出相應(yīng)的列表框中會(huì)自動(dòng)指出相應(yīng)的MFC已定義的已定義的虛函數(shù)虛函數(shù)OnInitDialogOnInitDialog。(主窗口對(duì)象是由。(主窗口對(duì)象是由MFC默認(rèn)生默認(rèn)生成的)成的)57 單擊單擊“Edit Code”(編輯代碼)按鈕,彈出(編輯代碼)按鈕,彈出Case1Dlg.cpp文件的編輯窗口,并顯示文件的編輯窗口,并顯示OnInitDialog()OnInitDialog()函數(shù)的代碼清單,找到注釋提示處:函數(shù)的代碼清單,找到注釋提示處: / TODO: Ad

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論