版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第7章章 Visual C+可視化編程基礎(chǔ)可視化編程基礎(chǔ)7.1 Windows程序設(shè)計(jì)概述程序設(shè)計(jì)概述7.2 API及應(yīng)用程序基本框架及應(yīng)用程序基本框架7.3 MFC及應(yīng)用程序框架及應(yīng)用程序框架7.4 對話框與常用控件對話框與常用控件7.5 菜單、工具欄與狀態(tài)欄設(shè)計(jì)菜單、工具欄與狀態(tài)欄設(shè)計(jì)7.6 文檔文檔/視圖結(jié)構(gòu)應(yīng)用程序視圖結(jié)構(gòu)應(yīng)用程序7.7 程序舉例程序舉例7.1.1基于Visual C+的Windows應(yīng)用程序設(shè)計(jì)方法 用Visual C+編寫Windows應(yīng)用程序主要有兩種方法: 1Application Programming InterfaceAPI API是Windows系統(tǒng)和
2、Windows應(yīng)用程序間的標(biāo)準(zhǔn)程序接口,應(yīng)用程序可以通過此接口訪問系統(tǒng)。凡是在Windows工作環(huán)境下執(zhí)行的應(yīng)用程序都可以通過調(diào)用API函數(shù)來實(shí)現(xiàn)各種功能的操作。在Windows程序設(shè)計(jì)的初期,程序員所能做使用的編程工具就只有使用API函數(shù),通過API函數(shù)的調(diào)用組合,就可以搭建出各種界面豐富、功能靈活的應(yīng)用程序。 2Microsoft Foundation ClassMFC MFC是Visual C+的核心,是 Microsoft公司提供的用來編寫Windows應(yīng)用程序的C+類庫, 集成了大量已經(jīng)預(yù)先定義好的類,大約有200多個(gè),用戶可以根據(jù)編程的需要調(diào)用相應(yīng)的類或自定義有關(guān)的類。這些類可以分
3、成兩種:一是CObject類的派生類;二是非CObject派生類,如表示點(diǎn)的CPoint類,表示矩形的CRect類等。7.1.2 Windows程序設(shè)計(jì)的基本概念 Windows應(yīng)用程序的特點(diǎn):應(yīng)用程序的特點(diǎn):具有標(biāo)準(zhǔn)的圖形用戶界面。具有標(biāo)準(zhǔn)的圖形用戶界面。具有與硬件無關(guān)的特性。具有與硬件無關(guān)的特性。采用采用“消息傳遞,事件驅(qū)動(dòng)消息傳遞,事件驅(qū)動(dòng)”的運(yùn)行機(jī)制。的運(yùn)行機(jī)制。 1窗口與對象窗口與對象 窗口是應(yīng)用程序與用戶之間交互的接口環(huán)境。用戶可以通過窗口是應(yīng)用程序與用戶之間交互的接口環(huán)境。用戶可以通過窗口輸入數(shù)據(jù),控制應(yīng)用程序的運(yùn)行;應(yīng)用程序可以通過窗口窗口輸入數(shù)據(jù),控制應(yīng)用程序的運(yùn)行;應(yīng)用程序
4、可以通過窗口顯示數(shù)據(jù)和運(yùn)行狀態(tài)。顯示數(shù)據(jù)和運(yùn)行狀態(tài)。 對象是指對象是指Windows的規(guī)范部件,包括各種窗口、菜單、按鈕、的規(guī)范部件,包括各種窗口、菜單、按鈕、對話框以及程序模塊等。對話框以及程序模塊等。 2常用常用Windows數(shù)據(jù)類型數(shù)據(jù)類型 Windows應(yīng)用程序的源程序中包含種類繁多的數(shù)據(jù)類型,應(yīng)用程序的源程序中包含種類繁多的數(shù)據(jù)類型,其中其中windows.h是用戶調(diào)用系統(tǒng)功能的關(guān)鍵,文件中定義了是用戶調(diào)用系統(tǒng)功能的關(guān)鍵,文件中定義了Windows系統(tǒng)使用的數(shù)據(jù)類型。系統(tǒng)使用的數(shù)據(jù)類型。 3句柄句柄 句柄是指系統(tǒng)創(chuàng)建對象后返回的用來代表該對象的一個(gè)唯句柄是指系統(tǒng)創(chuàng)建對象后返回的用來代
5、表該對象的一個(gè)唯一的一的4字節(jié)長整數(shù)值,是整個(gè)字節(jié)長整數(shù)值,是整個(gè)Windows編程的基礎(chǔ),用于標(biāo)識應(yīng)編程的基礎(chǔ),用于標(biāo)識應(yīng)用程序中不同的對象和同類對象中不同的實(shí)例。例如,一個(gè)窗用程序中不同的對象和同類對象中不同的實(shí)例。例如,一個(gè)窗口、按鈕、圖標(biāo)、滾動(dòng)條、輸出設(shè)備、控件或者文件等。應(yīng)用口、按鈕、圖標(biāo)、滾動(dòng)條、輸出設(shè)備、控件或者文件等。應(yīng)用程序通過句柄能夠訪問相應(yīng)的對象信息,它代表對對象的引用。程序通過句柄能夠訪問相應(yīng)的對象信息,它代表對對象的引用。 4事件驅(qū)動(dòng)事件驅(qū)動(dòng) Windows應(yīng)用程序以消息為基礎(chǔ),以事件驅(qū)動(dòng)之。應(yīng)用程序以消息為基礎(chǔ),以事件驅(qū)動(dòng)之。Windows應(yīng)用程序啟動(dòng)之后將進(jìn)入一個(gè)
6、消息循環(huán),等待系統(tǒng)或應(yīng)用程序啟動(dòng)之后將進(jìn)入一個(gè)消息循環(huán),等待系統(tǒng)或應(yīng)用程序的消息,消息的產(chǎn)生是因?yàn)槭录l(fā)生的結(jié)果,應(yīng)用程序的消息,消息的產(chǎn)生是因?yàn)槭录l(fā)生的結(jié)果,Windows程序設(shè)計(jì)主要圍繞編寫事件或消息的響應(yīng)函數(shù)上。程序設(shè)計(jì)主要圍繞編寫事件或消息的響應(yīng)函數(shù)上。 5消息及其在消息及其在Windows編程中的應(yīng)用編程中的應(yīng)用 Windows應(yīng)用程序的運(yùn)行是依靠事件來驅(qū)動(dòng),利用一個(gè)應(yīng)用程序的運(yùn)行是依靠事件來驅(qū)動(dòng),利用一個(gè)while循環(huán)實(shí)現(xiàn)不斷等待,如果有事件發(fā)生,操作系統(tǒng)會(huì)以消息循環(huán)實(shí)現(xiàn)不斷等待,如果有事件發(fā)生,操作系統(tǒng)會(huì)以消息的形式傳遞給應(yīng)用程序,應(yīng)用程序會(huì)捕獲相應(yīng)的消息,然后通的形式傳遞給應(yīng)
7、用程序,應(yīng)用程序會(huì)捕獲相應(yīng)的消息,然后通過調(diào)用相應(yīng)的函數(shù)響應(yīng)消息。過調(diào)用相應(yīng)的函數(shù)響應(yīng)消息。7.1.3 Windows應(yīng)用程序中的常見消息 消息在消息在Windows程序設(shè)計(jì)中是很關(guān)鍵的因素,在程序設(shè)計(jì)中是很關(guān)鍵的因素,在API程序設(shè)計(jì)方法中要求熟練記憶常見消息,但是在程序設(shè)計(jì)方法中要求熟練記憶常見消息,但是在MFC程序設(shè)計(jì)方法中只要求了解這些消息的相關(guān)含義即程序設(shè)計(jì)方法中只要求了解這些消息的相關(guān)含義即可。可。 1鼠標(biāo)消息鼠標(biāo)消息 2鍵盤消息鍵盤消息 3關(guān)閉窗口消息關(guān)閉窗口消息 4退出程序消息退出程序消息 5重畫消息重畫消息 7.2.1 Windows API應(yīng)用程序?qū)嵗?共有上千個(gè)標(biāo)準(zhǔn)的共有
8、上千個(gè)標(biāo)準(zhǔn)的API函數(shù),調(diào)用方法與調(diào)用函數(shù),調(diào)用方法與調(diào)用C語言庫語言庫函數(shù)類似函數(shù)類似示例:示例:#include windows.hint APIENTRY WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance ,LPSTR lpCmdLine ,int nCmdShow)MessageBox(NULL,簡單的簡單的Windows應(yīng)用程序!應(yīng)用程序!,API函數(shù)示例函數(shù)示例,MB_OK);return 0;注意:注意:不是典型的Windows應(yīng)用程序,典型WinMain具有固定結(jié)構(gòu),完成三個(gè)任務(wù): 注冊窗口類、創(chuàng)建并初始化窗口、創(chuàng)建消息循
9、環(huán)注冊窗口類、創(chuàng)建并初始化窗口、創(chuàng)建消息循環(huán)7.2.2 Windows API應(yīng)用程序結(jié)構(gòu)分析 Windows應(yīng)用程序具有相對固定的基本結(jié)構(gòu),其中由入口函數(shù)WinMain和窗口函數(shù)構(gòu)成基本框架,并包含各種數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)與函數(shù)等。 1WinMain函數(shù) WinMain函數(shù)是所有Windows應(yīng)用程序的入口,類似于C語言中的main函數(shù),其功能是完成一系列的定義和初始化工作,并產(chǎn)生消息循環(huán)。 WinMain函數(shù)有三個(gè)基本的組成部分:函數(shù)說明、初始化和消息循環(huán)。 2窗口函數(shù) 窗口函數(shù)是應(yīng)用程序處理接收到的消息的函數(shù),其中包含了應(yīng)用程序?qū)Ω鞣N可能接收到的消息的處理過程。 7.3.1 MFC概述 微
10、軟基礎(chǔ)類庫(MFC)是微軟為Windows程序員提供的一個(gè)面向?qū)ο蟮腤indows編程接口,它封裝了大部分Windows API函數(shù),大大簡化了Windows編程工作。Microsoft公司的MFC具有以下特點(diǎn): 1完全支持所有的Windows函數(shù)、控制、消息、GDI(圖形設(shè)備接口)基本圖形函數(shù)、菜單以及對話框。 2使用與傳統(tǒng)的Windows API同樣的命名規(guī)則,因此,一個(gè)類所能完成的工作可直接從名字得知。 3不使用容易產(chǎn)生錯(cuò)誤的switch/case語句。 4通過發(fā)送有關(guān)對象信息到文件的能力,來提供更好的判斷支持。也可以確認(rèn)成員變量。 5代碼少,速度快,容錯(cuò)處理能力強(qiáng)。 6在運(yùn)行時(shí)確定數(shù)據(jù)
11、對象的設(shè)計(jì)。 7.3.2 應(yīng)用程序框架在Visual C+中,可以創(chuàng)建以下3類典型的Windows 應(yīng)用程序,它們都是通過MFC AppWizard(exe)(以下簡稱 AppWizard)向?qū)?chuàng)建的: (1)基于對話框的應(yīng)用程序:這類程序適合于文檔較少而交互操作較多的應(yīng)用場合,如Windows自帶的計(jì)算器程序。 (2)單文檔界面(SDI)應(yīng)用程序:這類程序一次只能打開一個(gè)文檔,如Windows自帶的記事本程序。 (3)多文檔界面(MDI)應(yīng)用程序:這類程序可以同時(shí)打開多個(gè)文檔并進(jìn)行處理,處理的過程中很容易地進(jìn)行切換,如Microsoft Word。 對話框是Windows應(yīng)用程序中最重要的用
12、戶界面元素之一,是與用戶交互的重要手段。在Visual C+中,對話框既可以單獨(dú)組成一個(gè)簡單的應(yīng)用程序,又可以成為文檔/視圖結(jié)構(gòu)程序的資源。 7.4.1創(chuàng)建對話框程序的步驟 1建立基于對話框的MFC應(yīng)用程序框架 2放置控件,設(shè)置屬性,完成對話框窗口界面設(shè)計(jì) 3為控件連接變量,即為控件命名。 4添加并且編寫消息處理函數(shù)。 5編譯、鏈接并運(yùn)行應(yīng)用程序 由于對話框的代碼是以類為模塊來設(shè)計(jì)的,使用時(shí)需要在程序中加入該類的頭文件,并定義一個(gè)類對象,然后就可以直接使用該類的相關(guān)成員。使用的步驟如下: 1利用項(xiàng)目工作區(qū)ClassView打開相應(yīng)的.cpp文件,在該源文件的前面加上對話框類的頭文件。 假設(shè)我們
13、為對話框定義的類名為CMyDlg,則需在源文件的前面加上:#include “MyDlg.h” /注意頭文件前比類名少個(gè)大寫的C 2在需要調(diào)用的位置添加下列代碼: CMyDlg dlg; /定義對話框?qū)ο?dlg.DoModal(); /顯示對話框7.4.2對話框的調(diào)用 為了方便用戶的程序開發(fā),Visual C+提供了一些通用對話框和消息對話框供用戶使用。 1通用對話框 Windows提供了一組標(biāo)準(zhǔn)用戶界面的對話框,它們都有相應(yīng)的MFC庫中的類來支持。用來操作這些通用對話框的類就是CCommonDialog類,它從Cdialog類中派生,用戶可以與使用其他對話框一樣使用通用對話框。 2消息對話
14、框 消息對話框是最簡單的一種對話框,它只是用于顯示信息。在Visual C+6.0的MFC類庫中就提供相應(yīng)的函數(shù)實(shí)現(xiàn)這樣的功能,使用時(shí),只要在用戶程序任何地方調(diào)用它們即可。它們的函數(shù)原型如下:7.4.3通用對話框與消息對話框 int AfxMessageBox(LPCTSTR lpszText,UINT nType=MB_OK,UINT nIDHelp=0); int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption=NULL,UINT nType=MB_OK); 這兩個(gè)函數(shù)都是用于創(chuàng)建和顯示消息對話框的,只不過AfxMessageBox是全程函
15、數(shù),可用在任何地方。而MessageBox只能用于控件、對話框、窗口等一些窗口類中。例如:int n=MessageBox(輸入成績?,系統(tǒng)提示, MB_YESNO| MB_ICONQUESTION); if (n=IDYES)1控件添加的方法 2控件的選取 3控件的移動(dòng)、復(fù)制與刪除 4設(shè)定控件的Tab鍵次序 5控件的布局 6常用控件的控件通知消息 選擇指針靜態(tài)文本控件組框復(fù)選框組合框水平滾動(dòng)條旋轉(zhuǎn)滑塊列表控件Tab控件超文本控件月歷自定義控件圖像編輯框按鈕單選按鈕列表框垂直滾動(dòng)條進(jìn)度條熱鍵樹狀控件動(dòng)畫日期時(shí)間選擇IP地址擴(kuò)展組合框圖7.13 控件工具欄上下左右對齊水平或垂直方向均勻分布切換柵
16、格或向?qū)舷禄蜃笥揖又惺箍丶哂邢嗤膶挾然虼笮y試對話框圖7.15 控件布局工具欄7.4.4 控件基本操作7.4.5 CString 類 對字符串的存取及有關(guān)操作,還可通過標(biāo)準(zhǔn)對字符串的存取及有關(guān)操作,還可通過標(biāo)準(zhǔn)C+里的字里的字符串類符串類string(定義在(定義在string.h頭文件中)和頭文件中)和MFC中的中的CString類(定義在類(定義在afx.h頭文件中)。頭文件中)。 string是一種用戶自定義的數(shù)據(jù)類型,它由是一種用戶自定義的數(shù)據(jù)類型,它由C+標(biāo)準(zhǔn)庫標(biāo)準(zhǔn)庫來支持,而不是來支持,而不是C+語言本身的一部分。在使用語言本身的一部分。在使用string數(shù)據(jù)數(shù)據(jù)類型之前,需
17、要在程序中包含頭文件類型之前,需要在程序中包含頭文件string并聲明其所在的并聲明其所在的名字空間名字空間std,如:,如:#include using namespace std;然后在程序中即可定義然后在程序中即可定義string類型的變量。如:類型的變量。如: string name=張三張三;下面主要介紹下面主要介紹MFC中中CString類的使用。類的使用。 當(dāng)要使用當(dāng)要使用MFC中的中的CString 類時(shí),首先必須選擇類時(shí),首先必須選擇“工工程程設(shè)置設(shè)置”命令,在命令,在“Microsoft Foundation Class”選擇選擇除除“Not Using MFC”以外的項(xiàng)目
18、。然后源程序的頭文件以外的項(xiàng)目。然后源程序的頭文件加上:加上:#include afx.h形式:形式: CString 對象名;對象名; CString 對象名對象名=字符串常量字符串常量; CString 對象名對象名(字符串常量字符串常量); CString 對象名對象名(字符字符,int n); /重復(fù)產(chǎn)生重復(fù)產(chǎn)生n個(gè)相同的字符個(gè)相同的字符例如:例如:CString s1=C+程序設(shè)計(jì)程序設(shè)計(jì); CString s(d,5);cout、=、=、 !=關(guān)系運(yùn)算關(guān)系運(yùn)算st1=”ASDF”st1st3false true 取指定位置的取指定位置的字符將字符將CString對象看成數(shù)組對象看成
19、數(shù)組st10st13A /第一個(gè)字符位置為第一個(gè)字符位置為0F2. 基本運(yùn)算基本運(yùn)算形式:形式: 函數(shù)值類型函數(shù)值類型 CString對象對象.成員函數(shù)名成員函數(shù)名(參數(shù)列表參數(shù)列表)(1)取子串)取子串形式:形式:CString Mid(int nFirst,int nCount) /取字符串中取字符串中nFirst位置開始的位置開始的nCount個(gè)字符個(gè)字符CString Left(int nCount) /取字符串的左邊取字符串的左邊nCount個(gè)字符個(gè)字符CString Right(int nCount) /取字符串的右邊取字符串的右邊nCount個(gè)字符個(gè)字符有定義:有定義:CStri
20、ng s(12345 );則:則:s.Mid(2,2)的值為的值為34 s.Left(3)的值為的值為1233. 成員成員函數(shù)函數(shù)(2)查看字符串信息)查看字符串信息int Find(TCHAR ch); /返回指定字符在串中的位置返回指定字符在串中的位置int Find(LPCTSTR lpszSub); /返回指定子串在串中的位置返回指定子串在串中的位置int GetLength(); /返回字符串的字符數(shù)返回字符串的字符數(shù)(3)字符串修改)字符串修改 void SetAt(int nIndex,TCHAR ch) /用字符替換指定位置上的字符用字符替換指定位置上的字符 int Inser
21、t(int nIndex, TCHAR ch) /將字符插入到指定位置,原位置的字符右移將字符插入到指定位置,原位置的字符右移 int Delete (int nIndex,int nCount=1) /從指定位置開始刪除一個(gè)或多個(gè)字符從指定位置開始刪除一個(gè)或多個(gè)字符 int Replace(TCHAR chOld, TCHAR chNew) /將新字符替換字符串中的老字符將新字符替換字符串中的老字符 int Replace(LPCTSTR lpszOld, LPCTSTR lpszNew) /同上,區(qū)別替換的是子字符串同上,區(qū)別替換的是子字符串(4) 轉(zhuǎn)換字符串轉(zhuǎn)換字符串 void Make
22、Upper() /將字符串中的所有字符轉(zhuǎn)換成大寫將字符串中的所有字符轉(zhuǎn)換成大寫 void MakeLower() /將字符串中的所有字符轉(zhuǎn)換成小寫將字符串中的所有字符轉(zhuǎn)換成小寫 void MakeReverse() /將字符串中各字符的順序倒轉(zhuǎn)將字符串中各字符的順序倒轉(zhuǎn) void Empty() /將字符串中的所有字符刪除將字符串中的所有字符刪除(5)格式化輸出)格式化輸出形式:形式:viod Format(格式字符串,輸出參數(shù)列表格式字符串,輸出參數(shù)列表);功能:功能:構(gòu)造一個(gè)輸出的字符串。構(gòu)造一個(gè)輸出的字符串。其中:其中:1)“格式字符串格式字符串”由輸出的文字和數(shù)據(jù)格式說明符組成,由輸出
23、的文字和數(shù)據(jù)格式說明符組成,文字可以是直接鍵入的各種字符,還可以是轉(zhuǎn)義符;數(shù)據(jù)文字可以是直接鍵入的各種字符,還可以是轉(zhuǎn)義符;數(shù)據(jù)格式說明符形式:格式說明符形式:%輸出寬度輸出寬度格式字符格式字符格式字符說 明d十進(jìn)制整數(shù)十進(jìn)制整數(shù)c輸出單個(gè)字符輸出單個(gè)字符s輸出字符串輸出字符串flff以小數(shù)形式輸出單精度數(shù)以小數(shù)形式輸出單精度數(shù)lf雙精度數(shù)雙精度數(shù)2)“輸出參數(shù)列表輸出參數(shù)列表” 表示要輸出的數(shù)據(jù),其個(gè)數(shù)與類型表示要輸出的數(shù)據(jù),其個(gè)數(shù)與類型必須與格式說明符依次對應(yīng)。必須與格式說明符依次對應(yīng)。 有定義:有定義:CString s; 則:則: s.Format(a1=%d,a2=%5.2f,a3=
24、%s,123,12.3,abc); couts;輸出:輸出:a1=123,a2=12.30,a3=abc【例【例7-1】使用使用CString 類對象數(shù)組存放若干個(gè)字符串,采類對象數(shù)組存放若干個(gè)字符串,采用選擇法排序,實(shí)現(xiàn)對字符串?dāng)?shù)組的排序。用選擇法排序,實(shí)現(xiàn)對字符串?dāng)?shù)組的排序。 程序:程序:#include iostream.h #include afx.h void main() CString s4=Fortran,C+,Pascal,Visual Basic,t; int i,j,m; for(i=0;i3;i+) /選擇法排序選擇法排序 m=i; for (j=i+1;j4;j+)
25、if (sjsm) m=j; t=si;si=sm; sm=t; for (i=0;i4;i+) couti siendl; 1 1靜態(tài)控件:靜態(tài)控件:包括靜態(tài)文本(Static Text)、組框和圖片控件(Picture)。 7.4.6常用控件與功能函數(shù)2 2按鈕控件按鈕控件 按鈕是用于實(shí)現(xiàn)一種開與關(guān)的輸入,常用的有:按鈕是用于實(shí)現(xiàn)一種開與關(guān)的輸入,常用的有:普通普通按鈕按鈕、復(fù)選框按鈕復(fù)選框按鈕和和單選按鈕單選按鈕。MFC的的CButton類封裝了類封裝了按鈕控件。按鈕控件。 普通按鈕也稱命令按鈕,可以立即產(chǎn)生某個(gè)動(dòng)作、執(zhí)普通按鈕也稱命令按鈕,可以立即產(chǎn)生某個(gè)動(dòng)作、執(zhí)行某個(gè)命令,一般不需要
26、連接變量;行某個(gè)命令,一般不需要連接變量; 單選按鈕必須成組出現(xiàn),用戶在一組按鈕中最多只能單選按鈕必須成組出現(xiàn),用戶在一組按鈕中最多只能選擇一項(xiàng)。設(shè)計(jì)時(shí)同一組的按鈕必須一個(gè)接一個(gè)地放進(jìn)對選擇一項(xiàng)。設(shè)計(jì)時(shí)同一組的按鈕必須一個(gè)接一個(gè)地放進(jìn)對話框中,中間不能插入其他控件,并且一個(gè)組的第一個(gè)按話框中,中間不能插入其他控件,并且一個(gè)組的第一個(gè)按鈕要選中鈕要選中“Group”屬性,表示一組的開始。一組按鈕中屬性,表示一組的開始。一組按鈕中只能對第一個(gè)按鈕連接變量;只能對第一個(gè)按鈕連接變量; 復(fù)選框按鈕列出了可供選擇的項(xiàng),用戶可根據(jù)需要選復(fù)選框按鈕列出了可供選擇的項(xiàng),用戶可根據(jù)需要選擇其中的一項(xiàng)或多項(xiàng),各項(xiàng)
27、之間的狀態(tài)互不相關(guān)。復(fù)選框擇其中的一項(xiàng)或多項(xiàng),各項(xiàng)之間的狀態(tài)互不相關(guān)。復(fù)選框通常被連接到通常被連接到Value類別類別BOOL類型的變量中。類型的變量中。 按 鈕 控 件 的 消 息 中 , 常 見 的 只 有 單 擊 按 鈕BN_CLICKED 和雙擊按鈕BN_DOUBLECLICKED。CButton類的成員函數(shù)SetCheck和GetCheck函數(shù)原型如下:格式:格式:viod SetCheck(int nCheck);說明:說明:設(shè)置復(fù)選框的選中狀態(tài)格式:格式:int GetCheck() const;說明:說明:獲取復(fù)選框的選中狀態(tài) 其中,nCheck和GetCheck函數(shù)返回的值可
28、以是:0表示不選中,1表示選中,2表示不確定。 C W n d 類 的 成 員 函 數(shù) C h e c k R a d i o B u t t o n 和GetCheckedRadioButton的原型如下:格式:格式:void CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton);說明:說明:設(shè)置單選按鈕的選中狀態(tài)格式:格式:int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);說明:說明:獲取單選按鈕的選中狀態(tài) 其中,
29、nIDFirstButton和nIDLastButton分別指定這組單選按鈕的第一個(gè)和最后一個(gè)按鈕ID值,nIDCheckButton用于 指 定 要 設(shè) 置 選 中 狀 態(tài) 的 按 鈕 I D 值 , 函 數(shù) 指 定GetCheckedRadioButton返回選中的按鈕ID值。格式:格式:UINT IsDlgButtonChecked( int nIDButton ) const;說明:說明:用于判定單選按鈕是否被選定,如果ID為nIDButton的按鈕被選定,則該函數(shù)的返回值為true,否則為false?!纠?-2】設(shè)計(jì)一個(gè)如圖7.19所示的程序。當(dāng)單擊“結(jié)果”按鈕后,在消息框中顯示選擇
30、情況。 3編輯框控件編輯框控件 1. 1. 重要屬性重要屬性 Multiline:定義該編輯框?yàn)槎嘈形谋究颉?Number:限定輸入的字符只能是數(shù)字字符。 Border:為控件創(chuàng)建邊界。 Read-only:編輯框成為只讀的,禁止用戶編輯。2. 成員函數(shù)成員函數(shù) 從從CWnd類繼承的成員函數(shù)類繼承的成員函數(shù)(1)將編輯框中的內(nèi)容復(fù)制出來)將編輯框中的內(nèi)容復(fù)制出來/復(fù)制到CString對象void GetWindowText( CString& rString ) const;示例:CString ch; m_e.GetWindowText(ch);/復(fù)制到數(shù)組int GetWindowText
31、( LPTSTR lpszStringBuf, int nMaxCount ) const;示例:char ch80; m_e.GetWindowText(ch,80);(2)設(shè)置編輯框中的內(nèi)容)設(shè)置編輯框中的內(nèi)容void SetWindowText( LPCTSTR lpszString );示例:char ch20=abcdefg; m_e.SetWindowText(ch);3. 連接變量連接變量Control:只能是只能是CEdit類型類型Value:CString int double等等注意:注意: 若一個(gè)編輯框連接了一個(gè)若一個(gè)編輯框連接了一個(gè)Value類別的變量,則該變類別的變量
32、,則該變量就表示這個(gè)編輯框,編輯框中顯示的內(nèi)容就是變量的量就表示這個(gè)編輯框,編輯框中顯示的內(nèi)容就是變量的值。但是,改變了編輯框的內(nèi)容并不會(huì)自動(dòng)更新對應(yīng)的值。但是,改變了編輯框的內(nèi)容并不會(huì)自動(dòng)更新對應(yīng)的變量的值,同樣,改變了變量的值也不會(huì)自動(dòng)刷新編輯變量的值,同樣,改變了變量的值也不會(huì)自動(dòng)刷新編輯框的內(nèi)容。若編輯框的內(nèi)容改變了,則應(yīng)使用語句框的內(nèi)容。若編輯框的內(nèi)容改變了,則應(yīng)使用語句UpdateData(TRUE);更新對應(yīng)的變量的值;若變量的值更新對應(yīng)的變量的值;若變量的值改變了,則應(yīng)使用語句改變了,則應(yīng)使用語句UpdateData(FALSE);刷新編輯框刷新編輯框的內(nèi)容。的內(nèi)容。void
33、CTESTDlg:OnCalc() UpdateData(TRUE); double a=m_a; double b=m_b; double c=m_c; m_x1=(-b+sqrt(b*b-4*a*c)/(2*a); m_x2=(-b-sqrt(b*b-4*a*c)/(2*a); UpdateData(FALSE);【例【例7.2】輸入一元二次方程輸入一元二次方程ax2+bx+c=0的系數(shù)的系數(shù)a、b、c, 計(jì)算并輸出兩個(gè)根計(jì)算并輸出兩個(gè)根x1、x2 m_x1(double) m_x2(double) m_a(double) m_b(double) m_c(double)void CTEST
34、Dlg:OnOk() OnOK();ID:OkID:Calc示范操作示范操作【例7-3】使用靜態(tài)文本框、組框、編輯框以及按鈕等控件設(shè)計(jì)一個(gè)如圖7.20所示的程序。當(dāng)用戶在語文、數(shù)學(xué)、英語編輯框輸入成績后,單擊“計(jì)算平均分”按鈕后,將顯示這三門課的平均成績。 (1 1)屬性設(shè)置)屬性設(shè)置Selection:選擇方式Single 單項(xiàng)選擇Multiple 多項(xiàng)選擇,但是忽略Ctrl和Alt鍵。Extended 允許使用Ctrl和Alt進(jìn)行多項(xiàng)選擇None 禁止選擇Sort:排序(2 2)成員函數(shù))成員函數(shù) 添加:添加:int AddString( LPCTSTR lpszItem ); 示列:示列
35、:m_l. AddString(“大學(xué)計(jì)算機(jī)基礎(chǔ)大學(xué)計(jì)算機(jī)基礎(chǔ));4列表框控件列表框控件 刪除:刪除:int DeleteString( UINT nIndex ); 示例:示例:m_l. DeleteString (4);/刪除第刪除第5個(gè)個(gè) 說明:說明:下標(biāo)從下標(biāo)從0開始開始 獲取當(dāng)前選定項(xiàng)目的序號獲取當(dāng)前選定項(xiàng)目的序號 int DeleteString( UINT nIndex ); 格式:格式:int GetCurSel( ) const; 示例:示例:int i=m_l.GetCurSel(); 獲取指定項(xiàng)目獲取指定項(xiàng)目 int GetText( int nIndex, LPTSTR
36、 lpszBuffer ) const; void GetText( int nIndex, CString& rString ) const; 示例:示例: char s120; CString s2;, m_l. GetText(4, s1); /讀入數(shù)組讀入數(shù)組 m_l. GetText(4, s2);/讀入讀入CString對象對象【例7-4】編寫一個(gè)如圖所示的能對列表框進(jìn)行項(xiàng)目添加、修改和刪除操作的應(yīng)用程序。“添加”按鈕的功能是將文本框中的內(nèi)容添加到列表框,“刪除”按鈕的功能是刪除列表框中選定的選項(xiàng)。如果要修改列表框,則首先選定選項(xiàng),然后單擊“修改”按鈕,所選的選項(xiàng)顯示在文本框中,當(dāng)
37、在文本框中修改完之后再單擊“修改確定”按鈕更新列表框。 5組合框控件組合框控件 Ctrl+Enter鍵 (1) 屬性設(shè)置(2) 成員函數(shù)成員函數(shù) 編輯框和列表框的成員函數(shù)編輯框和列表框的成員函數(shù) GetText()不能用不能用 int GetLBText( int nIndex, LPTSTR lpszText ) const; void GetLBText( int nIndex, CString& rString ) const;(3) 組合框發(fā)出的消息組合框發(fā)出的消息 CBN_SELECTCHANGE:選項(xiàng)改變:選項(xiàng)改變 CBN_EDITCHANGE:編輯框中文本改變:編輯框中文本改變【
38、例7-5】設(shè)計(jì)一個(gè)如圖7.23所示的對話框。如果單擊“確定”按鈕,則用MessageBox顯示所設(shè)置的信息。 6 6滾動(dòng)條控件滾動(dòng)條控件 滾動(dòng)條是滾動(dòng)條是CScrollBarCScrollBar類的對象,是類的對象,是WindowsWindows應(yīng)用程序中一應(yīng)用程序中一個(gè)很重要的控件,通常附在對話框上用來協(xié)助觀察數(shù)據(jù)或確個(gè)很重要的控件,通常附在對話框上用來協(xié)助觀察數(shù)據(jù)或確定位置,也可以用來作為數(shù)據(jù)輸入的工具。滾動(dòng)條有水平和定位置,也可以用來作為數(shù)據(jù)輸入的工具。滾動(dòng)條有水平和垂直兩種。垂直兩種。 主要成員函數(shù)的原型如下:主要成員函數(shù)的原型如下: (1)設(shè)置最大值和最小值)設(shè)置最大值和最小值 vo
39、id SetScrollRange(int nMinPos,int nMaxPos,BOOL bRedraw=TRUE); 最小值 最大值 TRUE時(shí)重畫(2)設(shè)置滑塊的位置)設(shè)置滑塊的位置 int SetScrollPos(int nPos, BOOL bRedraw=TRUE ); 滑塊的位置滑塊的位置 TRUE時(shí)重畫時(shí)重畫 滾動(dòng)條沒有消息,但對話框卻能接收到WM_HScroll(WM_Vscroll)void CTESTDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) / TODO: Add your messa
40、ge handler code here and/or call default CDialog:OnHScroll(nSBCode, nPos, pScrollBar); pScrollBar:指向用戶正在操作的滾動(dòng)條。 nPos:滑塊當(dāng)前位置。 nSBCode:用戶正在進(jìn)行的操作7進(jìn)度條控件進(jìn)度條控件 進(jìn)度條除了能表示一個(gè)過程的進(jìn)展情況外,使用進(jìn)度條還可以表明溫度、水平面或類似的測量值。 進(jìn)度條的風(fēng)格屬性有:進(jìn)度條是否有邊框、水平(默認(rèn))還是垂直、用塊還是平滑填充進(jìn)度條。 對進(jìn)度條的操作都是通過相關(guān)的CProgressCtrl類成員函數(shù)來實(shí)現(xiàn)的。 形式:形式:int SetPos(int
41、nPos); 說明:說明:設(shè)置進(jìn)度條的當(dāng)前位置。 形式:形式:int GetPos(); 說明:說明:獲取進(jìn)度條的當(dāng)前位置。 形式:形式:int SetStep(int nStep); 說明:說明:獲取進(jìn)度條的當(dāng)前位置。8旋轉(zhuǎn)按鈕控件旋轉(zhuǎn)按鈕控件 旋轉(zhuǎn)按鈕伙伴窗口 旋轉(zhuǎn)按鈕控件也稱增減按鈕,用戶單擊它們來增加或減小某個(gè)值。旋轉(zhuǎn)按鈕控件通常是與一個(gè)相拌的控件一起使用。若相伴的的控件的Tab次序剛好在旋轉(zhuǎn)按鈕的前面,則這時(shí)的旋轉(zhuǎn)按鈕控件可以自動(dòng)定位在它的伙伴窗口的傍邊,看起來就像一個(gè)單一的控件。一般將一個(gè)旋轉(zhuǎn)按鈕與一個(gè)編輯框一起使用,以提示用戶進(jìn)行數(shù)字輸入。如圖7.24所示。 默認(rèn)時(shí)旋轉(zhuǎn)按鈕控件的
42、最小值是100,最大值是0,看起來好像顛倒一樣,需要使用成員函數(shù)SetRange來改變。用戶單擊向上箭頭則增加數(shù)值,而單擊向下箭頭則減少數(shù)值。使用時(shí),不要忘記在旋轉(zhuǎn)按鈕控件的屬性對話框中選中“自動(dòng)結(jié)伴”和“設(shè)置結(jié)伴整數(shù)”。 MFC的CSpinButtonCtrl類提供了旋轉(zhuǎn)按鈕控件的各種操作函數(shù),常用的函數(shù)原型有:形式:形式:int SetPos(int nPos); 說明:說明:設(shè)置旋轉(zhuǎn)按鈕控件的當(dāng)前位置。 形式:形式:void SetRange(int nLower,int nUpper); 說明:說明:設(shè)置旋轉(zhuǎn)按鈕控件的上下限。 旋轉(zhuǎn)按鈕控件的通知消息只有一個(gè):UDN_DELTAPOS,
43、它是當(dāng)控件的當(dāng)前數(shù)值將要發(fā)生改變時(shí)向其父窗口發(fā)送的。9滑塊控件滑塊控件 刻度線滑塊 滑塊控件是由滑塊和可選的刻度線組成的。當(dāng)用戶用鼠標(biāo)或方向鍵移動(dòng)滑塊時(shí),該控件發(fā)送通知消息來表明本次改變。 滑塊是按照程序中指定的增量來移動(dòng)的。例如,如果用戶指定此滑塊的范圍是5,則滑塊只能有6個(gè)位置:在滑塊控件最左邊的一個(gè)位置和另外5個(gè)此范圍內(nèi)每隔一個(gè)增量的位置。通常,這些位置都是由相應(yīng)的刻度線來標(biāo)識的。 MFC的CSliderCtrl類提供了滑塊控件的各種操作函數(shù),常用的函數(shù)原型有: 形式:形式:int SetPos(int nPos); 說明:說明:設(shè)置滑塊控件的當(dāng)前位置。 形式:形式:void SetRa
44、nge(int nMin,int nMax,BOOL bRedraw=FALSE); 說明:說明:設(shè)置滑塊控件的上下限。 形式:形式:BOOL SetTic(int nTic); 說明:說明:設(shè)置滑塊控件中的一個(gè)刻度線的位置。 形式:形式:void SetTicFreq(int nFreq); 說明:說明:設(shè)置滑塊控件刻度線的疏密程度。 【例7-6】設(shè)計(jì)如圖7.27所示的界面,用滾動(dòng)條、滑塊與旋轉(zhuǎn)按鈕控件來雕整RGB的三個(gè)顏色分量。 1. 菜單的設(shè)計(jì)菜單的設(shè)計(jì)菜單屬于菜單屬于CMenu 類。類。Windows 應(yīng)用程序的菜單由兩應(yīng)用程序的菜單由兩部分組成:一是部分組成:一是主菜單主菜單,一般位
45、于頂層;,一般位于頂層;二是彈出菜單二是彈出菜單,它是單擊主菜單中的菜單項(xiàng)時(shí)彈出的子菜單。它是單擊主菜單中的菜單項(xiàng)時(shí)彈出的子菜單。 用編輯器設(shè)計(jì)菜單用編輯器設(shè)計(jì)菜單的主要操作有:的主要操作有: (1)顯示菜單)顯示菜單在工作區(qū)中選定在工作區(qū)中選定“ResourceView”,展開展開Menu ,雙擊其中的,雙擊其中的 IDR_MAINFRAME ,可以看到,可以看到由由 AppWizard 生成的標(biāo)準(zhǔn)菜單。生成的標(biāo)準(zhǔn)菜單。(2)刪除菜單項(xiàng))刪除菜單項(xiàng)選定菜單項(xiàng),然后按選定菜單項(xiàng),然后按 Del 鍵。鍵。 (3)添加菜單項(xiàng))添加菜單項(xiàng)雙擊空白菜單框,彈出雙擊空白菜單框,彈出“Menu Item
46、Properties”,輸入菜單項(xiàng)的標(biāo)題(名稱)。若菜單項(xiàng),輸入菜單項(xiàng)的標(biāo)題(名稱)。若菜單項(xiàng)有一個(gè)子菜單(單擊會(huì)彈出了一子菜單),則選定有一個(gè)子菜單(單擊會(huì)彈出了一子菜單),則選定“彈彈出出”,否則不要選定,否則不要選定“彈出彈出”;要輸入一條分割線,則選;要輸入一條分割線,則選定定“分隔符分隔符”。 (4)熱鍵字符和快捷鍵的設(shè)置)熱鍵字符和快捷鍵的設(shè)置假定菜單項(xiàng)的標(biāo)題假定菜單項(xiàng)的標(biāo)題是:是:紅色紅色 (&R)tCTRL+F1 ,則,則R設(shè)置為熱鍵字符,設(shè)置為熱鍵字符, CTRL+F1是快捷鍵,是快捷鍵,t 讓快捷鍵右對齊。讓快捷鍵右對齊。 打開打開Accelerator的資源項(xiàng),雙擊的資源
47、項(xiàng),雙擊IDR_MAINFRAME,出現(xiàn)快捷鍵資源列表。出現(xiàn)快捷鍵資源列表。 (5)使用快捷菜單)使用快捷菜單快捷菜單是一種浮動(dòng)式的彈出快捷菜單是一種浮動(dòng)式的彈出式菜單,當(dāng)用戶按下鼠標(biāo)右鍵時(shí),就會(huì)相應(yīng)地彈出一個(gè)浮式菜單,當(dāng)用戶按下鼠標(biāo)右鍵時(shí),就會(huì)相應(yīng)地彈出一個(gè)浮動(dòng)菜單,其中提供一個(gè)或多個(gè)與當(dāng)前操作相關(guān)的選項(xiàng)。動(dòng)菜單,其中提供一個(gè)或多個(gè)與當(dāng)前操作相關(guān)的選項(xiàng)。 用資源編輯器和用資源編輯器和MFC庫的庫的CMenu:TracePopupMenu函函數(shù)可以很容易地創(chuàng)建這樣的菜單,數(shù)可以很容易地創(chuàng)建這樣的菜單,該該函數(shù)原型如下:函數(shù)原型如下:BOOL TracePopupMenu(UNIT nFlags
48、,int x,int y,CWnd *pwnd,LPCRECT lpRect=NULL); 該函數(shù)用來顯示一個(gè)浮動(dòng)的彈出菜單,其位置由各參數(shù)該函數(shù)用來顯示一個(gè)浮動(dòng)的彈出菜單,其位置由各參數(shù)決定。其中,決定。其中,nFlags表示菜單在屏幕顯示的位置以及表示菜單在屏幕顯示的位置以及2按按鈕的標(biāo)志。鈕的標(biāo)志。2. 2. 工具欄的設(shè)計(jì)工具欄的設(shè)計(jì)工具欄是一系列工具按鈕的組合,借助它們可以提高工具欄是一系列工具按鈕的組合,借助它們可以提高用戶的工作效率。用戶的工作效率。Visual C+6.0系統(tǒng)保存了每個(gè)工具欄相系統(tǒng)保存了每個(gè)工具欄相應(yīng)的位圖,其中包括所有按鈕的圖像,而所有的按鈕圖像應(yīng)的位圖,其中包
49、括所有按鈕的圖像,而所有的按鈕圖像具有相同的尺寸(具有相同的尺寸(16像素寬,像素寬,15像素高像素高),它們在位圖中),它們在位圖中的排列次序與屏幕上按鈕在工具欄上的次序相同。的排列次序與屏幕上按鈕在工具欄上的次序相同。 (1)使用工具欄編輯器)使用工具欄編輯器選擇選擇Resource View選項(xiàng)卡,選項(xiàng)卡,雙擊雙擊“Toolbar”項(xiàng)中的項(xiàng)中的IDR_MAINFRAME,打開工具欄,打開工具欄編輯器。編輯器。 (2)工具欄和菜單相結(jié)合)工具欄和菜單相結(jié)合工具欄和菜單相結(jié)合是指工具欄和菜單相結(jié)合是指當(dāng)選擇工具按鈕或菜單命令時(shí),操作結(jié)果是一樣的。使它當(dāng)選擇工具按鈕或菜單命令時(shí),操作結(jié)果是一樣的。使它們結(jié)合的具體方法是在工具按鈕的屬性對話框中將按鈕的們結(jié)合的具體方法是在工具按鈕的屬性對話框中將按鈕的ID號設(shè)置為相關(guān)聯(lián)的菜單項(xiàng)號設(shè)置為相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車輛質(zhì)押貸款合同模板5篇
- 二零二五版白酒市場調(diào)研與分析服務(wù)合同2篇
- 二零二五版便利店區(qū)域代理合作合同范本2篇
- 二零二五年度花卉市場花卉供貨與品牌孵化服務(wù)合同3篇
- 二零二五年環(huán)境監(jiān)測地形圖測繪與污染防控合同3篇
- 二零二五版電影影視基地建設(shè)贊助合同3篇
- 2025版金融機(jī)構(gòu)出納人員現(xiàn)金擔(dān)保責(zé)任合同范本3篇
- 二零二五年建材城商鋪?zhàn)赓U合同環(huán)保及安全責(zé)任承諾書3篇
- 二零二五年度民間借貸合同管轄權(quán)變更協(xié)議3篇
- 二零二五年度房地產(chǎn)買賣居間合同模板(含稅費(fèi)繳納)下載3篇
- 餐飲行業(yè)智慧餐廳管理系統(tǒng)方案
- EGD殺生劑劑化學(xué)品安全技術(shù)說明(MSDS)zj
- GB/T 12229-2005通用閥門碳素鋼鑄件技術(shù)條件
- 超分子化學(xué)-第三章 陰離子的絡(luò)合主體
- 控制變量法教學(xué)課件
- 血壓計(jì)保養(yǎng)記錄表
- 食品的售后服務(wù)承諾書范本范文(通用3篇)
- 新外研版九年級上冊(初三)英語全冊教學(xué)課件PPT
- 初中中考英語總復(fù)習(xí)《代詞動(dòng)詞連詞數(shù)詞》思維導(dǎo)圖
- 植物和五行關(guān)系解說
- 因式分解法提公因式法公式法
評論
0/150
提交評論