歡迎使用本書學(xué)習(xí)Visual_第1頁(yè)
歡迎使用本書學(xué)習(xí)Visual_第2頁(yè)
歡迎使用本書學(xué)習(xí)Visual_第3頁(yè)
歡迎使用本書學(xué)習(xí)Visual_第4頁(yè)
歡迎使用本書學(xué)習(xí)Visual_第5頁(yè)
已閱讀5頁(yè),還剩125頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、引 言歡迎使用本書學(xué)習(xí)Visual C+。本書是在讀者已經(jīng)閱讀過(guò)有關(guān)Visual C+入門書的基礎(chǔ)上,進(jìn)一步介紹Visual C+的內(nèi)容。本書的主要目的是介紹怎樣使用Visual C+來(lái)編寫專業(yè)性的程序。入門書當(dāng)然不錯(cuò),但顯然,它們所能提供的內(nèi)容相當(dāng)有限。擁有了像Visual C+這樣功能強(qiáng)大的編程工具包,卻不深入學(xué)習(xí)怎樣使用它,的確是太令人遺憾了,因?yàn)閂isual C+可以讓你感到趣味盎然,而要領(lǐng)會(huì)到其中的百分之九十,就應(yīng)該深入學(xué)習(xí)它。在本書中,作者將帶領(lǐng)你游歷Visual C+,并挖掘Visual C+的強(qiáng)大功能。本書覆蓋的主題從中等功能直到真正的高級(jí)功能:從使用Windows注冊(cè)表,到注

2、冊(cè)Windows程序的文件類型;從程序失去焦點(diǎn)時(shí)作出正確的反應(yīng),到確定程序是否已經(jīng)運(yùn)行等;本書應(yīng)有盡有。當(dāng)然,這并不是意味著通過(guò)本書來(lái)學(xué)習(xí)Visual C+困難重重或者要費(fèi)盡艱辛,至少,這個(gè)學(xué)習(xí)過(guò)程比你所想象的要簡(jiǎn)單些:因?yàn)槲覀儽M一切可能清晰地講解學(xué)習(xí)內(nèi)容,而且使之容易領(lǐng)會(huì);你們可以在自己的代碼中立即重用這里編寫的代碼。本書面向的讀者是程序員。本書內(nèi)容在本書開始部分,將快速回顧有關(guān)Visual C+的內(nèi)容,以便能夠更快速地進(jìn)行后續(xù)內(nèi)容的學(xué)習(xí),回顧Visual C+能夠?yàn)楸緯钠渌麅?nèi)容提供足夠的基礎(chǔ)知識(shí),并且,將注意提供必要的工具和資源。然后,將繼續(xù)學(xué)習(xí)Visual C+并開始使用它。下面是在進(jìn)

3、一步深入學(xué)習(xí)時(shí)本書中將要逐步介紹的一些主題: 編寫基于對(duì)話框的程序。 使MDI程序具有智能。 調(diào)整MDI的視圖。 實(shí)現(xiàn)文檔的滾動(dòng)。 在同一個(gè)MDI程序中使用多個(gè)視圖類型。 創(chuàng)建HTML視圖,Tree(樹狀)視圖,Rich Edit(多信息文本編輯)視圖和Form(窗體)視圖。 制作拆分窗口。 安裝全功能菜單。 使用工具欄和狀態(tài)欄。 實(shí)時(shí)改變菜單項(xiàng)。 創(chuàng)建位圖菜單項(xiàng)。 在工具欄中安裝組合框。 使用彈出式菜單和工具提示。 串行化用戶自己的對(duì)象。 改變視圖中的默認(rèn)光標(biāo)。 注冊(cè)文件的類型和擴(kuò)展名。 使用剪貼板進(jìn)行剪切、復(fù)制和粘貼。 打印、打印頁(yè)眉,以及打印編號(hào)頁(yè)面。 使用高級(jí)的屏幕圖形和屏幕捕獲。 寫

4、入位圖到剪貼板上。 在屏幕上的任意地方畫圖。 使用元文件實(shí)現(xiàn)簡(jiǎn)易的窗口刷新。 捕獲鼠標(biāo)。 理解內(nèi)存。 分配和使用虛擬內(nèi)存。 在運(yùn)行的進(jìn)程之間共享內(nèi)存。 掃描內(nèi)存以查找程序的位置。 創(chuàng)建Visual C+ Internet會(huì)話。 在Internet上使用HTTP、FTP和Ghopher協(xié)議。 編寫完整的Web瀏覽器。 使用多任務(wù)線程。 在后臺(tái)執(zhí)行任務(wù)。 在程序中協(xié)調(diào)多個(gè)線程。 創(chuàng)建動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Libraries,DLL)。 在DLL之間共享內(nèi)存。 使用Windows掛鉤(hooks)截取Windows事件。 編寫一個(gè)“熱鍵”程序彈出Windows的計(jì)算器。 使用日志掛鉤

5、記錄和回放按鍵。 理解COM。 創(chuàng)建OLE包容器。 創(chuàng)建OLE服務(wù)器。 編寫ActiveX控件。 在現(xiàn)有的Windows控件上把ActiveX控件分成子類(subclass)。 實(shí)現(xiàn)Windows編程中的專業(yè)技巧。 讀寫Windows注冊(cè)表。 使用程序的版本資源。除了上面所有這些主題(還有更多,只不過(guò)限于篇幅,這里不再詳細(xì)列出)之外,本書中還介紹了非常多有用的提示。這是提示在提示中,將介紹一些幕后信息,包括一些未正式說(shuō)明的Visual C+信息。你還應(yīng)該了解本書中使用的代碼箭頭;隨著進(jìn)一步開發(fā)示例程序,將逐步在例程中添加越來(lái)越多的代碼,直到該例程完成為止。每當(dāng)添加一行新的代碼時(shí),就用一個(gè)箭頭記

6、號(hào)來(lái)指示這行新代碼,使你能夠很容易地知道進(jìn)展?fàn)顩r;還要注意到那些垂直列上的點(diǎn),這表示還有更多的代碼,只不過(guò)限于篇幅而省略了。下面是一個(gè)帶有箭頭記號(hào)的代碼例子:#ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#include "resource.h" / main symbols#define DLLexport _declspec( dllexport ).本書是作者多年使用Visual C+經(jīng)驗(yàn)積累的結(jié)晶,書中著重介紹了該程序包中功能最為強(qiáng)大的部分。毫無(wú)疑問(wèn)

7、,Visual C+是當(dāng)今最主要的編程軟件包。如果要在Windows中完成某項(xiàng)功能,那么就可以在Visual C+中完成它。相信,在本書主題的選擇上,已經(jīng)做到非常公正了。本書讀者如果你已經(jīng)閱讀過(guò)關(guān)于Visual C+的入門書,或者已經(jīng)使用過(guò)Visual C+,并且想進(jìn)一步深入學(xué)習(xí)的話,那么,本書正適合于你。因?yàn)閂isual C+是一個(gè)巨大的軟件包,要確定從Visual C+中到底可以獲取什么功能是一件非常困難的事情。本書介紹Visual C+中可用的功能,并將介紹怎樣使用這些功能。如果你已經(jīng)閱讀過(guò)Visual C+的入門書,那么就已經(jīng)有一個(gè)很好的開端了,這個(gè)軟件包的其余部分(它是一個(gè)巨大的編程

8、工具包)就展現(xiàn)在你面前。但是,只有在你花上一年左右的時(shí)間來(lái)認(rèn)真學(xué)習(xí)Visual C+各種細(xì)節(jié)的情況下,才能從學(xué)習(xí)本書中真正受益。在開始學(xué)習(xí)本書時(shí),確實(shí)需要稍許熟悉Visual C+。如果在開始學(xué)習(xí)第1章(回顧Visual C+)時(shí)感到有些困難,那么在繼續(xù)學(xué)習(xí)本書的后續(xù)內(nèi)容之前,最好再看一些入門書。本書需求要有效地使用本書,只要擁有Visual C+ 98就可以了。盡管偶爾也使用其他程序,比如Microsoft Word, Microsoft Excel, Windows的寫字板,或者M(jìn)icrosoft Windows注冊(cè)表 Editor(注冊(cè)表編輯器),但是,使用這些程序只是為了示范的目的;真

9、正的事情均在Visual C+中進(jìn)行,Visual C+包括了需要用到的所有向?qū)А⒐ぞ吆途庉嬈???梢钥吹降囊恍┕ぞ吆拖驅(qū)ОˋppWizard(應(yīng)用程序向?qū)В?、ActiveX ControlWizard(ActiveX控件向?qū)В?、DLL AppWizard(DLL應(yīng)用程序向?qū)В?、OLE Test Container(OLE測(cè)試包容器)工具、Menu Editor(菜單編輯器)、Version Resource Editor(版本資源編輯器)、Dialog Editor(對(duì)話框編輯器)、Controls and Components Gallery(控件和組件庫(kù))等等,還有更多。所有這些都是Vi

10、sual C+的一部分。Visual C+是如此巨大的一個(gè)軟件包,以致于在本書中所需要的一切都囊括其中。本書的Web站點(diǎn)包括本書程序的代碼,有將近40個(gè)完整的Visual C+工程可以隨時(shí)運(yùn)行。只要把加載它們,編譯它們,就可以運(yùn)行了。該Web站點(diǎn)在你還應(yīng)該知道另外一個(gè)資源,那就是Microsoft Visual C+網(wǎng)頁(yè)。該網(wǎng)頁(yè)的URL是,在這里經(jīng)常了解到非常多的新聞,包括Visual C+的進(jìn)展情況和許多有特色的站點(diǎn)。你還可以到和這樣的Usenet組中查找資源。準(zhǔn)備開始現(xiàn)在,即將開始學(xué)習(xí)Visual C+的一些中高級(jí)功能,要真正開始Visual C+的學(xué)習(xí),需要有堅(jiān)固的基礎(chǔ)。第1章回顧了Vi

11、sual C+的基本知識(shí)。如果對(duì)掌握Visual C+的基本知識(shí)很有信心的話,就可以跳過(guò)第1章,而直接進(jìn)入第2章。第1章 回顧Visual C+基本知識(shí)歡迎使用本書學(xué)習(xí)Visual C+,本書以Visual C+入門書為基礎(chǔ)介紹更深層次的內(nèi)容,將盡可能深入介紹Visual C+;本書從Visual C+中等深度的內(nèi)容開始,一直介紹到那些真正高級(jí)的主題,從而使你能夠真正使用這個(gè)功能強(qiáng)大的編程軟件工具包。對(duì)于Windows高級(jí)程序員而言,Visual C+已經(jīng)成為當(dāng)今首要的編程軟件包,這一點(diǎn)是毋庸置疑的;從編程的深度、強(qiáng)度和范圍來(lái)看,沒(méi)有其他任何軟件包可以與Visual C+相提并論。如果用戶可以

12、通過(guò)Windows編程來(lái)實(shí)現(xiàn)某個(gè)功能,那么,就一定可以采用Visual C+編程來(lái)實(shí)現(xiàn)。Visual C+的功能強(qiáng)大經(jīng)常意味著程序員往往不知道該軟件包中到底有哪些功能可以使用,的確,要熟悉Visual C+編程各個(gè)不同的方面,并且能夠根據(jù)需要來(lái)找到合適的工具進(jìn)行編程是很困難的,這一點(diǎn)不足為奇。本書的目的正在于此,將引導(dǎo)你進(jìn)行Visual C+的學(xué)習(xí),涵蓋從中等到高級(jí)編程的內(nèi)容。本書從中等水平的內(nèi)容開始,比如MDI和菜單的細(xì)節(jié),怎樣從MFC(Microsoft Foundation Classes,Microsoft基礎(chǔ)類)庫(kù)中使用不同種類的窗口:拆分窗口,HTML窗口,編輯窗口等等;接下來(lái),將

13、把Visual C+所有的這些編程內(nèi)容綜合到一起構(gòu)成一個(gè)實(shí)際的程序。在此基礎(chǔ)上,將逐步學(xué)習(xí)Visual C+更為強(qiáng)大的功能:圖形處理,比如屏幕捕獲和使用元文件;32位內(nèi)存處理,比如進(jìn)程間通信;連接到Internet以及創(chuàng)建Web瀏覽器;使用多線程程序;使用Windows掛鉤;創(chuàng)建DLL;使用OLE和COM;使用Windows注冊(cè)表;創(chuàng)建ActiveX控件;以及更多的內(nèi)容。本章從回顧Visual C+的基本知識(shí)入手,來(lái)開始學(xué)習(xí)之旅;通過(guò)本章的回顧,可以為本書后續(xù)內(nèi)容的學(xué)習(xí)奠定基礎(chǔ),這種對(duì)基本知識(shí)的回顧顯然能夠加速對(duì)后續(xù)內(nèi)容的學(xué)習(xí)。首先從回顧Visual C+的概貌和它在眾多編程軟件包中的地位開始

14、。1.1 為什么需要Visual C+當(dāng)屏幕上首次出現(xiàn)Windows時(shí),只有Microsoft出品Windows的程序;所有這些Windows程序都是采用專有的Microsoft Windows庫(kù)來(lái)創(chuàng)建的,而這些專有的Windows庫(kù)對(duì)于非Microsoft的程序員來(lái)說(shuō)是不可使用的。來(lái)自程序員的壓力使得Microsoft出品了Windows SDK(Software Development Kit,軟件開發(fā)工具包),并且把這些庫(kù)的集合公布給公眾。在早先的那些日子里,許多程序員被Windows SDK嚇怕了,經(jīng)證明:創(chuàng)建Windows程序就意味著在C中使用功能相當(dāng)差勁的工具來(lái)創(chuàng)建長(zhǎng)長(zhǎng)的代碼構(gòu)成的

15、復(fù)雜程序,比如多頁(yè)使用臭名昭著的switch語(yǔ)句來(lái)編程,就是這樣的東西構(gòu)成了整個(gè)程序的脊梁;這樣的編程意味著要學(xué)會(huì)大約1000個(gè)新的庫(kù)實(shí)用例程,可以想象這種學(xué)習(xí)的艱難程度。正因?yàn)槿绱?,許多程序員對(duì)使用Windows SDK編程望而卻步。Windows編程起先是在C中完成的,這樣的Windows程序很長(zhǎng)。已經(jīng)證明,C+是為處理更長(zhǎng)的編程任務(wù)而特意開發(fā)的,因此,C+是Windows編程的自然語(yǔ)言。1.1.1 C+和Windows在C+中,程序員通過(guò)采用封裝處理來(lái)分割長(zhǎng)長(zhǎng)的編程任務(wù),這意味著可以把編程任務(wù)分割成為能夠輕松思考和處理的邏輯功能單元。通過(guò)封裝,就可以將程序代碼和數(shù)據(jù)結(jié)合到編程對(duì)象中,這樣

16、,程序就分割到這些半獨(dú)立的對(duì)象中了,而這些對(duì)象能夠按照特意定義的方式彼此進(jìn)行交互。這個(gè)封裝處理過(guò)程就跟一個(gè)人處理復(fù)雜任務(wù)的方式是完全一樣的。例如,驅(qū)車到某地時(shí),你就不會(huì)去考慮諸如汽油的流向、點(diǎn)火計(jì)時(shí)、能源驅(qū)動(dòng)等等這些細(xì)節(jié)問(wèn)題了,而只是進(jìn)入到一輛汽車中,然后朝目的地駕駛就行了。因?yàn)樗羞@些細(xì)節(jié)都會(huì)由汽車本身按照其特定的目標(biāo)自動(dòng)處理好,所以,用戶很容易就直接去考慮到最終對(duì)象也就是汽車了。同樣,C+允許程序員把編程任務(wù)分割成為函數(shù)/過(guò)程和數(shù)據(jù),從而把編程任務(wù)分割成為能夠以最好的方式解決問(wèn)題的邏輯單元。例如,一個(gè)叫做屏幕的對(duì)象可以包含能夠處理屏幕的所有函數(shù):其中有些函數(shù)對(duì)于程序的其他對(duì)象是公有的,而有

17、些對(duì)于對(duì)象而言是私有的,這些私有函數(shù)以某種特定的方式去處理對(duì)象內(nèi)部的數(shù)據(jù),這種方式隱藏了許多細(xì)節(jié),從而使得這個(gè)程序更容易處理。因?yàn)镃+能夠用來(lái)編寫大型的Windows程序,有些制造商就開始出品一些C+ Windows編程軟件包,而Microsoft及時(shí)推出了Visual C+。但是,Visual C+遠(yuǎn)不止是C+ for Windows,因?yàn)樗€包括了MFC庫(kù)。除了封裝之外,C+還支持繼承,利用繼承,程序員可以從一個(gè)類派生出另外一個(gè)類來(lái),而MFC充分利用了繼承的優(yōu)勢(shì)來(lái)為程序員提供了數(shù)百個(gè)基類,在這些基類的基礎(chǔ)上,用戶能夠創(chuàng)建自己的類。Microsoft已經(jīng)提供了數(shù)千行預(yù)先寫好的代碼,可以通過(guò)繼

18、承來(lái)使用這些代碼。例如,如果想要?jiǎng)?chuàng)建一個(gè)拆分窗口(一個(gè)拆分窗口可分割成為兩個(gè)獨(dú)立滾動(dòng)的窗格),只需要使用CsplitterWnd類作為程序員自己窗口類的基類,這樣就繼承了這個(gè)類的所有的功能。剩下來(lái)要做的所有工作就是按照自己需要的方式來(lái)修改這個(gè)新類就可以了。Microsoft已經(jīng)為完成了許多艱難的工作,這幸運(yùn),因?yàn)樵赪indows編程中確實(shí)存在著許多艱難的工作。有了Visual C+后,Windows編程就已經(jīng)真正開始了,因?yàn)槌绦騿T已經(jīng)擁有了一個(gè)切實(shí)可用的編程工具了。很快,Visual C+已經(jīng)發(fā)展成為一個(gè)廣泛的編程環(huán)境,擁有豐富的工具和各種各樣的功能。本書將介紹Visual C+必須提供的內(nèi)容

19、?,F(xiàn)在,為了開始本書的學(xué)習(xí)之旅,來(lái)回顧Visual C+編程的基本知識(shí),以確保為本書后續(xù)部分內(nèi)容的學(xué)習(xí)奠定堅(jiān)實(shí)的基礎(chǔ)。本章以創(chuàng)建兩個(gè)示例程序作為開始:一個(gè)基于對(duì)話框窗口,另外一個(gè)基于SDI(Single Document Interface,單文檔界面)。在下一章中,將通過(guò)學(xué)習(xí)MDI(Multiple Document Interface,多文檔界面)來(lái)擴(kuò)充視野?,F(xiàn)在,就讓開始第一個(gè)示例程序:HelloDlg。1.2 第一個(gè)示例:HelloDlg第一個(gè)Visual C+程序?qū)⑹恰盎趯?duì)話框的”,這意味著程序?qū)⑹褂靡粋€(gè)對(duì)話框作為其主窗口。這是Visual C+程序中最簡(jiǎn)單的通用類型,并且,因?yàn)樗?/p>

20、很容易處理,所以首先來(lái)看看它。第一個(gè)程序Hellodlg展示給用戶一個(gè)文本框(也叫編輯框或編輯控件)和顯示字幕“Click Me”的按鈕。 - | | |-| | | | | | | | - - | | | | | Click Me | | | - - | | | | | | | -當(dāng)用戶單擊這個(gè)按鈕時(shí),程序就在文本框中顯示一句簡(jiǎn)單的問(wèn)候消息:“Hello from Visual C+”: - | | |-| | | | | | | | - - | | | Hello from Visual C+ | | Click Me | | | - - | | | | | | | -通過(guò)編寫這個(gè)程序,將

21、創(chuàng)建第一個(gè)Visual C+示例程序,另外還將回顧Visual C+的IDE(Integrated Development Environment,集成開發(fā)環(huán)境)和ClassWizard(類向?qū)В┕ぞ摺?創(chuàng)建HelloDlg現(xiàn)在,開始使用Visual C+來(lái)創(chuàng)建HelloDlg。打開Visual C+,將顯示如圖1-1所示的開發(fā)環(huán)境;選擇File(文件)菜單中的New(新建)選項(xiàng)就可以打開New對(duì)話框,如圖1-2所示。圖1-1 Visual C+開發(fā)環(huán)境圖1-2 創(chuàng)建一個(gè)新的Visual C+工程Visual C+程序是當(dāng)作工程來(lái)處理的。為了創(chuàng)建第一個(gè)工程HelloDlg,請(qǐng)?jiān)赑roject(

22、選項(xiàng)卡)中選中MFC AppWizard(exe)選項(xiàng),如圖1-2所示,在Project name(工程名)框中輸入HelloDlg作為工程的名稱,另外還輸入工程存放的位置(本書將把工程的名稱作為文件夾的名稱存放在c:avc文件夾中),然后單擊OK(確定)按鈕就可以關(guān)閉New對(duì)話框了。單擊OK按鈕就打開了MFC AppWizard,如圖1-3所示;AppWizard是Visual C+的另外一個(gè)非常有用的工具,它能夠替編寫工程的基本框架,通常這樣都能夠節(jié)省大量的時(shí)間。圖1-3 Visual C+的AppWizard工具單擊AppWizard中標(biāo)有Dialog based(基于對(duì)話)的選項(xiàng)按鈕,

23、如圖1-3所示,然后單擊Finish(完成)按鈕就創(chuàng)建了基于對(duì)話框的HelloDlg工程。最后,單擊New Project Information(新工程信息)框中的OK按鈕,Visual C+就為創(chuàng)建了HelloDlg工程。這時(shí),Visual C+打開了HelloDlg工程,如圖1-4所示,可以看到一個(gè)對(duì)話框窗口,工程就位于其間。圖1-4 HelloDlg工程在圖1-4中可以看到,Visual C+已經(jīng)在對(duì)話框上的一個(gè)標(biāo)簽中放置了TODO: Place dialog controls here(待做事項(xiàng):在此放置對(duì)話控件)的消息,而要做的第一件事情就是刪除這個(gè)標(biāo)簽。單擊該標(biāo)簽選中它,在標(biāo)簽周

24、圍就出現(xiàn)一個(gè)由點(diǎn)組成的邊框(表示該對(duì)象當(dāng)前被選中),而調(diào)整尺寸的控制柄(即邊框上的那些小方塊)能夠讓程序員把該標(biāo)簽定位或拉伸到需要的位置。按下Del鍵刪除該標(biāo)簽?,F(xiàn)在,準(zhǔn)備在這個(gè)對(duì)話框窗口添加兩個(gè)必須的新控件:一個(gè)文本框和一個(gè)命令按鈕。使用工具箱來(lái)添加控件,工具箱出現(xiàn)在圖1-4中的右邊。如果控件工具箱沒(méi)有出現(xiàn)在Visual C+中此時(shí)只需要選擇Tools(工具)菜單中的Customize(自定義)選項(xiàng),然后單擊Toolsbars(工具欄)選項(xiàng)卡中的Controls(控件)選項(xiàng)就可以了?,F(xiàn)在單擊工具箱中的文本框工具(圖1-4中右邊列的第二個(gè)工具),就添加了一個(gè)文本框,如圖1-5所示;然后,使用按

25、鈕工具(工具箱上右邊列的第三個(gè)工具)添加一個(gè)命令按鈕,如圖1-5所示。圖1-5 添加控件到HelloDlg工程中既然已經(jīng)向程序中添加了一個(gè)文本框,那么就需要使代碼能夠訪問(wèn)它,使用Visual C+ ClassWizard來(lái)完成這個(gè)工作?,F(xiàn)在右擊該文本框,然后選擇ClassWizard選項(xiàng),如圖1-6所示。圖1-6 Visual C+的ClassWizard工具為了使程序的其余部分都能夠訪問(wèn)該文本框,使用ClassWizard把該文本框中的文本同程序中的一個(gè)變量連接起來(lái)?,F(xiàn)在,選中ClassWizard中該文本框的入口:IDC_EDIT1,如圖1-6中所示,然后單擊Add Variable(添加

26、變量)按鈕;這就打開了Add Member Variable(添加成員變量)對(duì)話框,在Member variable name(成員變量名)框中輸入m_text,變量類型就采用默認(rèn)值Cstring (Visual C+的字符串類,用來(lái)處理文本字符串),然后單擊OK;這樣,就在程序中把一個(gè)新變量m_text和文本框中的文本關(guān)聯(lián)起來(lái)了。單擊OK關(guān)閉ClassWizard。接下來(lái),將把命令按鈕與代碼連接,使得當(dāng)用戶單擊該按鈕時(shí)程序能夠顯示問(wèn)候消息。右擊該按鈕來(lái)打開Push Button Properties(按鈕屬性)窗口,然后選擇General(常規(guī))選項(xiàng)卡,設(shè)置按鈕的標(biāo)題為“Click Me”,

27、然后關(guān)閉Push Button Properties窗口,雙擊該按鈕來(lái)打開Add Member Function(添加成員函數(shù))對(duì)話框,單擊該框上的OK按鈕來(lái)接受該按鈕單擊事件的默認(rèn)函數(shù)OnButton1;這樣就在一個(gè)新窗口中打開了新函數(shù)OnButton1()的程序代碼。void CHelloDlgDlg:OnButton1() / TODO: Add your control notification handler code here.這里,Visual C+已經(jīng)以C+中一行注釋的格式來(lái)提示;將用代碼來(lái)取代這行注釋。在上面打開的代碼窗口中選中TODO行,然后用下面的兩行代碼替代它:void

28、 CHelloDlgDlg:OnButton1() m_text= "Hello from Visual C+ " UpdateData(false);在這個(gè)例子中,變量m_text的值設(shè)置為字符串"Hello from Visual C+",但是它本身并不會(huì)在那個(gè)文本框中顯示該文本;相反,必須調(diào)用帶有一個(gè)FALSE值的UpdateData()函數(shù),用當(dāng)前m_text中的文本去更新文本框,這就是剛才所做的工作。使用UpdateData()使用FALSE值調(diào)用UpdateData()將在文本框中顯示當(dāng)前m_text中的文本;而用TRUE值調(diào)用UpdateD

29、ata()將把當(dāng)前顯示在文本框中的文本寫入到m_text中。當(dāng)程序員在屏幕上顯示一個(gè)對(duì)話框(但是,不是像HelloDlg這樣基于對(duì)話框的程序)時(shí),就并不需要使用UpdateData(),因?yàn)闀?huì)自動(dòng)調(diào)用該函數(shù)?,F(xiàn)在就可以準(zhǔn)備運(yùn)行程序了。要運(yùn)行程序,選擇Visual C+ Build(編譯)菜單中的Build HelloDlg.exe選項(xiàng),就可以創(chuàng)建HelloDlg.exe;選擇Build菜單中的Execute HelloDlg.exe選項(xiàng),就可以運(yùn)行該程序了,運(yùn)行結(jié)果如圖1-7所示。圖1-7 運(yùn)行HelloDlg程序當(dāng)用戶單擊HelloDlg程序中的Click Me按鈕時(shí),程序就在文本框中顯示“

30、Hello from Visual C+”消息,如圖1-7所示。第一個(gè)程序成功了,而且,也已經(jīng)回顧了怎樣創(chuàng)建基于對(duì)話框的程序的知識(shí)。第一個(gè)程序的代碼列在程序清單1-1中。程序清單1-1 HelloDlgDlg.h和HelloDlgDlg.cpp/ HelloDlgDlg.h : header file/#if !defined(AFX_HELLODLGDLG_H_701B1AC9_9BB7_11D1_887F_D42B07C10710_INCLUDED_)#define AFX_HELLODLGDLG_H_701B1AC9_9BB7_11D1_887F_D42B07C10710_INCLUDE

31、D_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000/ CHelloDlgDlg dialogclass CHelloDlgDlg : public CDialog/ Constructionpublic:CHelloDlgDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CHelloDlgDlg)enum IDD = IDD_HELLODLG_DIALOG ;CStringm_text;/AFX_DATA/ ClassWizar

32、d generated virtual function overrides/AFX_VIRTUAL(CHelloDlgDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CHelloDlgDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(

33、UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButton1();/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_HELLODLGDLG_H_701B1AC9_9BB

34、7_11D1_887F_D42B07C10710_INCLUDED_)/ HelloDlgDlg.cpp : implementation file/#include "stdafx.h"#include "HelloDlg.h"#include "HelloDlgDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass C

35、AboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/A

36、FX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAbo

37、utDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CHelloDlgDlg dialogCHelloDlgDlg:CHelloDlgDlg(CWnd* pParent /*=NULL*/): CDialog(CHelloDlgDlg:IDD, pParent)/AFX_DATA_INIT(CHelloDlgDlg)m_text = _T("");/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win

38、32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CHelloDlgDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CHelloDlgDlg)DDX_Text(pDX, IDC_EDIT1, m_text);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CHelloDlgDlg, CDialog)/AFX_MSG_MAP(CHelloDlgDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT

39、()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CHelloDlgDlg message handlersBOOL CHelloDlgDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX &

40、; 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAbout

41、Menu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to

42、a controlvoid CHelloDlgDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using t

43、he document/view model,/ this is automatically done for you by the framework.void CHelloDlgDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON)

44、;int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/

45、 the minimized window.HCURSOR CHelloDlgDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CHelloDlgDlg:OnButton1() m_text = "Hello from Visual C+"UpdateData(false);這樣就完成了第一個(gè)程序,它概要描述了在Visual C+中普通程序的開發(fā)過(guò)程。使用Visual C+ AppWizard工具來(lái)為程序員創(chuàng)建一個(gè)基本框架程序,然后使用一些工具,比如ClassWizard和Dialog Editor來(lái)自定義程序代碼。在本書

46、完整的學(xué)習(xí)過(guò)程中,將對(duì)這個(gè)過(guò)程越來(lái)越熟悉。接下來(lái),將創(chuàng)建一個(gè)SDI程序:KeysSDI,該程序?qū)@示用戶在鍵盤上輸入的那些鍵。這個(gè)程序的功能比HelloDlg要強(qiáng)大得多。在KeysSDI中,將看到一個(gè)標(biāo)準(zhǔn)的Visual C+程序的四個(gè)主要部分,以及學(xué)習(xí)怎樣接收鍵盤的輸入,在一個(gè)Visual C+程序中把數(shù)據(jù)存放到什么地方,怎樣在不使用文本框控件的情況下顯示鍵盤輸入的內(nèi)容等知識(shí)。1.3 創(chuàng)建KehsSDI工程與HelloDlg程序比較起來(lái),KeysSDI程序更接近于現(xiàn)實(shí)世界的實(shí)際情況。這個(gè)程序?qū)⒆x入用戶鍵入的鍵,并存儲(chǔ)它們,然后在程序的單個(gè)窗口中顯示它們。使用Visual C+ AppWizar

47、d來(lái)創(chuàng)建一個(gè)新的EXE工程,名為KeysSDI,在AppWizard的第一個(gè)界面中選擇Single Document(單文檔)選項(xiàng),然后單擊Finish按鈕。這樣就創(chuàng)建了一個(gè)名為KeysSDI的單個(gè)窗口的新程序,Visual C+還創(chuàng)建了一個(gè)Readme.text文件,概要地描述了工程的各個(gè)部分,下面是Readme.txt文件的內(nèi)容:= MICROSOFT FOUNDATION CLASS LIBRARY : KeysSDI=AppWizard has created this KeysSDI application for you. This applicationnot only demo

48、nstrates the basics of using the Microsoft Foundation classesbut is also a starting point for writing your application.This file contains a summary of what you will find in each of the files thatmake up your KeysSDI application.KeysSDI.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the projec

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論