基礎教程初學者演示_第1頁
基礎教程初學者演示_第2頁
基礎教程初學者演示_第3頁
基礎教程初學者演示_第4頁
基礎教程初學者演示_第5頁
已閱讀5頁,還剩436頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

(優(yōu)選)基礎教程初學者目前一頁\總數(shù)四百四十一頁\編于三點第1章VisualC++集成開發(fā)環(huán)境VisualC++是一個功能強大的可視化應用程序開發(fā)工具。其憑借強大功能,受大了廣大程序員的歡迎。當今流行的VisualC++的開發(fā)工具是6.0版本。下面來介紹VisualC++6.0的一些基本情況。目前二頁\總數(shù)四百四十一頁\編于三點1.1VisualC++6.0概述VisualC++是一種C/C++語言的集成開發(fā)環(huán)境(IDE)。當最初還處于DOS時代的Borland公司推出了TurboPascal和TurboC,讓程序員感受到了把編譯器和編輯器集成在一起使用時的方便。Microsoft公司也看到了這一點,于是,兩個公司開始合作,推出了QuickC和Microsoft

C/C++等多個DOS版本的C/C++集成開發(fā)環(huán)境。隨著Windows的不斷成熟,于是Microsoft開始開發(fā)Windows下的VisualC++。經(jīng)過多次版本的修訂與更新,現(xiàn)在大多數(shù)程序員使用的是VisualC++6.0版本。VisualC++是一個可視化的C++的集成開發(fā)環(huán)境。在使用VisualC++時,開發(fā)人員可以通過鼠標拖動方便地設計程序的界面,相應的代碼系統(tǒng)會自動生成。MFC(MicrosoftFundermentalClasses)是微軟提供的VisualC++可以調用的類庫,其中封裝了開發(fā)人員常用的類。使用MFC可以大大提高編程人員的工作效率。目前三頁\總數(shù)四百四十一頁\編于三點1.2VisualC++6.0界面介紹安裝好VisualC++開發(fā)環(huán)境后,桌面上并沒有其快捷圖標,需讀者自己修改。選擇“開始”菜單,從所有程序中,找到MicrosoftVisualStudio6.0級聯(lián)菜單下的MicrosoftVisualC++菜單項。選擇該菜單項,并將其拖動到桌面上,則在桌面上創(chuàng)建了MicrosoftVisualStudio的快捷圖標。雙擊快捷圖標,即可啟動VisualC++6.0集成開發(fā)環(huán)境。每次運行VisualC++6.0時,會彈出一個【Tipoftheday】對話框,如下圖所示。目前四頁\總數(shù)四百四十一頁\編于三點1.2VisualC++6.0界面介紹技巧:【Tipoftheday】對話框中介紹了很多關于開發(fā)環(huán)境的使用方法以及編程方面的小技巧。如果想在下次啟動VisualC++6.0時不再顯示該提示對話框,可以選擇下一次啟動時不再顯示它。目前五頁\總數(shù)四百四十一頁\編于三點1.2VisualC++6.0界面介紹為了便于說明,首先創(chuàng)建一個IDE的MFC項目(具體創(chuàng)建步驟,后面會詳細介紹),如下圖所示。目前六頁\總數(shù)四百四十一頁\編于三點1.2VisualC++6.0界面介紹從上圖中可以看出,VisualC++的界面被分成了7部分。上面依次標題欄、菜單欄和工具欄。中間左側部分是工作區(qū)窗口,右側部分是編輯區(qū)。最下方是輸出窗口和狀態(tài)欄。目前七頁\總數(shù)四百四十一頁\編于三點1.2.1工作區(qū)窗口和輸出窗口工作區(qū)窗口和輸出窗口是在一個程序編譯時使用最多的??渴酱翱?。工作區(qū)窗口中顯示了當前程序中的所有類、資源和文件信息。工作區(qū)窗口分為3個部分:ClassView(類視圖)、ResourceView(資源視圖)和FileView(文件視圖)。ClassView:顯示當前工作區(qū)中所有工程定義的C++類。雙擊某個類名,VisualC++會自動打開這個類的文件,并將編輯區(qū)定位到該類的定義處。雙擊類中的成員函數(shù)和變量,編輯區(qū)則定位到該成員函數(shù)或變量的定義處。目前八頁\總數(shù)四百四十一頁\編于三點1.2.1工作區(qū)窗口和輸出窗口ResourceView:顯示當前工作區(qū)中所有的資源。這些資源包括快捷鍵、對話框、圖標、菜單、字符條編輯器、工具欄和版本信息。雙擊其中的ID號,會顯示相應的資源信息。FileView:顯示屬于當前工程的所有文件,包括C/C++源文件、頭文件、資源文件等。輸出窗口與工作區(qū)一樣,分為多個選擇卡。其中最常用的選項卡被放在了最外面,分別為Build、Debug、FindinFiles1和FindinFiles2。目前九頁\總數(shù)四百四十一頁\編于三點1.2.1工作區(qū)窗口和輸出窗口Build:Build顯示工程在創(chuàng)建中,經(jīng)過的每一個步驟及相應信息。如果出現(xiàn)編譯鏈接錯誤,那么出現(xiàn)錯誤的文件、原因、行號等內容會顯示在Build中。雙擊該錯誤信息行,編輯區(qū)則定位在該錯誤出現(xiàn)的行。Debug:工程通過編譯后,運行調試版本時,Debug選項卡中會顯示具體的調試信息。目前十頁\總數(shù)四百四十一頁\編于三點1.2.1工作區(qū)窗口和輸出窗口FindinFiles1和FindinFiles2:兩個選項卡的作用相同,用于顯示從多個文件中查找字符串的結果。當用戶想要查看某個函數(shù)或變量出現(xiàn)在哪些文件中,單擊【Edit】|【FindinFiles】命令,彈出【FindinFiles】對話框,如下圖所示。在【FindinFiles】對話框中的【Findwhat】后的編輯框中,輸入想要查找的內容,單擊【Find】按鈕即可。查找到的內容會輸出到FindinFiles選項卡中。目前十一頁\總數(shù)四百四十一頁\編于三點1.2.2菜單欄和工具欄菜單欄位于集成開發(fā)環(huán)境的頂部。菜單欄由9個菜單項組成:File(文件)、Edit(編輯)、View(視圖)、Insert(插入)、Project(工程)、Build(編譯)、Tools(工具)、Windows(窗口)、Help(幫助)。每一個菜單項都有一個下拉式菜單,其中的菜單項用于完成特定的功能。工具欄位于菜單欄的下面。工具欄可以稱作是美化的菜單欄,其由許多按鈕構成。其中的按鈕用于完成特定的功能。工具欄可以任意拖動,也可以成為一個浮動窗口。目前十二頁\總數(shù)四百四十一頁\編于三點1.2.3編輯區(qū)在VisualC++中,編寫應用程序代碼的位置就是編輯區(qū)。該編輯區(qū)的功能十分強大,智能化程度也非常高。在編輯區(qū)內,除了能編寫C/C++語言外,還能編寫SQL、HTML和VBScript等其他編程語言。如下圖所示。目前十三頁\總數(shù)四百四十一頁\編于三點1.2.4聯(lián)機幫助VisualC++6.0不像其他集成開發(fā)環(huán)境一樣把幫助系統(tǒng)集成在開發(fā)環(huán)境內部,而是提供了一個專門為VisualC++設計的MSDN類庫。MSDN雖然是一個獨立的幫助系統(tǒng),但卻能很好地和VisualC++6.0集成在一起。MSDN的使用方式有以下幾種:單擊【Help】|【Contents】命令;單擊【Help】|【Search】命令;單擊【Help】|【Index】命令;按下【F2】鍵。通過上述幾種命令方式,即可運行MSDN。目前十四頁\總數(shù)四百四十一頁\編于三點

1.2.4VisualC++中的文件擴展名

打開程序HelloWorld所在的文件夾,看到該文件夾自動生成了許多擴展名不同的文件,如下圖所示。目前十五頁\總數(shù)四百四十一頁\編于三點

1.2.6VisualC++中的文件擴展名

了解這些不同的擴展名文件,對于理解VisualC++6.0如何組織和管理項目文件是很有必要的。有關這些文件擴展名及其說明,如下表所示。目前十六頁\總數(shù)四百四十一頁\編于三點第2章MFC與應用程序框架在VisualC++集成開發(fā)環(huán)境下,使用微軟基礎類庫MFC,可以開發(fā)出功能強大的Windows應用程序。另外,通過MFCAppWizard自動生成的MFC應用程序框架,還可以很方便地開發(fā)自己想要實現(xiàn)的功能。本章將先介紹有關MFC的基礎知識,然后對MFC應用程序框架作具體介紹。目前十七頁\總數(shù)四百四十一頁\編于三點2.1微軟基礎類庫MFCMFC是一種重要的編程方法,它是微軟公司的特定的應用程序包裝接口。本節(jié)將講解MFC概述及其類庫結構。目前十八頁\總數(shù)四百四十一頁\編于三點2.1.1MFC概述MFC的英文全稱是MicrosoftFoundationClasses,即微軟的基礎類庫。MFC的本質就是一個包含了許多微軟公司已經(jīng)定義好的對象的類庫。雖然開發(fā)人員要編寫的程序在功能上各有不同,但是從結構上講,都可以化分為對用戶界面的設計、對文件的操作、對數(shù)據(jù)庫的訪問及對多媒體的使用等一些最主要的方面。這一點正是微軟提出MFC類庫最重要的原因。在MFC類庫中,大約有200個類。在進行程序設計時,只需簡單地調用已有的類及類中的方法即可。另外,還可以利用“繼承”方法從已有類中派生出自己想要的類。這時,派生出來的類不但擁有父類中的方法和屬性,還可以根據(jù)自己的需求,自定義一些特殊的屬性和方法,使得派生類功能更加強大。MFC有較好的移植性,可應用于眾多平臺。目前十九頁\總數(shù)四百四十一頁\編于三點2.1.2MFC類庫結構MFC中類可劃分為基類、應用程序結構類、窗口類、OLE類、數(shù)據(jù)庫類等10大類,而且在其中的一些大類的基礎上又派生出許多子類。MFC的類庫結構的層次圖如下圖所示。目前二十頁\總數(shù)四百四十一頁\編于三點2.1.2MFC類庫結構從上圖中可以看出,CObject是一個原始基類。絕大多數(shù)MFC類的最終基類都是CObject。原始基類下面,主要包括以下幾種類:MFC應用程序結構類,窗口、對話框和控件類,輸出(設備文本)和繪圖類,簡單數(shù)據(jù)類型類,數(shù)組、列表和映射類,文件和數(shù)據(jù)庫類,Internet和網(wǎng)絡類,OLE類以及高度和異常類。MFC的應用程序結構類分為CWinApp和CWinThread。使用MFC創(chuàng)建的每一個應用程序都包含一個由類CWinApp派生而來的應用程序對象。該對象是一個全局對象。應用程序對象主要用于處理應用程序的初始化,同時也處理應用程序事件的消息循環(huán)。CCmdTarget和CCmdUI為MFC中常用的有關發(fā)送命令的類。CDocument為MFC中常用的應用程序文檔的基類。CDocTemplate為文檔模版類,通常是應用程序的單文檔或多文檔的基類。CView類是常用的視圖類。目前二十一頁\總數(shù)四百四十一頁\編于三點2.2MFC應用程序框架分析在前面介紹過如何創(chuàng)建一個基于單文檔的應用程序。對于如何選擇性地創(chuàng)建基于多文檔或是基于對話框的應用程序,將會在后續(xù)章節(jié)詳細介紹。本節(jié)主要對MFC應用程序框進行簡單的概括,使讀者了解MFC應用程序框架的結構與工作機制。目前二十二頁\總數(shù)四百四十一頁\編于三點2.2.1入口函數(shù)入口函數(shù)就是指一個程序的入口點。WinMain函數(shù)是Windows程序的入口函數(shù)。為了便于講解,首先要創(chuàng)建一個MFC應用程序,程序名命名為sample0201。具體創(chuàng)建步驟不再詳細介紹。從創(chuàng)建好的sample0201程序中,并不能找到WinMain函數(shù)。這是因為典型Windows程序的大部分初始化工作都是標準化的,因此把WinMain函數(shù)隱藏在應用程序的框架中。當一個程序編譯時,會自動將該函數(shù)鏈接到程序中。在計算機中找到VisualC++的安裝目錄,筆者安裝在F盤,則按照下面這個路徑依次打開文件夾,“F:\ProgramFiles\MicrosoftVisualStudio\VC98\MFC\SRC”。打開后,會發(fā)現(xiàn)一個源文件“WinMain.cpp”。該文件中則定義了MFC應用程序的入口函數(shù)AfxWinMain。文件的源代碼如下:目前二十三頁\總數(shù)四百四十一頁\編于三點2.2.1入口函數(shù)…………目前二十四頁\總數(shù)四百四十一頁\編于三點2.2.1入口函數(shù)當一個應用程序啟動時,會自動調用應用程序框架內部的AfxWinMain函數(shù)。根據(jù)其前綴Afx就知道WinMain是一個全局的MFC函數(shù)。從上述代碼中可以看出,WinMain函數(shù)會查找該應用程序的一個全局構造對象。該對象是由CWinApp的派生類創(chuàng)建,因此有程序啟動時,它就被創(chuàng)建好了。然后WinMain對該應用程序進行初始化,在此過程調用的是該程序全局構造對象的InitApplication()和InitInstance()函數(shù)。完成初始化后,WinMain調用Run()函數(shù),運行應用程序的消息循環(huán)。最后結束應用程序時,WinMain調用AfxWinTerm()函數(shù),做一些清理工作。目前二十五頁\總數(shù)四百四十一頁\編于三點2.2.2InitInstance()函數(shù)InitInstance()函數(shù)的作用是初始化程序。每次啟動一個應用程序時,Winmain函數(shù)會自動調用InitInstance()函數(shù)。打開創(chuàng)建的程序sample0201,在該程序的CSample0201App類中,可以看到該程序對InitInstance()函數(shù)進行了重載。該重載代碼如下:…………目前二十六頁\總數(shù)四百四十一頁\編于三點2.2.2InitInstance()函數(shù)從上述代碼中可以看出,在ShowWindow和UpdateWindos之前,程序要做兩個動作,一個是注冊窗口類,另一個是構建窗口類。InitInstance()函數(shù)規(guī)定了生成的應用程序是基于單文檔的、基于多文檔的或是基于對話框的。因此在CWinApp中必須重載InitInstance()函數(shù)。目前二十七頁\總數(shù)四百四十一頁\編于三點2.2.3應用類Run()函數(shù)與查找WinMain函數(shù)類似,在VisualC++的安裝目錄下,按照下面這個路徑依次打開文件夾,“F:\ProgramFiles\MicrosoftVisualStudio\VC98\MFC\SRC”。打開后,會發(fā)現(xiàn)一個源文件“THRDCORE.CPP”。該文件中定義了應用類Run()函數(shù),源代碼如下:…………目前二十八頁\總數(shù)四百四十一頁\編于三點2.2.3應用類Run()函數(shù)從上述代碼中可以看出,如果消息隊列沒有消息,則調用OnIdle()函數(shù),并遞增iIdleCount計數(shù)標志,該計數(shù)標志表示在兩次消息處理過程只共調用了多少次OnIdle()函數(shù)。bIdle是消息隊列空閑的標志,當消息隊列有消息時,則調用PumpMessage()函數(shù),進行消息翻譯和消息派發(fā)。其中PreTranslateMessage(&m_msgCur)對消息進行翻譯,DispatchMessage(&m_msgCur)把消息m_madCur發(fā)送到應用程序主框架窗口。注意:在應用程序sample0201的CSample0201App的Run函數(shù)繼承了CWinApp的虛函數(shù)Run()。而CWinApp的Run()函數(shù)調用了CWinThread的Run()函數(shù)。目前二十九頁\總數(shù)四百四十一頁\編于三點2.2.4消息映射表當MFC應用程序類中的Run()函數(shù)把消息交給主窗口的窗口函數(shù)后,窗口函數(shù)將如何處理這些消息。在Win32程序中,處理窗口消息的窗口函數(shù)WinProc()函數(shù)通過switch~case結構對消息進行判斷并分別進行處理。但在MFC應用程序的主窗口類對消息的處理并沒有沿襲Win32程序的做法。MFC應用程序中進行消息處理,是為每一個要處理的消息添加一個消息處理函數(shù)。這種定義消息和消息處理函數(shù)的對照表,稱為消息映射表。MFC的消息映射表采用映射宏的方式,將消息和消息處理函數(shù)一一對應起來。以應用程序的主框架為例,在類的聲明文件MainFrame.h中添加聲明消息映射的宏。目前三十頁\總數(shù)四百四十一頁\編于三點2.2.4消息映射表在類的實現(xiàn)文件MainFrame.cpp中,添加消息映射宏的定義語句。其中,ID_MY_MESSAGE為自定義的菜單項命令ID號,OnMymessage()為響應菜單命令的成員函數(shù)。目前三十一頁\總數(shù)四百四十一頁\編于三點2.2.5MFC消息分類MFC應用程序對消息的描述一般分為3類:窗口消息、命令消息和控件消息。目前三十二頁\總數(shù)四百四十一頁\編于三點1.窗口消息窗口消息一般與創(chuàng)建窗口、繪制窗口、移動窗口和銷毀窗口等操作有關。另外,當使用鼠標、鍵盤等與操作窗口有關的動作時,也會產(chǎn)生窗口消息。窗口消息的一般的表示形式是以“WM_”開頭的消息。常見的窗口消息如下所述。WM_CHAR:使用鍵盤時產(chǎn)生的消息。其對應的消息處理函數(shù)為OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)。WM_CREATE:創(chuàng)建窗口時產(chǎn)生的消息,用于窗口的初始化。其對應的消息處理函數(shù)為OnCreate(LPCREATESTRUCTlpCreateStruct)。WM_PAINT:通知窗口對自身進行繪制。一般在移動窗口、改變窗口大小、繪制圖形時使用。其對應的消息處理函數(shù)為OnPaint()。目前三十三頁\總數(shù)四百四十一頁\編于三點1.窗口消息WM_LBUTTONDOWM:使用鼠標左鍵時產(chǎn)生的消息。通知窗口單擊了左鍵。其對應的消息處理函數(shù)為OnLButtonDown(UINTnFlags,CPointpoint)。WM_MOUSEMOVE:移動鼠標時產(chǎn)生的消息。其對應的消息處理函數(shù)為OnMouseMove(UINTnFlags,CPointpoint)。WM_CLOSE:關閉窗口時產(chǎn)生的消息。其對應的消息處理函數(shù)為OnClose()。WM_DESTROY:銷毀窗口時產(chǎn)生的消息。其對應的消息處理函數(shù)為OnDestroy()。目前三十四頁\總數(shù)四百四十一頁\編于三點2.命令消息命令消息一般與處理用戶的某個請求或執(zhí)行用戶的某個命令有關。一般通過選擇菜單項、單擊工具欄按鈕和按加速鍵產(chǎn)生命令消息。在MFC應用程序中,凡是從基類CCmdTarget派生出來的子類,都能處理命令消息。另外,文檔類、視圖類和應用程序類都能處理命令消息。創(chuàng)建命令消息時,可以使用MFCClassWizard建立消息映射和消息處理函數(shù)之間的關系。例如,應用程序類發(fā)出文件打開命令,假設打開文件對應的菜單資源ID為ID_FILE_IPEN,則其命令消息如下:目前三十五頁\總數(shù)四百四十一頁\編于三點3.控件消息普通的控件都是子窗口,因為其都繼承自CWnd。它們通過向其父窗口(一般為對話框)發(fā)關消息,響應用戶的動作(如移動鼠標,單擊等)。控件消息一般是由按鈕(BN_)、編輯框(EN_)、下拉列表框(LBN_)和組合框(CBN_)等控件產(chǎn)生的。其消息映射宏是在消息名前加上ON_,例如:目前三十六頁\總數(shù)四百四十一頁\編于三點第3章C++語言基礎要使用VisualC++進行Windows應用程序的開發(fā),就要掌握面向對象的思想和C++語言。本章先講述一個簡單的C++程序,然后根據(jù)這個程序,向讀者介紹C++中語言基礎。目前三十七頁\總數(shù)四百四十一頁\編于三點3.2C++的基本數(shù)據(jù)類型及數(shù)據(jù)數(shù)據(jù)類型是對數(shù)據(jù)的一種抽象描述。在計算機程序中能操作的數(shù)據(jù)有很多種,不同的數(shù)據(jù)所需要的存儲空間有所不同。將數(shù)據(jù)按照類型進行分類,有助于程序員對于存儲空間的分配。本節(jié)將具體介紹有關C++中的數(shù)據(jù)及其所屬的數(shù)據(jù)類型。目前三十八頁\總數(shù)四百四十一頁\編于三點3.2.2變量變量是一種特殊的標識符,在變量中可以存儲數(shù)據(jù)。變量中存儲的數(shù)據(jù)可以根據(jù)程序的需要而改變,因此稱為變量。1.定義變量在C++中,使用一個變量必須先定義該變量。C++中定義變量的語法代碼如下:定義一個變量需要說明兩點,一是變量的類型,二是變量的名稱。其中,變量的類型是C++中的數(shù)據(jù)類型。變量名是用戶為變量起的名稱。目前三十九頁\總數(shù)四百四十一頁\編于三點3.2.2變量C++的變量名由字符及數(shù)字等組成。變量名必須滿足以下幾個條件。變量名只能由字母、數(shù)字和下劃線(_)組成。變量名必須以字母或下劃線開頭。變量名不能包含空白字符(換行符、空格和制表符稱為空白字符)。變量名不能與保留字名相同。變量名區(qū)分大小寫。目前四十頁\總數(shù)四百四十一頁\編于三點3.2.2變量2.變量賦值如果想要使用一個變量,就要為其進行賦值。如果沒有對定義的變量賦值,VisualC++會為該變量默認一個值。例如,如果是一個int類型的變量且沒有賦值,VisualC++將默認其值為0。C++中為變量賦值的方法有兩種:一種是在定義變量的同時賦值,另一種是在定義變量后賦值。在定義變量的同時賦值,代碼如下:在定義變量后賦值,代碼如下:目前四十一頁\總數(shù)四百四十一頁\編于三點.常量常量與變量相反,是一個不隨時間和程序變化而變化的值。C++中,常量的命名規(guī)則和變量的大體相同。不同的是,常量名稱中的字母都為大寫。C++中定義符號常量的語法代碼如下:例如,在計算圓形面積的時候,經(jīng)常用到PI。為了避免重復地輸入PI的實際取值,而用下面的形式聲明PI的取值。這樣,在程序中編譯時,會將程序中出現(xiàn)的所有字符串PI全部置換成3.14。如果想要修改程序中PI的值,只需在頭文件處修改,全部PI的取值都會發(fā)生變化。目前四十二頁\總數(shù)四百四十一頁\編于三點.常量C++中定義靜態(tài)常量的語法代碼如下:在C++中,同聲符號常量一樣,在聲明靜態(tài)常量時,也要對其進行初始化,代碼如下:注意:在符號常量中,PI沒有類型,不占有存儲單元,且容易出錯。而在Const常量中,PI有數(shù)據(jù)類型,并且占有存儲單元,有地址,因此可以使用指針指向它。目前四十三頁\總數(shù)四百四十一頁\編于三點3.3C++的運算符及表達式運算符和表達式是一種程序語言的基礎。運算符的作用是操作變量或表達式。C++中的運算符包括賦值運算符、算術運算符、邏輯運算符、關系運算符、位運算符、逗號運算符、條件運算符等。本節(jié)將介紹這些運算符及其所組成的表達式。目前四十四頁\總數(shù)四百四十一頁\編于三點3.3.1表達式表達式是C++程序中不可缺少的一部分。表達式是由運算符、操作數(shù)(變量、常量或函數(shù)等)和標點符號,按照一定規(guī)則組成的一個有意義的語句。例如:目前四十五頁\總數(shù)四百四十一頁\編于三點3.3.2運算符C++中的運算符就是一種符號,該符號可以用于處理數(shù)據(jù)。平時有數(shù)學計算中所使用的“+”、“-”、“×”、“÷”都屬于運算符。只是這些運算符在C++中的表現(xiàn)形式可能與日常生活中有所不同。下面將對C++中的運算符作具體介紹。1.賦值運算符賦值運算符是用于為變量或常量指定數(shù)值的運算體符。其操作符號為“=”,示例代碼如下:上述表達式的意義是,把b的值賦值給a。其中,b可以是一個單純的變量,也可以是一個表達式。目前四十六頁\總數(shù)四百四十一頁\編于三點3.3.2運算符2.算術運算符算術運算符是用于進行數(shù)學運算的運算符。例如,加、減、乘、除等就是算術運算符。操作完成后,返回一個數(shù)字型的值。算術運算符包括加法運算符(+)、減法運算符(-)、乘法運算符(*)、除法運算符(/)、模運算符(%)。上述算術運算符都是二元運算符,該運算符兩端的數(shù)據(jù)必須是數(shù)字。目前四十七頁\總數(shù)四百四十一頁\編于三點3.3.2運算符3.邏輯運算符邏輯運算符,即用于處理邏輯值的運算符。邏輯運算符通常用在條件判斷語句或循環(huán)語句中,如if、while語句等。C++中的邏輯運算符包括邏輯與運算符(&&)、邏輯或運算符(||)、邏輯非運算符(!)。由邏輯運算符構成的表達式,稱為邏輯表達式。邏輯表達式的返回值為邏輯值(true或false),一般情況下,1代表true,0代表false。邏輯與運算符可以進行與操作,其操作方法為:如果邏輯與運算符前的數(shù)為false(或是可以得出false的邏輯表達式),則返回false,否則返回true;當邏輯與運算符前后兩個數(shù)都為true時,才返回true。邏輯或運算符可以進行或操作,其操作方法為:只要邏輯或運算符前后的數(shù)據(jù)中有一個為true(或是可以得出true的邏輯表達式),則返回true;當邏輯或運算符前后兩個數(shù)都為false時,才返回false。邏輯非運算符要求要操作的數(shù)據(jù)必須是邏輯值,或是能夠轉換成邏輯值的邏輯表達式。邏輯非運算符可以進行非操作,其操作方法為:如果要操作的數(shù)據(jù)為true,則返回false;如果要操作的數(shù)據(jù)為false,則返回true。目前四十八頁\總數(shù)四百四十一頁\編于三點3.3.2運算符4.關系運算符關系運算符,即用于比較兩個數(shù)據(jù)關系大小的運算符,并根據(jù)比較的結果返回一個邏輯值。關系運算符包括大于運算符(>)、大于等于運算符(>=)、小于運算符(<)、小于等于運算符(<=)、等于運算符(==)以及不等于運算符(!=)。5.條件運算符條件運算符,即用于條件判斷的運算符。其構成的表達式格式為:其中,如果表達式1的值為非0,則執(zhí)行表達式2;如果表達式1的值為0,則執(zhí)行表達式3。目前四十九頁\總數(shù)四百四十一頁\編于三點3.3.2運算符6.特殊運算符C++中還提供了一些特殊的運算符,如++、--、+=、-=等。目前五十頁\總數(shù)四百四十一頁\編于三點3.4C++的語句控制C++中的控制語句主要用于完成分支結構程序和循環(huán)結構程序的控制。其主要包括以下9個控制語句:if~else語句、switch語句、for語句、while語句、do~while語句、continue語句、break語句、goto語句和return語句。但在介紹這些控制語句之前,首先介紹一下輸入輸出語句。目前五十一頁\總數(shù)四百四十一頁\編于三點3.4.1C++的輸入輸出C++中除了可以使用C語言中的scanf和printf函數(shù)進行輸入輸出外,還提供了標準的輸入輸出流。例如,從鍵盤輸入時需要用到輸入流,在顯示器上面顯示信息需要輸出流。其中,cin代表輸入流,cout代表輸出流。它們是在頭文件iostream中定義的。因此,在使用輸入輸出流的時候,需要引入iostream頭文件。目前五十二頁\總數(shù)四百四十一頁\編于三點3.4.1C++的輸入輸出1.輸入語句C++的輸入語句用cin表示。其中,cin必須和“>>”一起使用。使用cin的語法代碼如下:例如,想要從鍵盤輸入一些數(shù)據(jù),將使用下述代碼:如果想要一次性輸入多個數(shù)據(jù),不是使用逗號作為分隔符,而應該用“>>”分隔,應該寫成:目前五十三頁\總數(shù)四百四十一頁\編于三點3.4.1C++的輸入輸出2.輸出語句C++的輸出語句用cout表示。其中,cout必須和“<<”一起使用,使用cout的語法代碼如下:例如,想要從鍵盤輸出一些數(shù)據(jù),將使用下述代碼:如果想要一次性的輸出多個數(shù)據(jù),同樣不是使用逗號作為分隔符,而是每項數(shù)據(jù)之間用“<<”分隔,如上述代碼所示。注意:在C++中,可以不用“\n”控件換行,可以使用“endl”進行換行。因為在頭文件iostream中定義endl(endofline)代表回車換行,其作用與“\n”相同。目前五十四頁\總數(shù)四百四十一頁\編于三點3.4.2選擇語句選擇語句也稱分支語句,即根據(jù)不同的條件執(zhí)行不同的語句。在C++中,主要的選擇語句有if語句和switch語句。1.if語句if語句有三種基本結構。(1)第一種基本結構的語法如下:執(zhí)行該if語句時,首先判斷表達式是否正確。如果正確,則執(zhí)行語句1。如果不正確,則不執(zhí)行任何操作,執(zhí)行if語句后的其他語句。該語句流程如右圖所示。目前五十五頁\總數(shù)四百四十一頁\編于三點3.4.2選擇語句(2)第二種基本結構的語法如下:執(zhí)行該if語句時,首先判斷表達式結果是否為真。如果判斷結果為真,則執(zhí)行語句1。如果判斷結果為假,則執(zhí)行語句2。該語句流程如右圖所示。目前五十六頁\總數(shù)四百四十一頁\編于三點3.4.2選擇語句(3)第三種基本結構的語法如下:執(zhí)行該if語句時,首先對表達式1進行判斷。如果判斷結果為真,則執(zhí)行語句1。如果判斷結果為假,則對表達式2進行判斷。如果表達式2的判斷結果為真,則執(zhí)行語句2。否則,執(zhí)行語句3。該語句的流程圖如右圖所示。目前五十七頁\總數(shù)四百四十一頁\編于三點3.4.2選擇語句2.switch語句C++中的另外一種選擇語句是switch語句,其語法如下:該語句的流程圖如右圖所示。目前五十八頁\總數(shù)四百四十一頁\編于三點3.4.3循環(huán)語句在編寫程序的過程中,經(jīng)常會遇到一些許多有規(guī)律性的重復操作,則在程序中需要重復執(zhí)行這些語句。為此,C++中提供了循環(huán)語句,可使代碼大大簡化。循環(huán)語句包括循環(huán)條件和循環(huán)體兩部。C++中的循環(huán)語句包括for語句、while語句和do~while語句。1.for語句for語句是使用最頻繁并且最靈活的循環(huán)語句。其語法代碼如下:其中,表達式1通常用于為循環(huán)變量賦初值,表達式2為循環(huán)條件,表達式3用于循環(huán)變量的遞增或是遞減,使得循環(huán)趨于結束。目前五十九頁\總數(shù)四百四十一頁\編于三點3.4.3循環(huán)語句for語句的執(zhí)行過程如下:(1)初始化表達式。(2)執(zhí)行循環(huán)表達式。如果不滿足條件,則跳出循環(huán)語句。(3)如果滿足條件,則執(zhí)行語句塊(循環(huán)體)。(4)循環(huán)變量遞增或遞減。(5)返回步驟(2)。(6)循環(huán)結束,執(zhí)行for語句下的語句。for語句的流程圖如右圖所示。目前六十頁\總數(shù)四百四十一頁\編于三點3.4.3循環(huán)語句2.while語句while語句用于“當滿足某一條件時進入循環(huán)”的情況,其語法代碼如下:while語句的執(zhí)行過程如下:(1)判斷循環(huán)條件。(2)表達式如果為真,則進入循環(huán)體。否則,進入步驟(4)。(3)執(zhí)行循環(huán)體表達式。(4)循環(huán)結束,執(zhí)行while語句下的語句。while語句的流程圖如右圖所示。目前六十一頁\總數(shù)四百四十一頁\編于三點3.4.3循環(huán)語句3.do~while語句do~while語句和while語句類似,其語句代碼如下:do~while語句的執(zhí)行過程如下:(1)執(zhí)行循環(huán)體語句塊。(2)判斷循環(huán)條件。如果滿足條件,返回步驟(1)。否則,執(zhí)行步驟(3)。(3)退出do~while語句。do~while語句的流程圖如右圖所示。目前六十二頁\總數(shù)四百四十一頁\編于三點3.4.3循環(huán)語句從上述代碼中可以看出,while語句和do~while語句的區(qū)別:(1)從結構上看,while語句的循環(huán)條件在前,循環(huán)體語句塊在后。而do~while語句的循環(huán)體語句塊在前,循環(huán)條件在后。(2)while語句的循環(huán)條件后沒有分號,而do~while語句的循環(huán)條件后有分號,且不能省略。(3)從執(zhí)行流程上看,while語句如是不滿足循環(huán)條件,會直接跳過該循環(huán)。而do~while語句是無條件地執(zhí)行一次循環(huán)體語句塊。目前六十三頁\總數(shù)四百四十一頁\編于三點3.4.4其他語句在循環(huán)語句中,經(jīng)常用到一些語句,如break、continue和goto語句等。下面對這些語句做簡單介紹。1.continue語句continue語句是跳過循環(huán)體中剩余的語句而強制執(zhí)行下一次循環(huán)。其作用為結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。continue語句只能用于循環(huán)語句中,通常與if語句配合使用。2.break語句當程序運行到break語句時,立即結束break語句所在的整個循環(huán),轉向循環(huán)語句下面的語句繼續(xù)執(zhí)行。3.goto語句goto語句為無條件轉向語句,通常與條件語句配合使用。但其易使程序流程混亂,一般不建議使用。所以在此不過多介紹。目前六十四頁\總數(shù)四百四十一頁\編于三點第4章C++的面向對象面向對象技術是當今軟件開發(fā)的主流,很多開發(fā)人員都轉向使用面向對象的語言進行編程。而C++也是面向對象程序設計語言的一種。本章將依次講解C++中的類與對象。內容包括類與對象、類的繼承與派生、類的多態(tài)性等。通過本章學習,讀者能夠熟練掌握面向對象的思想,并能將這種思想融入到代碼中。目前六十五頁\總數(shù)四百四十一頁\編于三點4.1類與對象客觀世界中,任何一個事物都可以看成是一個對象(Object)。在C++中,對象的類型被稱為類(class)。本節(jié)將具體介紹類與對象的相關概念與使用。目前六十六頁\總數(shù)四百四十一頁\編于三點4.1.1面向對象思想面向對象的思想和面向過程的思想是相對的。面向過程的程序,詳細地描述了每一時刻的數(shù)據(jù)結構及對其的操作過程。而面向對象的程序,將一個個小的操作封裝成對象。在以后的編寫中,只需調用對象即可。面向對象的程序有三大特性:封裝性、繼承性與多態(tài)性。目前六十七頁\總數(shù)四百四十一頁\編于三點4.1.1面向對象思想1.封裝性所謂的封裝性,有著兩方面的含義:一是將基本數(shù)據(jù)和對此數(shù)據(jù)進行操作的過程和函數(shù)結合起來,形成一個對象,各個對象之間相互獨立,互不干擾。二是對象將對外界公開的是一個界面,將具體的細節(jié)隱藏起來,保證了數(shù)據(jù)的安全性。2.繼承性繼承性是面向對象程序設計中最重要的機制。通過繼承機制,可以方便地利用一個已有的類(父類)建立一個新的類(子類)。新類不但可以繼承已有類的屬性和方法,還可以擁有自己特有的方法。3.多態(tài)性所謂多態(tài)性是當不同的對象收到相同的消息時產(chǎn)生不同的動作。多態(tài)性是面向對象程序設計的一個重要特征,其增加了程序的靈活性。目前六十八頁\總數(shù)四百四十一頁\編于三點4.1.2類的聲明類是具有相同屬性和相同方法的對象的集合。類由類頭(classhead)和類體(classbody)組成。類頭由關鍵字class和類名組成。類體是指花括號({})中的內容。類體由數(shù)據(jù)成員和成員函數(shù)組成。需要注意提,類的聲明以分號結束。聲明類的一般形式為:目前六十九頁\總數(shù)四百四十一頁\編于三點4.1.2類的聲明其中,關鍵字private、public和protected稱為成員訪問限定符。用這些訪問限定符來聲明各成員的訪問屬性。private:只能在本類中訪問,在類外不能訪問。public:既能在本類中訪問,又能在類外通過該類的對象進行訪問。protected:與private類似,不能被類外訪問,但能被派生類的成員函數(shù)訪問。說明:如果在類的聲明中沒有使用關鍵字,則系統(tǒng)將數(shù)據(jù)成員和函數(shù)默認為是私有的。目前七十頁\總數(shù)四百四十一頁\編于三點4.1.3成員函數(shù)的定義在C++中,定義成員函數(shù)可以在類中定義,也可以在類外定義。如例4-1所示,display()是在類中進行聲明并且定義。而GetName()和GetAge()只是在類中有聲明,并沒有進行定義。這種函數(shù)的定義代碼如下:則在Student類中,函數(shù)GetName()和GetAge()的定義如下:目前七十一頁\總數(shù)四百四十一頁\編于三點4.1.4類與對象的關系在現(xiàn)實生活中,每一個實體事物都可以作為一個對象。例如,一部手機、一支鉛筆、一本書等。但是有些對象是有著相似性的。在C++中,將這些有著相似的對象歸為一類(class)。類是對象的抽象,而對象是類的實例。在編寫程序時,應該先聲明一個類,再去實例化若干個同類型的對象。在一個類中,類的屬性指的是類的數(shù)據(jù)成員,類的行為指的是類的方法。目前七十二頁\總數(shù)四百四十一頁\編于三點4.1.5對象的聲明和實例化類是一個抽象的概念,因此在程序中不能直接引用。而是將其實例化成為對象后,通過這個對象來對類進行相關的操作。對象的聲明有3種方法。目前七十三頁\總數(shù)四百四十一頁\編于三點1.先聲明類類型,后定義對象這種聲明的語法代碼如下:用這種方式為Student類聲明對象:如果想要一次性為某個類聲明多個對象,可以用逗號作為分隔符。目前七十四頁\總數(shù)四百四十一頁\編于三點2.在聲明類的同時聲明對象這種聲明的語法代碼如下:用這種方式為Student類聲明對象:如果想要一次性為某個類聲明多個對象,可以用逗號作為分隔符。目前七十五頁\總數(shù)四百四十一頁\編于三點3.不出現(xiàn)類名,直接聲明對象這種聲明的語法代碼如下:如果想要一次性為某個類聲明多個對象,可以用逗號作為分隔符。用這種方式為類聲明對象:在聲明對象之后,可以調用類中的方法。例如,stu1為Student類的一個對象,使用該對象對Student類中的數(shù)據(jù)成員和函數(shù)進行調用。代碼如下:目前七十六頁\總數(shù)四百四十一頁\編于三點4.1.6構造函數(shù)和析構函數(shù)下面介紹C++中兩個特殊的函數(shù):構造函數(shù)和析構函數(shù)。1.構造函數(shù)當聲明一個類的屬性時,可以不對其進行初始化,因為在C++中有專門的初始化函數(shù)對該屬性進行初始化。這個專門用來處理對象的初始化的函數(shù)就是構造函數(shù)。構造函數(shù)是一種特殊的函數(shù)。其作用是在完成對象的初始化的同時,將對象的屬性初始化。構造函數(shù)不需要用戶自己來調用它,在創(chuàng)建對象時,由系統(tǒng)自動調用。定義構造函數(shù)的語法代碼如下:目前七十七頁\總數(shù)四百四十一頁\編于三點4.1.6構造函數(shù)和析構函數(shù)構造函數(shù)的特點如下所述。構造函數(shù)名與類名相同。構造函數(shù)不能指定返回值類型。構造函數(shù)可以有參數(shù),也可以沒有參數(shù)。構造函數(shù)不能被程序顯示調用,只能由系統(tǒng)自動調用。每個類都必須有一個構造函數(shù)。如果在聲明一個類時沒有給出構造函數(shù)的定義,則系統(tǒng)會為該類自動添加一個默認的構造函數(shù)。該構造函數(shù)的參數(shù)列表為空,函數(shù)體也為空。類中各屬性的值被指定為所屬類型的默認值。構造函數(shù)可以重載(有關重載的概念,會在4.2節(jié)進行介紹)。也就是說,一個類可以有多個參數(shù)不同的構造函數(shù)。注意:當用戶為聲明的類添加一個自定義的構造函數(shù)時,系統(tǒng)則不再為程序添加默認的構造函數(shù)。目前七十八頁\總數(shù)四百四十一頁\編于三點4.1.6構造函數(shù)和析構函數(shù)2.析構函數(shù)當一個對象的生命周期結束時,應當去釋放該對象所占用的內存空間。這時,系統(tǒng)會自動調用析構函數(shù)來進行一些清理工作。定義析構函數(shù)的語法代碼如下:析構函數(shù)的特點如下所述。析構函數(shù)不允許有返回值。析構函數(shù)不允許有參數(shù)。一個類中有且只有一個析構函數(shù)。因此,析構函數(shù)不能重載。對于一個對象來說,析構函數(shù)是最后一個被調用的函數(shù)。目前七十九頁\總數(shù)四百四十一頁\編于三點4.2C++類的繼承和派生類的繼承是指新的類從已有類中獲得已有的特性,例如,數(shù)據(jù)成員、成員函數(shù)等。而從已有類產(chǎn)生新類的過程就稱為派生。其中,已有類稱為基類或父類,新的類稱為派生類或子類。本節(jié)將具體紹有關繼承與派生的有關知識。目前八十頁\總數(shù)四百四十一頁\編于三點4.2.1派生類的聲明派生類可以將基類中的已有的特性繼承下來,也可以添加一些自己特有的新特性。聲明派生類的語法代碼如下:從上述代碼中可以看出,派生類Student不僅從基類Student中繼承了Student類已有的數(shù)據(jù)成員和成員函數(shù),還新添加了一些自己的數(shù)據(jù)成員和成員函數(shù)。另外,本例中采用的是公有繼承。目前八十一頁\總數(shù)四百四十一頁\編于三點4.2.2派生類的繼承方式一個類中,其成員的訪問權限有public、private和protected之分。而類的繼承方式也有三種:公有繼承、私有繼承和受保護繼承。目前八十二頁\總數(shù)四百四十一頁\編于三點1.公有繼承在聲明一個派生類時,將繼承方式設為public,則該種繼承方式稱為公有繼承。使用公有繼承方式派生出來的類稱為公有派生類,其基類稱為公有基類。采用公有方式繼承時,基類的公有成員和受保護的成員在派生類中是可以引用的,而其私有成員則不能在派生類中引用。有關公有繼承中成員的訪問權限如下表所示。目前八十三頁\總數(shù)四百四十一頁\編于三點2.私有繼承在聲明一個派生類時,將繼承方式設為private,則該種繼承方式稱為私有繼承。使用私有繼承方式派生出來的類稱為私有派生類,其基類稱為私有基類。采用私有方式繼承時,基類的公有成員和受保護的成員在派生類中相當于是私有成員。而其私有成員不能在派生類中引用。有關私有繼承中成員的訪問權限如下表所示。目前八十四頁\總數(shù)四百四十一頁\編于三點3.受保護繼承在聲明一個派生類時,將繼承方式設為protected,則該種繼承方式稱為受保護繼承。使用受保護繼承方式派生出來的類稱為受保護派生類,其基類稱為受保護基類。采用受保護方式繼承時,基類的公有成員和受保護成員在派生類中相當于是受保護成員。而其私有成員不能在派生類中引用。有關受保護繼承中成員的訪問權限如下表所示。目前八十五頁\總數(shù)四百四十一頁\編于三點4.2.2單一繼承和多重繼承在C++中,繼承分為兩種:單一繼承和多重繼承。1.單一繼承一個基類只能由一個派生類來繼承,這種繼承方式稱為單一繼承。單一繼承關系所形成的是一種樹形結構,如下圖所示。目前八十六頁\總數(shù)四百四十一頁\編于三點4.2.2單一繼承和多重繼承2.多重繼承一個派生類不僅只能擁有一個基類,還可以擁有多個基類,這種繼承方式稱為多重繼承?;诙嘀乩^承方式的派生類,同時擁有了多個基類的特性。多重繼承的關系如下圖所示。如果已經(jīng)聲明了類A、類B和類C,而類D想要同時成為A、B、C三個類的派生類,即類D是多重繼承的派生類。代碼如下:目前八十七頁\總數(shù)四百四十一頁\編于三點4.3C++的多態(tài)性在面向對象的程序中,多態(tài)性是一個非常重要的概念。同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結果,這就是多態(tài)性。目前八十八頁\總數(shù)四百四十一頁\編于三點4.3.1多態(tài)的分類C++中的多態(tài)性是指同一個函數(shù)名稱對應著功能類似的多個函數(shù)。這些函數(shù)執(zhí)行不同但是功能類似的操作,從而實現(xiàn)了“一個接口,多種方法”。C++中的多態(tài)性分為兩種:靜態(tài)多態(tài)性和動態(tài)多態(tài)性。靜態(tài)多態(tài)性是指在編譯程序時,系統(tǒng)就能確定所調用的是哪一個函數(shù)。因此,靜態(tài)多態(tài)性又稱編譯時多態(tài)性。靜態(tài)多態(tài)性是通過函數(shù)重載和運算符重載實現(xiàn)的。動態(tài)多態(tài)性是指在程序運行的過程中才能動態(tài)地確定調用哪一個函數(shù)。因此,動態(tài)多態(tài)性又稱運行時多態(tài)性。動態(tài)多態(tài)性是通過繼承和虛函數(shù)實現(xiàn)的。目前八十九頁\總數(shù)四百四十一頁\編于三點4.3.2運算符重載所謂重載,就是對一個事物賦予新的含義。而運算符重載,就是對已有的運算符進行重新定義,賦予其另外一種功能,以適應不同的數(shù)據(jù)類型。運算符重載的語法代碼如下:在C++中,有關重載運算符的規(guī)則如下:只能對C++中已有的運算符進行重載。并不是C++中的所有運算符都能進行重載,運算符“.”、“::”、“?:”等不能重載。重載運算符不能改變操作數(shù)的個數(shù)。重載運算符不能改變運算符的優(yōu)先級。重載運算符不能改變運算符的結合性。重載運算符不能使用默認參數(shù)。目前九十頁\總數(shù)四百四十一頁\編于三點4.3.3虛函數(shù)虛函數(shù)是指在派生類中定義與基類同名的函數(shù),但基類中的該函數(shù)前有virtual修飾。聲明虛函數(shù)的語法代碼如下:在C++中,當一個成員函數(shù)被聲明為虛函數(shù)后,其派生類中的同名函數(shù)將自動成為虛函數(shù)。因此,在派生類中重新聲明該虛函數(shù)時,virtual可以不加。但為了使程序看起來清晰,一般在派生類中也加上virtual。目前九十一頁\總數(shù)四百四十一頁\編于三點4.3.4純虛函數(shù)在某些特殊情況下,需要使用純虛函數(shù)。例如,有一個動物類,其中有一個名為睡覺的函數(shù)。而各種動物的睡覺方式是不同的。此時,可以將動物類中的睡覺函數(shù)聲明為純虛函數(shù),而該動物類則成為了抽象類。聲明純虛函數(shù)的語法代碼如下:純虛函數(shù)沒有函數(shù)體。語法代碼后面的“=0”不是代表該函數(shù)的返回值為0。此種表達方式僅僅是通知系統(tǒng),這是一個純虛函數(shù)。有些類不用來定義對象,而只是作為一個基類去派生新的類,這種類稱為抽象類。在抽象類中,可以使用純虛函數(shù)。目前九十二頁\總數(shù)四百四十一頁\編于三點第5章菜單欄、工具欄和狀態(tài)欄菜單欄、工具欄和狀態(tài)欄是窗口界面的重要組成部分。三者是用戶與應用程序交互的橋梁。合理地使用這三者,可以讓用戶更好地使用軟件,提高用戶體驗度。本章將依次講解在VisualC++中如何構建菜單欄、工具欄和狀態(tài)欄。內容包括菜單的分類、使用下拉式菜單、使用彈出式菜單、編輯工具欄按鈕、修改默認的工具欄等。通過本章的學習,讀者會熟練地使用菜單欄、工具欄以及狀態(tài)欄,并且可以根據(jù)自己的想法,設計出一個漂亮的窗口。目前九十三頁\總數(shù)四百四十一頁\編于三點5.1菜單的分類菜單欄一般位于應用程序窗口的頂部,如下圖所示。菜單是用于顯示一組選項(即菜單項)的下拉窗口,用戶可以從這些菜單項中進行選擇。在Windows窗口中,菜單分為兩種:下拉式菜單和彈出式菜單(又稱為上下文菜單)。目前九十四頁\總數(shù)四百四十一頁\編于三點5.1菜單的分類1.下拉式菜單一般情況下,在應用程序窗口頂部的菜單欄中,選擇菜單中的某個選項,就會顯示一個下拉式菜單。在上圖所示的窗口中,當用戶選擇菜單欄中的某一選項(如文件)時,就會顯示一個下拉菜單。下圖中的左圖所示的菜單即為一個下拉式菜單。2.彈出式菜單一般情況下,右擊應用程序窗口中的空白處,就會顯示一個彈出式菜單。該菜單處于自由浮動狀態(tài)。下圖中的右圖所示的菜單即為一個彈出式菜單。目前九十五頁\總數(shù)四百四十一頁\編于三點5.2使用下拉式菜單在VisualC++中,當創(chuàng)建的基于單文檔或多文檔的程序時,提供了一個默認的菜單欄。它包括文件、編輯、查看、窗口和幫助等菜單項。但是當創(chuàng)建一個基于對話框的工程時,VisualC++將不會為其提供菜單欄。本節(jié)將使用菜單編輯器定義一個自己的菜單欄,并將其添加到基于對話框的工程中。目前九十六頁\總數(shù)四百四十一頁\編于三點5.2.3移動和刪除菜單項如果在添加了某個菜單項后,有時覺得某些位置可能不合適。如果想要移動的是菜單欄上的菜單項,則可以直接選擇想要移動的菜單項,將其進行左右拖動,放到預期的位置即可,如下圖中的左圖所示。如果想要移動的是下拉式菜單里的菜單項,則可以直接選擇要移動的菜單項,將其進行上下拖動,放到預期的位置即可,如下圖中的右圖所示。如果想要刪除某個菜單項,只需選擇要刪除的菜單項,按下【Delete】鍵即可。目前九十七頁\總數(shù)四百四十一頁\編于三點5.2.4啟用和禁用菜單項如果一個新的菜單沒有添加命令處理函數(shù),應用程序會自動將其禁用。要啟用這個菜單項,使用ClassWizard為其添加一個命令處理函數(shù)即可。但是如果想要根據(jù)應用程序,有選擇的啟用和禁用某個菜單項,可以用ClassWizard添加一個界面消息處理函數(shù)。目前九十八頁\總數(shù)四百四十一頁\編于三點5.2.5標記菜單項如果想要給一個菜單項添加選中標記,同樣可以使用ClassWizard添加的界面消息處理函數(shù)。在處理函數(shù)中添加如下代碼。如果m_nCheck為TRUE,則菜單項前有一個選中標記“√”。如果m_nCheck為FALSE,則菜單項前沒有選中標記“√”。目前九十九頁\總數(shù)四百四十一頁\編于三點5.2.6添加快捷鍵在使用菜單命令時,不僅可以使用鼠標進行選擇,也可以使用快捷鍵。例如,經(jīng)常使用的復制操作可以使用【Ctrl+C】組合鍵,剪切操作可以使用【Ctrl+X】組合鍵,粘貼操作可以使用【Ctrl+V】組合鍵等。目前一百頁\總數(shù)四百四十一頁\編于三點5.3使用彈出式菜單一般在右擊窗口時,會出現(xiàn)彈出式菜單。下拉式菜單可以在圖形化的界面下進行加載,而彈出式菜單需要用戶手工編寫代碼動態(tài)地加載。如果想在程序中動態(tài)地創(chuàng)建彈出式菜單,就必須用到MFC中的菜單類CMenu。CreatePopupMenu():創(chuàng)建一個空白的彈出式菜單。AppendMenu():將新的菜單項添加到指定菜單項的末尾。TrackPopupMenu(UINTnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=0):在指定的位置彈出一個菜單。其中,參數(shù)nFlags用于指定一個屏幕位置和一個鼠標按鈕標志;參數(shù)x、y用于指定彈出式菜單坐標的水平位置和菜單頂部在屏幕坐標中的垂直位置;參數(shù)pWnd用于標識擁有此彈出式菜單的窗口;參數(shù)LpRectet用于指向一個RECT結構或CRect對象,如果其值為NULL,則代表當用戶在此彈出式菜單外單擊時,該彈出式菜單將會消失。目前一百零一頁\總數(shù)四百四十一頁\編于三點5.4工具欄的使用工具欄是一個顯示位圖式按鈕行的控制條,按工具欄上的按鈕,相當于選擇菜單欄上的菜單項,可以執(zhí)行相應的命令操作。工具欄一般位于窗口客戶區(qū)菜單欄的下面,其也可以作為一個浮動的小窗口,任由鼠標拖動。目前一百零二頁\總數(shù)四百四十一頁\編于三點5.4.2移動和刪除工具欄按鈕如果想要移動某個工具欄按鈕,可以將其選中,然后進行左右拖動,將其放到預期的位置上即可。如果想要刪除某個工具欄按鈕,不能直接按下【Delete】鍵,這樣做只能刪除該按鈕上的位圖。要想真正地刪除工具欄上的按鈕,將其選中并拖到工具欄之外,釋放鼠標即可。目前一百零三頁\總數(shù)四百四十一頁\編于三點5.4.3添加按鈕消息響應函數(shù)在為按鈕添加完位圖之后,運行程序時,工具欄上新添加的按鈕處于灰色狀態(tài),即不可用狀態(tài)。要想使用該按鈕,就要為其添加消息響應函數(shù)。目前一百零四頁\總數(shù)四百四十一頁\編于三點5.5狀態(tài)欄的使用狀態(tài)欄位于應用程序窗口的底部,可以隨時為用戶提供當前應用程序的狀態(tài)信息,其既不接收輸入消息,也不產(chǎn)生命令消息。目前一百零五頁\總數(shù)四百四十一頁\編于三點5.5.1狀態(tài)欄概述當使用MFCAppWizard創(chuàng)建一個基于單文檔的程序時,在應用向導的【MFCAppWizard-step4】選對話框中,默認選擇了【Initialstatusbar】選項,如圖5.25所示。那么,在生成的應用程序中,就自動添加了一個工具欄,圖示可以參考程序sample0501的運行結果。默認的狀態(tài)欄大體分為2個部分:提示信息窗格和指示器信息窗格。而指示器信息窗格又由3部分構成,其分別用于顯示CapsLock、NumLockt和ScrollLock鍵的狀態(tài)。目前一百零六頁\總數(shù)四百四十一頁\編于三點5.5.2修改默認的狀態(tài)欄如果想要添加一個信息提示器到狀態(tài)欄中,首先必須要在字符串表編輯器保存狀態(tài)欄中符合條件時顯示的文本。然后,使用文本編輯器添加一行代碼到CMainFrame類中,通知CStatusBar類創(chuàng)建了一個新的指示器。目前一百零七頁\總數(shù)四百四十一頁\編于三點第6章對話框對話框是Windows程序的一種資源。使用對話框上的各種控件,可以實現(xiàn)相應的功能,提供了人機交互性能。本章將依次講解對話框中的模態(tài)對話框和非模態(tài)對話框。另外,還對通用對話框進行了介紹。通過本章的學習,讀者可以熟練地使用對話框資源,從而設計出各式各樣的對話框。目前一百零八頁\總數(shù)四百四十一頁\編于三點6.1消息對話框消息對話框是最常用的對話框。消息對話框是通過函數(shù)MessageBox實現(xiàn)的,其函數(shù)原型如下:hWnd:表示擁有該消息對話框的父級窗口。如果為NULL,則表示該消息對話框沒有窗口。lptText:表示用于指向將被顯示的字符串的指針。lpCaption:表示用于指向該消息對話框標題的字符串的指針。UType:表示該消息對話框的風格。目前一百零九頁\總數(shù)四百四十一頁\編于三點6.1消息對話框其中,UType由顯示圖標和按鈕類型組成。兩個類型的參數(shù)之間用“|”分隔。圖標的種類及其對應的參數(shù)如下表所示。按鈕類型及其對應的參數(shù)如下表所示。目前一百一十頁\總數(shù)四百四十一頁\編于三點6.1消息對話框【示例6-1】平時在使用計算機時,當修改某些設置后,會彈出一些對話框,讓用戶確定是否真的修改。則該消息對話框的設計代碼如下:運行結果如右圖所示。從上圖中可以看出,該消息對話框中,默認選中了【是】按鈕。該默認按鈕可以進行設置,如下表所示。目前一百一十一頁\總數(shù)四百四十一頁\編于三點6.1消息對話框例如,將上述代碼改成如下代碼:則運行結果如下圖所示。目前一百一十二頁\總數(shù)四百四十一頁\編于三點6.2對話框的創(chuàng)建與使用前面只是介紹過如何創(chuàng)建一個基于對話框圖的工程,下面將介紹如何創(chuàng)建一個新的對話框,以及如何使用對話框。目前一百一十三頁\總數(shù)四百四十一頁\編于三點6.2.1對話框的分類對話框分為兩種:模態(tài)對話框和非模態(tài)對話框。目前一百一十四頁\總數(shù)四百四十一頁\編于三點1.模態(tài)對話框當一個模態(tài)對話框工作時,其他窗口將失去輸入焦點。只有當該模態(tài)對話框關閉后,用戶才能對其他窗口進行操作。例如,MicrosoftWord中對圖片進行操作時的【題注】對話框、【設置圖片格式】對話框和【插入超鏈接】對話框都是模態(tài)對話框,如下圖所示。目前一百一十五頁\總數(shù)四百四十一頁\編于三點2.非模態(tài)對話框而非模態(tài)對話框與模態(tài)對話框相反。當其工作時,點擊其他窗口,被點擊的窗口可以獲得輸入焦點。例如,MicrosoftWord中常用的【查找和替換】對話框,就是非模態(tài)對話框。目前一百一十六頁\總數(shù)四百四十一頁\編于三點2.非模態(tài)對話框模態(tài)對話框與非模態(tài)對話框的區(qū)別:(1)模態(tài)對話框由CDialog::DoModal函數(shù)創(chuàng)建,而非模態(tài)對話框由CDialog::Create函數(shù)來創(chuàng)建。(2)CDialog::DoModal函數(shù)負責顯示其所創(chuàng)建的模態(tài)對話框,而非模態(tài)對話框需要調用CDialog::ShowWindow函數(shù)來顯示對話框。(3)CDialog::DoModal函數(shù)負責銷毀其所創(chuàng)建的模態(tài)對話框,而非模態(tài)對話框必須調用CWnd::DestoryWindow函數(shù)來關閉對話框。目前一百一十七頁\總數(shù)四百四十一頁\編于三點6.2.2創(chuàng)建模態(tài)對話框在前面的章節(jié)中,已經(jīng)介紹過如何創(chuàng)建一個基于對話框的工程。下面將創(chuàng)建一個基于單文檔的工程,并為其添加一個模態(tài)對話框。這個過程大致分為4個部分:創(chuàng)建模態(tài)對話框、創(chuàng)建對話框類、向程序中添加代碼、添加消息響應函數(shù)。目前一百一十八頁\總數(shù)四百四十一頁\編于三點6.3非模態(tài)對話框創(chuàng)建非模態(tài)對話框與創(chuàng)建模態(tài)對話框的方式不同。模態(tài)對話框通過DoModal()函數(shù)來創(chuàng)建,而非模態(tài)對話框通過Create()函數(shù)來創(chuàng)建。非模態(tài)對話框的一個重要作用就是在傳遞數(shù)據(jù)。也就是說,將非模態(tài)對話框中的數(shù)據(jù)及時的反應到其他窗口。下面通過實例向讀者介紹如何創(chuàng)建與使用非模態(tài)對話框。目前一百一十九頁\總數(shù)四百四十一頁\編于三點6.4通用對話框通用對話框是指在Windows程序中有著特定功能的對話框。用戶不必設計這類對話框,因為Windows系統(tǒng)本身提供了支持這類對話框的函數(shù)。通過調用這些函數(shù),可以啟動標準對話框來進行文件的打開和保存、搜索和替換、顏色選擇、字體選擇以及打印。目前一百二十頁\總數(shù)四百四十一頁\編于三點6.4.1文件對話框文件對話框(CFileDialog)可以實現(xiàn)Windows標準的打開和保存文件。也就是說,文件對話框包括兩種:【打開】對話框,用于打開文件,如左圖所示;【保存】對話框,用于保存文件,如右圖所示。目前一百二十一頁\總數(shù)四百四十一頁\編于三點6.4.1文件對話框CFileDialog類的構造函數(shù)原型如下:其中各參數(shù)解釋如下。bOpenFileDialog:表示文件對話框的類型。如果為TRUE,則為【打開】對話框。如果為FALSE,則為【保存】對話框。lpszDefExt:表示默認文件的擴展名。lpszFileName:表示文件名。dwFlags:表示文件操作標記。目前一百二十二頁\總數(shù)四百四十一頁\編于三點6.4.1文件對話框lpszFilter:表示過濾器。所謂過濾器就是一個限定字符串,對參數(shù)進行限制。pParentWnd:表示父窗口指針。CFileDialog類提供了許多用于獲取文件信息的函數(shù)。GetPathName():用于獲取所選文件的完整路徑。GetFileName():用于獲取所選文件名。GetFileExt():用于獲取所選文件的擴展名。GetFileTitle():用于獲取所選文件的標題名。目前一百二十三頁\總數(shù)四百四十一頁\編于三點6.4.2顏色對話框顏色對話框(CColorDialog)是幫助用戶設置顏色,如下圖所示。CColorDialog類的構造函數(shù)原型如下:目前一百二十四頁\總數(shù)四百四十一頁\編于三點6.4.2顏色對話框其中各參數(shù)解釋如下。clrInit:表示默認選擇的顏色。dwFlags:表示顏色選擇標記。pParentWnd:表示父窗口指針。CColorDialog類提供了許多用于獲取顏色信息的函數(shù)。GetColor():用于獲取當前選擇的顏色。GetSavedCustomColors():用于獲取所選擇的顏色。SetCurrentColor():用于設置當前的顏色。OnColorOK():用于驗證輸入對話框的顏色。目前一百二十五頁\總數(shù)四百四十一頁\編于三點6.4.3字體對話框字體對話框(CFontDialog)用于字體的設置,如下圖所示。CFontDialog類的構造函數(shù)原型如下:目前一百二十六頁\總數(shù)四百四十一頁\編于三點6.4.3字體對話框其中各參數(shù)解釋如下。lplfInitial:用于初始化對話框中的字體設置。dwFlags:表示該對話框的風格。pdcPrinter:表示一個打印機的對象。pParentWnd:表示父窗口指針。CFontDialog類提供了許多用于獲取字體信息的函數(shù)。GetCurrentFont():用于獲取所選文字的屬性。GetFaceName():用于獲取所選文字的字體名稱。GetSize():用于獲取所選文字的大小。GetColor():用于獲取所選文字的顏色。GetWeight():用于獲取所選文字的磅值。IsUnderline():用于獲取所選文字是否有下畫線。IsBold():用于獲取所選文字是否為粗體。IsItalic():用于獲取所選文字是否為斜體。目前一百二十七頁\總數(shù)四百四十一頁\編于三點6.4.4查找和替換對話框查找和替換對話框是CFindReplaceDialog類實現(xiàn)的。這兩個對話框是通用對話框中比較特殊的兩個,因為它們是非模態(tài)對話框。【查找】對話框如圖6.27所示,【查找/替換】對話框如下圖所示。目前一百二十八頁\總數(shù)四百四十一頁\編于三點6.4.4查找和替換對話框作為非模態(tài)對話框,必須用new操作符分配存儲空間,再用Create()函數(shù)進行初始化,最后用ShowWindow()函數(shù)顯示對話框。CFindReplaceDialog類中Create函數(shù)的原型如下:目前一百二十九頁\總數(shù)四百四十一頁\編于三點6.4.4查找和替換對話框其中各參數(shù)解釋如下。bFindDialogOnly:表示對話框的類型。如果該值為TRUE,表示【查找】對話框。如果為FALSE,則為【查找/替換】對話框。LpszFindWhat:表示要查找的字符串。LpszReplaceWhat:表示用于替換的字符串。DwFlag:標志位,用于設置對話框。它由一個或多個標志組成。PParentWnd:表示父窗口指針。CFindReplaceDialog類提供了許多用于獲取查找替換信息的函數(shù)。FindNext:查找下一個匹配的字符串。GetFindString:返回查找到的字符串。GetReplaceString:返回替換的字符串。ReplaceAll:確定是否全部替換。ReplaceCurrent:確定是否替換當前字符串。SearchDown:確定是否向下查找。目前一百三十頁\總數(shù)四百四十一頁\編于三點6.4.5打印對話框打印對話框(CPrintDialog)有兩種功能。它既可以實現(xiàn)Windows標準的【打印】對話框,如左圖所示,還可以實現(xiàn)【打印設置】對話框,如右圖所示。目前一百三十一頁\總數(shù)四百四十一頁\編于三點6.4.5打印對話框CPrintDialog類的構造函數(shù)原型如下:其中各參數(shù)解釋如下。bPrintSetupOnly:表示是否帶設置對話框。如果為TRUE,則創(chuàng)建的是【打印】對話框。如果為FALSE,則創(chuàng)建的是【打印設置】對話框。dwFlags:用于設置對話框標記。pParentWnd:表示父窗口指針。目前一百三十二頁\總數(shù)四百四十一頁\編于三點6.4.5打印對話框CPrintDialog類提供了許多用于獲取打印信息的函數(shù)。GetCopies:用于獲取對話框設置打印的份數(shù)。GetDefaults:返回打印機默認的設置。GetFormPage:返回打印范圍的起始頁面。GetToPage:返回打印范圍的終止頁面。GetPrinterDC:返回所選打印設備的HDC設備句柄。PrintAll:確定是

溫馨提示

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

評論

0/150

提交評論