對(duì)話框和常用控件市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第1頁(yè)
對(duì)話框和常用控件市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第2頁(yè)
對(duì)話框和常用控件市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第3頁(yè)
對(duì)話框和常用控件市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第4頁(yè)
對(duì)話框和常用控件市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩64頁(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)介

胡珊中山大學(xué)北校區(qū)生物醫(yī)學(xué)工程系電話:87331856-831Email:hushan@

高級(jí)程序設(shè)計(jì)對(duì)話框和常用控件第1頁(yè)2/10/10第四章對(duì)話框和慣用控件對(duì)話框(Dialogbox)使用控件(Controls)創(chuàng)建和使用方法慣用控件通用對(duì)話框和消息對(duì)話框?qū)υ捒蚝统S每丶?頁(yè)3/10/10(1)模式對(duì)話框:“模式對(duì)話框”是指當(dāng)對(duì)話框被彈出,用戶必須在對(duì)話框中作出對(duì)應(yīng)操作,在退出對(duì)話框之前,對(duì)話框所在應(yīng)用程序其它操作不能繼續(xù)執(zhí)行。模式對(duì)話框由系統(tǒng)自動(dòng)分配內(nèi)存空間,所以在對(duì)話框退出時(shí),對(duì)話框?qū)ο笞詣?dòng)刪除。(2)無(wú)模式對(duì)話框:“無(wú)模式對(duì)話框”是指當(dāng)對(duì)話框被彈出后,一直保留在屏幕上,用戶可繼續(xù)在對(duì)話框所在應(yīng)用程序中進(jìn)行其它操作;當(dāng)需要使用對(duì)話框時(shí),只需象激活普通窗口一樣單擊對(duì)話框所在區(qū)域即可激活。無(wú)模式對(duì)話框需要用戶來(lái)指定內(nèi)存空間,所以在對(duì)話框退出時(shí),還需要自己來(lái)刪除對(duì)話框?qū)ο蟆?/p>

對(duì)話框分類介紹對(duì)話框和常用控件第3頁(yè)4.1對(duì)話框使用1.資源分類一個(gè)單文檔應(yīng)用程序所使用資源可分為以下幾類:(1)快捷鍵列表(Accelerator)。一系列組合鍵集合,被應(yīng)用程序用來(lái)引發(fā)一個(gè)動(dòng)作。該列表普通與菜單命令相關(guān)聯(lián),用來(lái)代替鼠標(biāo)操作。(2)對(duì)話框(Dialog)。含有按鈕、列表框、編輯框等各種控件窗口。(3)圖標(biāo)(Icon)。代表應(yīng)用程序顯示在Windows桌面上位圖。(4)菜單(Menu)。用戶經(jīng)過(guò)菜單能夠完成應(yīng)用程序大部分操作。(5)字串表(StringTable)。應(yīng)用程序使用全局字符串或其它標(biāo)識(shí)符。(6)工具欄按鈕(Toolbar)。工具欄外觀是以一系列含有相同尺寸位圖組成,通常與一些菜單命令相對(duì)應(yīng),用以提升用戶工作效率。(7)版本信息(Version)。包含應(yīng)用程序版本、用戶注冊(cè)碼等相關(guān)信息。2.ID標(biāo)識(shí)符(P165表4.1)對(duì)話框和常用控件第4頁(yè)5/10/103.開發(fā)基于對(duì)話框應(yīng)用程序步驟(1)使用MFCAppWizard(exe)生成基于對(duì)話框應(yīng)用程序框架。(2)設(shè)置對(duì)話框?qū)傩?。(操作:“View”→“Properties”)(3)向?qū)υ捒蛑刑砑涌丶﨎utton1,并設(shè)置控件標(biāo)識(shí)IDC_BUTTON1。(4)編輯并測(cè)試對(duì)話框界面。(5)使用ClassWizard為所添加控件定義該控件事件將產(chǎn)生消息(BN_CLICKED),以及處理消息組員函數(shù)OnButton1。(操作:“View”→“ClassWizard”→“MessageMaps”)在4-5步后,MFC自動(dòng)為其上對(duì)象消息映射安排3個(gè)內(nèi)容。例:Ex_First對(duì)話框和常用控件第5頁(yè)(6)使用ClassWizard為所添加控件定義該控件相關(guān)聯(lián)數(shù)據(jù)組員變量。(操作:“View”→“ClassWizard”→“MemberVariables”)(7)為消息處理函數(shù)添加用戶代碼。(8)編譯并運(yùn)行應(yīng)用程序。voidCFirstDlg::OnButton1(){ MessageBox("Welcome!");}

對(duì)話框和常用控件第6頁(yè)7/10/10主要資源對(duì)話框資源:IDD_項(xiàng)目名_DIALOG——用于設(shè)計(jì)對(duì)話框界面。雙擊該資源ID號(hào)即可開啟對(duì)話框編輯器進(jìn)行界面設(shè)計(jì)。主要類應(yīng)用程序類:C項(xiàng)目名App——繼承CWinApp類而來(lái),用于定義全局對(duì)象theApp。

對(duì)話框類:C項(xiàng)目名Dlg——繼承CDialog類而來(lái),用于處理對(duì)話框應(yīng)用。

其中:OnInitDialog()——WM_INITDIALOG(對(duì)話框初始化)消息處理函數(shù)——該組員函數(shù)用于在對(duì)話框創(chuàng)建時(shí)而被顯示前進(jìn)行一些初始化工作?;趯?duì)話框應(yīng)用程序框架關(guān)鍵點(diǎn)對(duì)話框和常用控件第7頁(yè)8/10/10主要源代碼文件(1)應(yīng)用程序類:定義文件:項(xiàng)目名.h——公有繼承CWinApp類,從而得到派生類C項(xiàng)目名App。

實(shí)現(xiàn)文件:項(xiàng)目名.cpp——使用類C項(xiàng)目名App定義了一個(gè)全局對(duì)象theApp。(2)對(duì)話框類:定義文件:項(xiàng)目名Dlg.h——公有繼承CDialog類,從而得到派生類C項(xiàng)目名Dlg,可在此添加基于對(duì)話框應(yīng)用組員變量。實(shí)現(xiàn)文件:項(xiàng)目名Dlg.cpp——可在此添加基于對(duì)話框應(yīng)用消息處理函數(shù)用戶代碼。對(duì)話框和常用控件第8頁(yè)9/10/10基于對(duì)話框程序框架ClassViesResourceViewFileView對(duì)話框和常用控件第9頁(yè)10/10/10基于對(duì)話框程序框架對(duì)話框和常用控件第10頁(yè)4.在單文檔應(yīng)用程序中添加對(duì)話框在單文檔應(yīng)用程序中,添加一個(gè)對(duì)話框普通過(guò)程是:①添加對(duì)話框資源;②設(shè)置對(duì)話框?qū)傩?;③添加和布局控件;④?chuàng)建對(duì)話框類;⑤添加對(duì)話框代碼;⑥在程序中調(diào)用對(duì)話框。例:Ex_SDIHello對(duì)話框和常用控件第11頁(yè)①添加對(duì)話框資源(1)選擇“插入”→“資源”菜單,選擇對(duì)話框類型;表4.2列出各種類型對(duì)話框資源不一樣用途。對(duì)話框模板控件工具欄布局工具欄默認(rèn)標(biāo)識(shí)符對(duì)話框和常用控件第12頁(yè)②設(shè)置對(duì)話框?qū)傩栽趯?duì)話框模板處右擊鼠標(biāo),在快捷菜單中選擇“屬性”菜單項(xiàng),出現(xiàn)如圖所表示對(duì)話框?qū)傩源翱?。?duì)話框和常用控件第13頁(yè)③添加和布局控件控件選擇靜態(tài)文本組框復(fù)選框組合框水平滾動(dòng)條旋轉(zhuǎn)按鈕滑動(dòng)條列表視圖標(biāo)簽復(fù)合編輯月歷用戶定制控件靜態(tài)圖片編輯框按鈕單項(xiàng)選擇框列表框垂直滾動(dòng)條進(jìn)展條熱鍵樹形視圖動(dòng)畫日期選擇IP地址擴(kuò)展組合框控件工具欄對(duì)話框和常用控件第14頁(yè)控件選取、刪除、復(fù)制和布局控件布局工具欄對(duì)話框和常用控件第15頁(yè)④創(chuàng)建對(duì)話框類在對(duì)話框資源模板空白區(qū)域內(nèi)雙擊鼠標(biāo),彈出如圖所表示對(duì)話框,問(wèn)詢是否為對(duì)話框資源創(chuàng)建一個(gè)新類,單擊[OK]按鈕。出現(xiàn)NewClass對(duì)話框。在Name框中輸入類名比如:CFirstDlg。Baseclass和DialogID內(nèi)容是由系統(tǒng)自動(dòng)設(shè)置,普通無(wú)需修改。用戶對(duì)話框類是從基類CDialog派生而來(lái)。

對(duì)話框和常用控件第16頁(yè)⑤添加對(duì)話框代碼在MFCClassWizard對(duì)話框,選擇CFirstDlg在Messages框中找到并選定WM_INITDIALOG消息。在Memberfunctions列表框中選擇剛添加OnInitDialog函數(shù),單擊[EditCode]按鈕,在此函數(shù)中添加以下代碼:(P173)BOOLCFirstDlg::OnInitDialog(){ CDialog::OnInitDialog();

CStatic*pWnd=(CStatic*)GetDlgItem(IDC_STATIC_1); pWnd->SetWindowText("這是我第一個(gè)對(duì)話框!");

//SetWindowText用于設(shè)置文本控件顯示內(nèi)容

returnTRUE;

}對(duì)話框和常用控件第17頁(yè)⑥在程序中調(diào)用對(duì)話框_1在項(xiàng)目工作區(qū)窗口中選擇ResourceView頁(yè)面,雙擊資源“Menu”項(xiàng)中IDR_MAINFRAME,在菜單資源最右一項(xiàng),輸入新菜單項(xiàng)。在菜單空位置上雙擊鼠標(biāo)左鍵,則出現(xiàn)它屬性對(duì)話框,在標(biāo)題框中輸入“測(cè)試(&T)”。單擊“測(cè)試”菜單項(xiàng)下方空位置,在屬性對(duì)話框中,輸入標(biāo)題“對(duì)話框(&D)”,在ID框輸入該菜單項(xiàng)資源標(biāo)識(shí):ID_TEST_DLG,如圖示。對(duì)話框和常用控件第18頁(yè)打開MFCClassWizard對(duì)話框。在MessageMaps頁(yè)面中,從Classname列表中選擇CMainFrame,在IDs列表中選擇ID_TEST_DLG,然后在Messages框中選擇COMMAND消息。單擊[AddFunction]按鈕,輸入組員函數(shù)名稱。系統(tǒng)默認(rèn)函數(shù)名為OnTestDlg。在ClassWizardMemberfunctions列表中選擇新增加組員函數(shù)名,為此添加以下代碼:voidCMainFrame::OnTestDlg(){ CFirstDlgdlg; //定義對(duì)話框類對(duì)象

dlg.DoModal(); //顯示對(duì)話框}在OnTestDlg函數(shù)實(shí)現(xiàn)文件MainFrm.cpp前面添加CFirstDlg類包含語(yǔ)句,即:#include"FirstDlg.h"編譯并運(yùn)行應(yīng)用程序?qū)υ捒蚝统S每丶?9頁(yè)(1)在應(yīng)用程序類*APP.cpp源文件前加上包含對(duì)話框類頭文件.例:#include“MyDlg.h”(2)在InitInstance函數(shù)體中“returnTURE;”語(yǔ)句之前添加代碼:例:CMyDlgdlg;dlg.DoModal();⑥在程序中調(diào)用對(duì)話框_2對(duì)話框和常用控件第20頁(yè)4.2控件創(chuàng)建和使用方法1.控件創(chuàng)建方法控件創(chuàng)建方式有以下兩種:一是在對(duì)話框模板中用編輯器指定控件,即將控件父窗口指定為對(duì)話框,當(dāng)應(yīng)用程序開啟該對(duì)話框時(shí),Windows系統(tǒng)就會(huì)為對(duì)話框創(chuàng)建控件;而當(dāng)對(duì)話框消失時(shí),控件也隨之去除。二是將控件看作是任一窗口子窗口,并經(jīng)過(guò)調(diào)用對(duì)應(yīng)Create函數(shù)來(lái)創(chuàng)建。對(duì)話框和常用控件第21頁(yè)在OnInitDialog函數(shù)中中添加以下代碼:BOOLCEx_DlgCtrlsDlg::OnInitDialog(){ CDialog::OnInitDialog();…

m_btnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);//創(chuàng)建

CFont*font=this->GetFont(); //獲取對(duì)話框字體

m_btnWnd.SetFont(font); //設(shè)置控件字體

returnTRUE;

}使用Create函數(shù)創(chuàng)建控件

例P178例:Ex_DlgCtrls對(duì)話框和常用控件第22頁(yè)2.映射控件消息當(dāng)控件狀態(tài)發(fā)生改變時(shí),控件就會(huì)向其父窗口發(fā)送消息,這個(gè)消息稱為“通知消息”。例:打開Ex_DlgCtrls應(yīng)用程序,在對(duì)話框資源中添加一個(gè)按鈕控件 在MFCClassWizardIDs列表中選擇IDC_BUTTON1,然后在Messages框中選擇BN_CLICKED消息。單擊[AddFunction],添加函數(shù)OnButton1。對(duì)話框和常用控件第23頁(yè)為新增加組員函數(shù)添加以下代碼:編譯并運(yùn)行,當(dāng)單擊[Button1]按鈕時(shí),就會(huì)執(zhí)行OnButton1函數(shù),彈出一個(gè)消息對(duì)話框。voidCEx_DlgCtrlsDlg::OnButton1(){ MessageBox("你按下了\"Button1\"按鈕!");}對(duì)話框和常用控件第24頁(yè)3.映射控件通用消息經(jīng)過(guò)WM_COMMAND消息映射來(lái)處理一個(gè)或多個(gè)控件通用消息例:打開MFCClassWizard,添加OnCommand消息函數(shù)在OnCommand函數(shù)中添加以下代碼:BOOLCEx_DlgCtrlsDlg::OnCommand(WPARAMwParam,LPARAMlParam){ WORDnCode=HIWORD(wParam); //控件通知消息

WORDnID=LOWORD(wParam); //控件ID值

if((nID==201)&&(nCode==BN_CLICKED)) MessageBox("你按下了\"你好\"按鈕!"); if((nID==IDC_BUTTON1)&&(nCode==BN_CLICKED)) MessageBox("這是在OnCommand處理結(jié)果!"); returnCDialog::OnCommand(wParam,lParam);}例:Ex_DlgCtrls對(duì)話框和常用控件第25頁(yè)當(dāng)控件狀態(tài)發(fā)生改變時(shí),控件就會(huì)向其父窗口發(fā)送消息,這個(gè)消息稱為“通知消息”。typedefstructtagMSG{ //msgHWND hwnd; //接收到消息窗口句柄

UINT message; //消息

WPARAM wParam; //消息附加信息,它含義取決于messageLPARAM lParam; //消息附加信息,它含義取決于messageDWORD time; //消息傳送時(shí)時(shí)間

POINT pt; //消息傳送時(shí),光標(biāo)所在屏幕坐標(biāo)}MSG;對(duì)于普通控件來(lái)說(shuō),其通知消息通常是一條WM_COMMAND消息,這條消息wParam參數(shù)低位字中含有控件標(biāo)識(shí)符,wParam參數(shù)高位字則為通知代碼,lParam參數(shù)則是指向控件句柄。對(duì)話框和常用控件第26頁(yè)4.控件數(shù)據(jù)交換(DDX)和數(shù)據(jù)校驗(yàn)(DDV)DDX將數(shù)據(jù)組員變量同對(duì)話框類模板內(nèi)控件相連,使數(shù)據(jù)輕易地在控件之間傳輸。DDV用于數(shù)據(jù)校驗(yàn)。

例:為Ex_DlgCtrlsDlg類按鈕控件IDC_BUTTON1添加并使用其關(guān)聯(lián)變量m_RelBtn。選定所要關(guān)聯(lián)控件IDC_BUTTON1,單擊[AddVariable],在AddMemberVariable對(duì)話框中設(shè)置變量名稱、類別和數(shù)據(jù)對(duì)話框和常用控件第27頁(yè)28/10/10用MFC向?qū)榭丶砑雨P(guān)聯(lián)變量實(shí)際自動(dòng)完成了3項(xiàng)工作:①在其父窗口類頭文件(如Ex_DlgCtrlsDlg.h

)中,添加與控件關(guān)聯(lián)組員變量申明。②在其父窗口類實(shí)現(xiàn)文件(如Ex_DlgCtrlsDlg.cpp文件)類結(jié)構(gòu)函數(shù)中,添加數(shù)據(jù)組員變量一些初始化代碼。③在其父窗口類實(shí)現(xiàn)文件(如Ex_DlgCtrlsDlg.cpp

)DoDataExchange函數(shù)中,添加控件DDX/DDV代碼。對(duì)話框和常用控件第28頁(yè)在Ex_DlgCtrlsDlg.h文件中,添加控件關(guān)聯(lián)變量申明//DialogData //{{AFX_DATA(CEx_DlgCtrlsDlg) enum{IDD=IDD_EX_DLGCTRLS_DIALOG}; //枚舉類型

CButtonm_RelBtn; CString m_strEdit; //}}AFX_DATA對(duì)話框和常用控件第29頁(yè)在Ex_DlgCtrlsDlg.cpp文件中CEx_DlgCtrlsDlg結(jié)構(gòu)函數(shù)處:CEx_DlgCtrlsDlg::CEx_DlgCtrlsDlg(CWnd*pParent/*=NULL*/) :CDialog(CEx_DlgCtrlsDlg::IDD,pParent){ //{{AFX_DATA_INIT(CEx_DlgCtrlsDlg)

m_strEdit=_T(""); //}}AFX_DATA_INIT …}對(duì)話框和常用控件第30頁(yè)在Ex_DlgCtrlsDlg.cpp文件中DoDataExchange函數(shù)體內(nèi),添加了控件DDX/DDV代碼,它們都是一些以DDV_或DDX_開頭函數(shù)調(diào)用。voidCEx_DlgCtrlsDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //調(diào)用此函數(shù)作為DDX開始

//{{AFX_DATA_MAP(CEx_DlgCtrlsDlg)

DDX_Control(pDX,IDC_BUTTON1,m_RelBtn); DDX_Text(pDX,IDC_EDIT1,m_strEdit);//將IDC_EDIT1與m_strEdit進(jìn)行數(shù)據(jù)交換

DDV_MaxChars(pDX,m_strEdit,20); //校驗(yàn)m_strEdit最大字符個(gè)數(shù)不超出20 //}}AFX_DATA_MAP}對(duì)話框和常用控件第31頁(yè)32/10/10關(guān)于組員函數(shù):“CWnd∷UpdateData”——實(shí)現(xiàn)控件與其關(guān)聯(lián)數(shù)據(jù)組員變量間數(shù)據(jù)交換,如數(shù)據(jù)輸入和讀取。(P182)調(diào)用格式為:UpdateData(FALSE)——數(shù)據(jù)由控件相關(guān)聯(lián)組員變量向控件傳輸。調(diào)用格式為:UpdateData(TRUE)或UpdateData()——數(shù)據(jù)從控件向相關(guān)聯(lián)組員變量傳送。例:Ex_SDIHello(完成文本框內(nèi)數(shù)計(jì)算)對(duì)話框和常用控件第32頁(yè)33/10/105.慣用對(duì)話框控件訪問(wèn)方式(1)利用ClassWizard,將控件和變量相關(guān)聯(lián)(2)利用函數(shù)GetDlgItem()獲取控件指針CButtonm_Mybtn;Cstringm_strEdit;

//產(chǎn)生相關(guān)控件變量m_Mybtn.SetWindowText(m_strEdit);//獲取編輯框內(nèi)文本例:GetDlgItem(IDC_BUTTON1)->SetWindowText(m_strEdit);//獲取編輯框內(nèi)文本對(duì)話框和常用控件第33頁(yè)34/10/101.基本控件(P185,表4.5)靜態(tài)控件和按鈕編輯框列表框組合框滾動(dòng)條和進(jìn)展條旋轉(zhuǎn)按鈕和滑動(dòng)條圖像列表和標(biāo)簽控件慣用控件對(duì)話框和常用控件第34頁(yè)35/10/10(1)靜態(tài)控件:普通不接收用戶輸入,也不產(chǎn)生消息。靜態(tài)文本:慣用于標(biāo)示控件,即作為其它控件標(biāo)簽。組框:慣用于控件分組,即作為控件組分隔欄。靜態(tài)圖片:顯示圖標(biāo)、位圖或增強(qiáng)圖元文件、作為分隔欄用2.控件關(guān)鍵點(diǎn)慣用控件當(dāng)控件狀態(tài)發(fā)生改變時(shí),控件就會(huì)向其父窗口發(fā)送消息。當(dāng)父窗口接到消息后就會(huì)尋找該消息處理函數(shù)進(jìn)行處理,若找不到就轉(zhuǎn)作默認(rèn)處理。對(duì)話框和常用控件第35頁(yè)利用Picture控件顯示位圖添加位圖資源Insert→Resource,選擇Bitmap資源,單擊Import按鈕插入位圖;此時(shí)可添加ID為IDB_BITMAP1位圖;顯示位圖在對(duì)話框中添加Picture控件;在屬性對(duì)話框中選擇Type為Bitmap,在Image下拉列表中選擇位圖資源ID號(hào)。例:變換顯示圖片EX_11_1對(duì)話框和常用控件第36頁(yè)為IDC_BITMAP添加一個(gè)CStatic類型變量m_cBmp;在.h頭文件中:protected:

CBitmapcBmp;//申明位圖類對(duì)象inti;在.CPP文件中添加代碼:BOOLCPicDlgDlg::OnInitDialog(){//裝載位圖資源cBmp.LoadBitmap(IDB_BITMAP1); //給靜態(tài)控件設(shè)置HBITMAP類型位圖m_cBmp.SetBitmap(HBITMAP(cBmp));}為按鈕IDC_CHANGE添加BN_CLICK消息voidCPicDlgDlg::OnChange(){ if(i%2!=0) { //刪除圖片框中位圖cBmp.DeleteObject(); cBmp.LoadBitmap(IDB_BITMAP1); m_cBmp.SetBitmap(HBITMAP(cBmp)); } else { cBmp.DeleteObject(); cBmp.LoadBitmap(IDB_BITMAP2); m_cBmp.SetBitmap(HBITMAP(cBmp)); } i++; }對(duì)話框和常用控件第37頁(yè)38/10/10關(guān)于與控件關(guān)聯(lián)變量在ClassWizard對(duì)話框MemberVariables標(biāo)簽項(xiàng)中,Category框內(nèi)可選擇類型有兩種:Control和Value。Control所對(duì)應(yīng)變量類型是MFC為該控件封裝控件類;Value所對(duì)應(yīng)變量類型是數(shù)值類型,不一樣控件所提供關(guān)聯(lián)數(shù)值類型各不相同。同一個(gè)控件能夠關(guān)聯(lián)多個(gè)數(shù)據(jù)組員變量,但必須確保這些變量名互不相同,且這些組員變量在同一個(gè)類型不能有多個(gè),即Value和Control類型中各自只能有一個(gè)組員變量。慣用控件對(duì)話框和常用控件第38頁(yè)39/10/10按鈕:只有兩種消息BN_CLICKED(單擊按鈕)和BN_DOUBLECLICKED(雙擊按鈕)。慣用CButton類組員函數(shù):分別用來(lái)設(shè)置或獲取指定按鈕選中狀態(tài):voidSetCheck(intnCheck);intGetCheck()const;其中,nCheck和GetCheck函數(shù)返回值能夠是:0表示不選中,1表示選中,2表示不確定(僅用于三態(tài)按鈕)。同組多個(gè)單項(xiàng)選擇按鈕選中狀態(tài)設(shè)置或獲取:voidCheckRadioButton(intnIDFirstButton,intnIDLastButton,intnIDCheckButton);intGetCheckedRadioButton(intnIDFirstButton,intnIDLastButton);其中,nIDFirstButton和nIDLastButton分別指定同組單項(xiàng)選擇按鈕第一個(gè)和最終一個(gè)按鈕ID值,nIDCheckButton用來(lái)指定要設(shè)置選中狀態(tài)按鈕ID值,函數(shù)GetCheckedRadioButton返回被選中按鈕ID值。例:TEST對(duì)話框和常用控件第39頁(yè)40/10/10(3)編輯框:慣用屬性:Multiline:設(shè)置文本是否可多行顯示W(wǎng)antreturn:支持回車Password:輸入文本以”*”顯示慣用控件處理文本函數(shù):CWnd::SetWindowText():設(shè)置編輯框中初始文本CWnd::GetWindowText():取得編輯控件中文本LimitText():設(shè)置編輯控件能接收最大長(zhǎng)度SetSel():設(shè)置控件中當(dāng)前選項(xiàng)字符位置GetSel():獲取控件中當(dāng)前選項(xiàng)字符位置Cut():刪除選定文本Copy():復(fù)制選定文本到剪貼板上Paste():把剪貼板上文本復(fù)制到編輯框Undo():取消對(duì)文本最終一次編輯改變控件通知消息:P193,表4.8例:TestCal例:Ex_test1在此基礎(chǔ)上添加第二個(gè)對(duì)話框例:Ex_11_2對(duì)話框和常用控件第40頁(yè)41/10/10例TestCal:

建立一個(gè)簡(jiǎn)單計(jì)算程序?qū)υ捒蚝统S每丶?1頁(yè)42/10/10定義組員變量對(duì)話框和常用控件第42頁(yè)43/10/10增加事件處理函數(shù)對(duì)話框和常用控件第43頁(yè)44/10/10增加代碼:例voidCTestCalDlg::OnButtonCal(){ UpdateData(); switch(m_dOpr) { case0: m_fResult=m_fValue1+m_fValue2; break; case1: m_fResult=m_fValue1-m_fValue2; break; case2: m_fResult=m_fValue1*m_fValue2; break; case3: m_fResult=m_fValue1/m_fValue2; break; } UpdateData(false);}對(duì)話框和常用控件第44頁(yè)45/10/10例2:Ex_test1顯示新建對(duì)話框?yàn)樾陆▽?duì)話框創(chuàng)建新類:CEditDlg在函數(shù)CEx_test1Dlg::OnButton1處添加代碼: if(nID==IDC_RADIO1) { CEditDlgdlg; dlg.DoModal();}//顯示對(duì)話框增加包含CEditDlg頭文件代碼:

#include"EditDlg.h"在靜態(tài)文本框內(nèi)顯示初始值:0.00為CEditDlg增加WM_INITDIALOG消息映射在函數(shù)CEditDlg::OnInitDialog處添加代碼:

m_strAve="0.00"; UpdateData(FALSE);對(duì)話框和常用控件第45頁(yè)46/10/10顯示計(jì)算結(jié)果為按鈕IDC_BUTTON1添加BN_CLICKED消息在函數(shù)CEditDlg::OnButton1()添加代碼:

UpdateData(); doubleave=(double)(m_nScore1+m_nScore2+m_nScore3)/3.0; m_strAve.Format("%6.2f",ave); UpdateData(FALSE);例2:Ex_test1_續(xù)對(duì)話框和常用控件第46頁(yè)47/10/10(4)列表框列表框有單項(xiàng)選擇、多項(xiàng)選擇、擴(kuò)展多項(xiàng)選擇和非選四種類型,其中最慣用是單項(xiàng)選擇列表框。

列表框中列表項(xiàng)普通使用字符串來(lái)標(biāo)識(shí),有時(shí)也使用索引來(lái)確定。索引表明了項(xiàng)目在列表框中排列位置,它是以0起始。對(duì)話框和常用控件第47頁(yè)列表框慣用消息:P199表4.13列表框慣用操作:經(jīng)過(guò)調(diào)用CListBox類組員函數(shù)來(lái)實(shí)現(xiàn):(1)添加列表項(xiàng):intAddString(LPCTSTRlpszItem);intInsertString(intnIndex,LPCTSTRlpszItem);//lpszItem指定列表項(xiàng)字符串文本,nIndex指定索引值,使得新增列表項(xiàng)插在該項(xiàng)前,若為-1,則添加到最終(2)刪除列表項(xiàng)。指定列表項(xiàng)和去除列表框全部項(xiàng)目:intDeleteString(UINTnIndex);//nIndex指定要?jiǎng)h除列表項(xiàng)索引voidResetContent();(3)查找列表項(xiàng)。intFindString(intnStartAfter,LPCTSTRlpszItem)const;intFindStringExact(intnIndexStart,LPCTSTRlpszFind)const;其中,lpszFind和lpszItem指定要查找列表項(xiàng)文本,nStartAfter和nIndexStart指定查找開始位置,若為-1,則從頭至尾查找。查到后,這兩個(gè)函數(shù)都將返回所匹配列表項(xiàng)索引,不然返回LB_ERR。對(duì)話框和常用控件第48頁(yè)(4)列表框單項(xiàng)選擇。當(dāng)選中列表框中某個(gè)列表項(xiàng),用戶能夠使用CListBox::GetCurSel來(lái)獲取這個(gè)結(jié)果,CListBox::SetCurSel函數(shù)是用來(lái)設(shè)定某個(gè)列表項(xiàng)呈選中狀態(tài)(高亮顯示)。intGetCurSel()const; //返回當(dāng)前選擇項(xiàng)索引intSetCurSel(intnSelect);其中,nSelect指定要設(shè)置列表項(xiàng)索引。若要獲取某個(gè)列表項(xiàng)字符串,可使用以下函數(shù):intGetText(intnIndex,LPTSTRlpszBuffer)const;voidGetText(intnIndex,CString&rString)const;其中,nIndex指定列表項(xiàng)索引,lpszBuffer和rString是用來(lái)存放列表項(xiàng)文本。對(duì)話框和常用控件第49頁(yè)例:靜態(tài)控件響應(yīng)列表框EX_11_3為IDC_LIST1添加CListBox類型組員變量m_list;在初始化函數(shù)OnInitDialog()中,為L(zhǎng)istBox添加列表項(xiàng)CStringstr[6]={"數(shù)學(xué)","語(yǔ)文","英語(yǔ)","計(jì)算機(jī)","機(jī)電","信息"}; for(inti=0;i<6;i++) { m_list.InsertString(-1,str[i]);//插入列表項(xiàng) }為IDC_LIST1添加LBN_SELCHANGE消息:voidCListboxDlg::OnSelchangeList1(){ inti=0; CStringstr1[6]={"數(shù)學(xué)","語(yǔ)文","英語(yǔ)","計(jì)算機(jī)","機(jī)電","信息"}; i=m_list.GetCurSel();//取得選中項(xiàng)目標(biāo)索引值 CWnd*pWnd=this->GetDlgItem(IDC_SHOW);//用來(lái)取得指向靜態(tài)文本控件指針 pWnd->SetWindowText(str1[i]);//設(shè)置控件初始文本}對(duì)話框和常用控件第50頁(yè)51/10/10(5)組合框:組合框是編輯框與列表框結(jié)合,所以它同時(shí)含有二者特點(diǎn)。組合框有簡(jiǎn)單組合框、下拉式組合框和下拉式列表框三種類型,其中最簡(jiǎn)單是下拉式列表框。組合框慣用消息:P206表4.17CComboBox類慣用組員函數(shù):P206表4.18組合框操作分為兩類:一類是對(duì)組合框中列表框進(jìn)行操作,操作方法與列表框相同;另一類是對(duì)組合框中編輯框進(jìn)行操作,操作方法與編輯框相同。它們都是經(jīng)過(guò)調(diào)用CComboBox類組員函數(shù)來(lái)實(shí)現(xiàn)經(jīng)過(guò)屬性對(duì)話框添加列表項(xiàng)按CTRL+回車輸入列表項(xiàng)對(duì)話框和常用控件第51頁(yè)例:響應(yīng)組合框EX_11_4為IDC_COMBO添加CComboBox類變量m_select;在.h文件中申明一個(gè)類型為CString變量List;在OnInitDialog()函數(shù)中添加以下代碼:CStringstr[8]={"高等數(shù)學(xué)","語(yǔ)文","英語(yǔ)","計(jì)算機(jī)","數(shù)據(jù)結(jié)構(gòu)","JSP語(yǔ)言","網(wǎng)頁(yè)設(shè)計(jì)","VC++"};for(inti=0;i<=7;i++){ m_select.AddString(str[i]);} m_select.SetCurSel(0);//設(shè)置當(dāng)前被選中行位置為0 對(duì)話框和常用控件第52頁(yè)voidCComboBoxDlg::OnOK(){

GetDlgItemText(IDC_COMBO,list);//取得一個(gè)控件內(nèi)顯示文本 if(list==“”)//假如取得文本為空 { SetDlgItemText(IDC_STATIC,list);//設(shè)置控件顯示文本為空 list==""; } else { //假如在當(dāng)前全部行中查找指定字符串不存在時(shí) if(m_select.FindString(0,list)==CB_ERR) { m_select.InsertString(0,list);//插入字符串在列表頭部 SetDlgItemText(IDC_STATIC,list);//設(shè)置控件顯示文本 } else { SetDlgItemText(IDC_STATIC,list); }list==""; } }對(duì)話框和常用控件第53頁(yè)為IDC_COMBO添加CBN_SELCHANGE消息voidCComboBoxDlg::OnSelchangeCombo1(){ m_select.GetLBText(m_select.GetCurSel(),list);//獲取選擇列表項(xiàng) SetDlgItemText(IDC_STATIC,list);//在IDC_STATIC中顯示獲取列表項(xiàng) list==""; }IDC_COMBO對(duì)話框和常用控件第54頁(yè)55/10/10列表框組合框列表框與組合框示例_【例】Ex_shopping對(duì)話框和常用控件第55頁(yè)(6)旋轉(zhuǎn)按鈕控件①“旋轉(zhuǎn)按鈕控件”

是一對(duì)箭頭按鈕,用戶點(diǎn)擊它們來(lái)增加或減小某個(gè)值。注意一個(gè)旋轉(zhuǎn)按鈕通常與一個(gè)相伴控件一起使用,這個(gè)控件稱為“搭檔窗口”。②旋轉(zhuǎn)按鈕基本操作:經(jīng)過(guò)CSpinButtonCtrl類相關(guān)組員函數(shù)來(lái)實(shí)現(xiàn)。intSetBase(intnBase);

參數(shù)nBase表示控件新基數(shù),如10表示十進(jìn)制,16表示十六進(jìn)制等。intSetPos(intnPos);設(shè)置控件當(dāng)前位置voidSetRange(intnLower,intnUpper);設(shè)置控件范圍參數(shù)nPos表示控件新位置,它必須在控件上限和下限指定范圍之內(nèi)。nLower和nUpper表示控件上限和下限。任何一個(gè)界限值都不能大于0x7fff或小于-0x7fff。③旋轉(zhuǎn)按鈕控件通知消息:UDN_DELTAPOS,是在當(dāng)控件當(dāng)前數(shù)值將要改變時(shí)向其父窗口發(fā)送。旋轉(zhuǎn)按鈕搭檔窗口對(duì)話框和常用控件第56頁(yè)旋轉(zhuǎn)按鈕使用1.在旋轉(zhuǎn)按鈕屬性對(duì)話框中選擇Autobuddy和Setbuddyinteger屬性2.添加一個(gè)CSpinButtonCtrl類變量m_spin3.在OnInitDialog函數(shù)中添加以下代碼:

m_spin.SetRange(0,100);對(duì)話框和常用控件第57頁(yè)58/10/10滾動(dòng)條①滾動(dòng)條是一個(gè)獨(dú)立窗口,它含有直接輸入焦點(diǎn),但不能自動(dòng)地滾動(dòng)窗口內(nèi)容。依據(jù)滾動(dòng)條走向,分為垂直滾動(dòng)條和水平滾動(dòng)條。②滾動(dòng)條基本操作設(shè)置滾動(dòng)條滾動(dòng)范圍:intSetScrollRang設(shè)置滾動(dòng)塊位置:intSetScrollPos獲取滾動(dòng)條當(dāng)前范圍:intGetScrollRang獲取當(dāng)前滾動(dòng)位置:intGetScrollPos③滾動(dòng)條慣用消息WM_HSCROLL或WM_VSCROLL(7)滾動(dòng)條、滑動(dòng)條和進(jìn)展條滾動(dòng)箭頭按鈕滾動(dòng)條滾動(dòng)塊對(duì)話框和常用控件第58頁(yè)59/10/10滑動(dòng)條①滑動(dòng)條是由滑動(dòng)塊和可選刻度線組成。當(dāng)用戶用鼠標(biāo)或方向鍵移動(dòng)滑動(dòng)塊時(shí),該控件發(fā)送通知消息來(lái)表明這些改變。②滑動(dòng)條基本操作設(shè)置滑動(dòng)條滑動(dòng)范圍:intSetRang設(shè)置滑動(dòng)塊位置:intSetPos獲取滑動(dòng)條當(dāng)前范圍:intGetRang獲取當(dāng)前滑動(dòng)位置:intGetPos設(shè)置滑動(dòng)條刻度線位置:BOOLSetTic(intTic);設(shè)置滑動(dòng)條刻度線疏密程度:voidSetTicFreq(intFreq);③滑動(dòng)條慣用消息WM_HSCROLL或WM_VSCROLL例:TEST(SCROLL)

(7)滾動(dòng)條、滑動(dòng)條和進(jìn)展條滑動(dòng)塊刻度線對(duì)話框和常用控件第59頁(yè)滑動(dòng)條使用在對(duì)話框窗口添加一個(gè)滑動(dòng)條(IDC_SLIDER_DOUBLE)和一個(gè)靜態(tài)文本控件(IDC_STATIC_DOUBLE);為滑動(dòng)條添加CSliderCtrl類型變量m_slDouble;為靜態(tài)文本控件添加VALUE型變量CString;為滑動(dòng)條控件添加NM_CUSTOMERAW消息函數(shù),并添加以下代碼:在OnInitDialog函數(shù)中添加以下代碼:m_stDouble.Format("%d",m_slDouble.GetPos());UpdateData(false);m_slDouble.SetRange(0,50,FALSE);m_slDouble.SetPos(25);對(duì)話框和常用控件第60頁(yè)進(jìn)展條①進(jìn)展條能夠表示一個(gè)過(guò)程進(jìn)展情況,還可表明溫度、水平面或類似測(cè)量值。②進(jìn)展條基本操

溫馨提示

  • 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)論