![[高等教育]MFC對話框.doc_第1頁](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb1.gif)
![[高等教育]MFC對話框.doc_第2頁](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb2.gif)
![[高等教育]MFC對話框.doc_第3頁](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb3.gif)
![[高等教育]MFC對話框.doc_第4頁](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb4.gif)
![[高等教育]MFC對話框.doc_第5頁](http://file.renrendoc.com/FileRoot1/2019-1/5/a47fa9ba-cc3f-4635-82f5-54177d99fdbb/a47fa9ba-cc3f-4635-82f5-54177d99fdbb5.gif)
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
對話框和常用控件對話框是Windows應(yīng)用程序中最重要的用戶界面元素之一,是與用戶交互的重要手段,在程序運行過程中,對話框可用于撲捉用戶的輸入信息或數(shù)據(jù)。對話框是一個特殊類型的窗口,任何對窗口進行的操作(如:移動、最大化、最小化等)都可在對話框中實施,一般來說,在對話框中通過各種控件(如:按鈕、編輯框、列表框、組合框等)來和用戶進行交互??丶窃谙到y(tǒng)內(nèi)部定義的用于和用戶交互的基本單元。一、對話框的使用 Visual C+提供的對話框編輯器能“可視”地進行設(shè)計、編輯,并可用ClassWizard為對話框從CDialog基類中派生一個類,MFC的CDialog類封裝了用于對話框的顯示、關(guān)閉等操作的許多功能函數(shù),例如:DoModal函數(shù)用來顯示模式對話框并返回用戶操作的結(jié)果。1、模式對話框(為186附加舉例頁) 所謂模式對話框是指,當對話被彈出時,用戶必須在對話框中進行相應(yīng)的操作,在退出對話框之前,對話框所在的應(yīng)用程序不能繼續(xù)執(zhí)行。平常我們所見到的對話框大多是模式對話框。例:模式對話框(通過菜單命令彈出)1) 建一個單文檔(SDI)應(yīng)用程序2) 創(chuàng)建對話框模板InsertResource選中Dialog單擊New拖過一個靜態(tài)文本,鼠標對準它,按右鍵點properties改標題為“新建模式對話框”。3)鼠標右鍵對準對話框的任何位置單擊,選擇properties選項,設(shè)置ID為IDD_MYDIALOG4)給對話框創(chuàng)建類 雙擊新建對話框的任何位置,單擊OK,寫類名為“CMyDlg”,保證”CDialog”作為該類的基類。 5)創(chuàng)建菜單命令:a) 打開資源編輯器的菜單項Menub) 雙擊IDR_MAINFRAMEc) 雙擊右邊空白菜單,點開pop_up(讓它是空白),在名字處寫”彈出對話框(&A)”,ID處寫ID_PUPDIALOG6)將菜單命令連接到主框架程序中,完成ID_PUPDIALOG的消息映射: ViewClassWizard保證Class name里是CMainFrame,在ObjectIDs里找到ID_PUPDIALOG點黑Messages里(右邊)點COMMAND建立主框架對象方法并加代碼:void CMainFrame:OnPupdialog() CMyDlg MyDlg;MyDlg.DoModal(); /DoModal()是CDialog類成員函數(shù),通過調(diào)用該/函數(shù)將顯示對話框。 7)在CMainFrame.cpp文件里加: #include “MyDlg.h” / 之后運行。 2、無模式對話框(為186附加頁)非模式對話框,彈出后,可一直保留在屏幕上,用戶可繼續(xù)在應(yīng)用中進行其它操作或啟動其它應(yīng)用程序,當需要使用對話框時,只需象激活一般窗口一樣激活對話框即可。1)建一個SDI(單文檔)應(yīng)用程序2)創(chuàng)建對話框模板InsertResource點黑DialogNew拖過一個靜態(tài)文本,鼠標對準它,按右鍵點properties改標題為“新建非模式對話框”。3)為對話框創(chuàng)建類點出對話框(IDD_DIALOG1缺省的ID號),雙擊對話框中的任意位置,出現(xiàn)一個表,你點OK出現(xiàn)一個對話框,你寫類名:CDlg保證基類為CDialog4)創(chuàng)建菜單打開工作區(qū)MenuIDR_MAINFRAME雙擊空白菜單寫“非模式對話框”關(guān)閉再點下面空菜單寫名字“顯示非模式對話框”ID處寫ID_DLG.5) 添加菜單命令消息 WiewClassWizardMessage Maps保證Class name里是Wiew類(視圖類),在Object IDS里找到ID_DLG(菜單的ID)點黑右邊COMMAND雙擊它OK6)a、你在Wiew.h里加:#include “Dlg.h” b、在public:里加:CDlg *dlg;/創(chuàng)建CDlg對象 c、在View.cpp的OnDlg()函數(shù)里加: CMyView:OnDlg() dlg=new CDlg(this); dlg-Create(IDD_DIALOG1);/使對話框摸板從資源中創(chuàng)建一個非/模式對話框 dlg-ShowWindow(SW_RESTORE);/顯示對話框 二、使用對話框編輯器(對話框編程)(187頁)*1、可建一個單文檔應(yīng)用程序名為“對話框編程”,在此程序中加入一個對話框: InsertResource點黑Dialognew 出現(xiàn)188頁的圖2、拖入一些控件,對這些控件進行排序、布局、大小調(diào)整、上下對齊、測試等。*最后在對話框IDD_DIALOG1上留一個按鈕控件,其標識符為:IDC_BUTTON13、識別控件工具欄(188頁)4、在加對話框時,InsertResource點開+Dialog見有7類對話框,分別了解其不同用途(見192頁)。5、對話框的屬性A、ViewProperties B、按Alt+Enter C、用鼠標右鍵單擊對話框模板Properties都能彈出對話框的屬性框,見書193頁對屬性General的解釋。*6、為對話框添加類(194頁) 對準對話框的任意非控件區(qū)域雙擊鼠標,將彈出書194頁圖5.11所示的對話框,詢問是否為對話框資源創(chuàng)建一個新類單擊OK彈出書194頁圖5.12所示的對話框你定義一個新類的名字如:CMyDlg(注意:類名必須以C打頭),下面的基類Base class和ID標識符Dialog ID內(nèi)容一般不改。* 7、添映射消息(195頁) 接上,點OK出現(xiàn)“MFC ClassWizard”對話框,如書195頁圖5.13所示(保證類名處是CMyDlg)選定點黑IDC_BUTTON1單擊BN_CLICKED消息Add Function出現(xiàn)書195頁圖5.14對話框OKEdit Code *8、添加用戶代碼(195頁)接上,到MyDlg.cpp文件中,寫:void CMyDlg:OnButton1() MessageBox(“歡迎進入對話框的設(shè)計!”);/這時運行還不見對話框,接下*9、在程序中使用對話框(196頁) 由于對話框的代碼是以類為模塊來設(shè)計的,使用時需要在程序中加入該類的頭文件,并定義一個類對象,然后就可以使用該類的相關(guān)成員。項目工作區(qū)FileView打開應(yīng)用程序的.cpp文件,在前面加: #include “MyDlg.h” 在InitInstance函數(shù)體中的return TRUE語句之前添加下列代碼: CMyDlg dlg; dlg.DoModal();/DoModal()函數(shù)是負責對話框的顯示和終止。運行!則直接顯示出對話框,單擊按鈕則出現(xiàn)“歡迎進入對話框的設(shè)計”的字樣。本例建的CMyDlg類及以后在各個項目中建立的類,在文檔、視圖、主框架類中都可同樣使用。(1)添加對話框資源對話框資源類型:IDD_DIALOGBAR 對話條,往往和工具條放在一起。IDD_FORMVIEW 一個表狀風格的對話框,用于無模式對話框或視圖類IDD_OLE_PROPPAGE_LARGE一個大的OLE屬性頁IDD_OLE_PROPPAGE_SMALL一個小的OLE屬性頁IDD_PROPPAGE_LARGE一個大屬性頁,用于屬性對話框IDD_PROPPAGE_MEDIUM一個中等大小的屬性頁,用于屬性對話框IDD_PROPPAGE_SMALL一個小的屬性頁,用于屬性對話框(2)改變對話框的屬性ID框:修改或選擇對話框的標識符名稱Caption框:輸入對話框的標題名稱,中英文均可。Font按鈕:單擊此按鈕可選擇字體的種類(如宋體)及尺寸(如9號)Xpos/Ypos:對話框左上角在父窗口中的X,Y坐標都為0時表示居中Menu框:默認值為無,當對話框需要選單時輸入或選擇指定的選單資源Class name:默認值為無,它提供C/C+語言編程時所需要的對話框類名,對 MFC類庫的資源文件來說,該項不被激活三、控件的創(chuàng)建和使用方法(197頁) 控件是在系統(tǒng)內(nèi)部定義的能夠完成特定功能的控制程序單元。在應(yīng)用程序中使用控件不僅簡化了編程,還能完成常用的各種功能。為了更好地發(fā)揮控件的作用,用戶還必須理解和掌握控件的屬性、消息以及創(chuàng)建和使用方法。注:控件工具欄及各按鈕含義:1、 控件的選擇2、靜態(tài)文本3、組框4、復(fù)選框5、組合框6、水平滾動條7、旋轉(zhuǎn)按鈕8、滑動條9、列表視圖10、標簽11、復(fù)合編輯12、月歷13、用戶定制工具14、靜態(tài)圖片15、編輯框16、按鈕17、單選框18、列表框19、垂直滾動條20、進展條21、熱鍵22、樹形視圖23、動畫24、日期選擇25、IP地址26、組合框的擴展(從左邊往下數(shù),再從右邊往下數(shù)) 1、控件的創(chuàng)建和使用方法(197頁) 控件的創(chuàng)建方法有2種:1)是在對話框摸板中用編輯器指定控件,也就是說,將控件的父窗口指定為對話框,如:上面的BUTTON1按鈕控件。2)是將控件看做任意一窗口的子窗口,并通過調(diào)用相應(yīng)的Create函數(shù)來創(chuàng)建。下面我們用第2種方法創(chuàng)建控件(此種方法涉及的內(nèi)容復(fù)雜,也不能發(fā)揮對話框編輯器可視化編程的優(yōu)點,故不提倡此種方法,而用第一種方法)。(1)打開上個項目,在CMyDlg類的頭文件MyDlg.h里添加一個按鈕類CButton 指針變量:(public:里) CButton *m_btnWnd;(2)按Ctrl+W或ViewClassWizard打開MFClassWizard對話框,并切換到Message Maps頁面,在Object IDs列表中選定點黑CMyDlg項,并在Message列表中找到WM_INITDIALOG消息點黑AddFunctionEditCode(3)添加代碼:BOOL CMyDlg:OnInitDialog() - m_btnWnd=new CButton();/構(gòu)造按鈕控件/下面“”按鈕上的字,創(chuàng)建子窗口|窗口最初是可見的|創(chuàng)建的是按鍵按鈕 m_btnWnd-Create(“你好”,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(20,20,120,60),this,201);/創(chuàng)建 CFont *font=this-GetFont();/獲取對話框的字體 m_btnWnd-SetFont(font);/設(shè)置控件字體 return TRUE;/(程序原有的)代碼中,Create用來創(chuàng)建一個按鈕控件,該函數(shù)的第一個參數(shù)用來指定該按鈕的標題,第二個參數(shù)用來指定控件的風格,第三個參數(shù)用來指定它在父窗口中的位置和大小,第四個參數(shù)用來指定父窗口指針,最后一個參數(shù)是指定該控件的標識值。WS_CHILD表示按鈕是作為對話框的一個子窗口來創(chuàng)建的。WS_VISIBLE是使控件可見。BS_PUSHBUTTON表示創(chuàng)建的是按鍵按鈕。 (4)編譯并運行2、控件的數(shù)據(jù)交換和數(shù)據(jù)效驗(數(shù)據(jù)成員)(198頁) 使用ClassWizard可以很容易地定義一個控件的成員變量及其數(shù)據(jù)范圍。例如:上面的CMyDlg類的按鈕控件IDC_BUTTON1添加并使用其成員變量m_MyBtn,步驟如下:(1)打開上例項目,ViewClassWizardMember Variables選定Class name中為CMyDlg,然后在Control IDs列表中點黑IDC_BUTTON1AddVariable(或雙擊鼠標左鍵),彈出Add Member Variable對話框,如書198頁圖5.17寫好數(shù)據(jù)成員名:m_MyBtn 下面Category和Variables type里的不動OK見表上已建成(如:書199頁圖5.18)下面是建成員變量的三個對話框圖:(2)再向?qū)υ捒蚣右粋€編輯控件,并加成員變量m_strEdit,類型為CString置數(shù)值為Value(注:Category框內(nèi)可選擇Value或Control兩種類型。Control所對應(yīng)的變量類型就是MFC為該控件封裝的控件類。Value所對應(yīng)的是數(shù)值類型。不同控件所提供的關(guān)聯(lián)的數(shù)值類型各不同,例如:對于編輯框來說,Variables type中的數(shù)值類型有CString (字符串),int,UINT(32位無符號整數(shù)),long(32位帶符號整數(shù)), DWORD(32位無符號整數(shù),段地址和相關(guān)的偏移),float,double,BYTE(8位無符號整數(shù)),short,BOOL等)。OK后在下面寫20為最大值。(下面見書199200頁)打開本項目的MyDlg.h見到: CButton m_MyBtn; CString m_strEdit;在MyDlg.cpp里見到: m_strEdit=_T(“ “);在DoDataExchange函數(shù)體內(nèi)見: DDX_Control(pDX,IDC_BUTTON1,m_MyBtn); DDX_Text(pDX,IDC_EDIT1,m_strEdit);/IDC_EDIT1是標識m_strEdit/是成員變量DDV_MaxChars(pDX,m_strEdit,20);/校驗m_strEdit的最大字符個數(shù)不超過20。 (3)將CMyDlg:OnButton1()修改成: void CMyDlg:OnButton1() UpdateData();/默認參數(shù)值是真TRUE m_MyBtn.SetWindowText(m_strEdit); /GetDlgItem(IDC_BUTTON1)-SetWindowText(“歡迎”);/用此條代替/上條也行, /單擊Button1按鈕,此按鈕名就是“歡迎”。之后運行該程序,當在編輯框輸入Hello后,單擊Button1按鈕,則該按鈕的名稱就變成了編輯框中的內(nèi)容Hello了,見書200頁。八、控件的通用屬性 (201頁) 在控件的屬性對話框中含有許多屬性,如:書201頁(按鈕的屬性對話框),General(一般屬性)、Styles(控件的風格)、Extended Styles(控件的擴展風格)。Styles和Extended Styles是用來設(shè)定控件的外觀的、輔助功能的。不同控件具有不同的風格和擴展風格。見201頁表5.5.控件的General屬性:ID:控件的標識符,每種控件都有默認的ID,例如按鈕控件為IDC_BUTTON1Caption:控件的標題,大多數(shù)控件都有默認的標題,例如按鈕控件為Button1Visible:指定控件初始化時是否可見Group:指定控件組中的第一個控件,如果該項被選中,則此控件后的所有控件均被看成一組,成組的目的是可以讓用戶鍵盤方向鍵在同一組控件中進行切換Help ID:若該項被選中,則為該控件建立一個上下文相關(guān)的幫助標識符Disabled:指定控件初始化時是否禁用TabStop:若該項被選中,則用戶可以使用Tab鍵來選擇控件九、控件的消息 對于每個消息,系統(tǒng)都會用一個MSG結(jié)構(gòu)來記錄(見201頁)。對一般控件來說,其通知消息是一條WM_COMMAND消息(見202頁)。例:1、打開上面的項目“對話框”2、ViewClassWizard在CMyDlg里(左邊的Object IDs里點黑CMyDlg) 在Message里找到OnCommand點黑Add FunctionEdit Code寫: BOOL CMyDlg:OnCommand(WPARAM wParam,LPARAM lParam) WORD nCode=HIWORD(wParam);/控件的通知消息 WORD nID=LOWORD(wParam);/控件的ID號 if(nID=201)&(nCode=BN_CLICKED)/用戶單擊按鈕產(chǎn)生的消息MessageBox(你按下了你好按鈕!); - /WORD是16位無符號整數(shù) /EN_CHANGE是編輯框中的文本被改變時發(fā)出的消息BN_CLICKED是當用戶單擊按鈕產(chǎn)生的消息:單擊對話框中的“你好”按鈕,彈出你按下了你好按鈕!的消息對話框。由于Create創(chuàng)建的控件無法用ClassWizard直接映射其消息,因此上述方法禰補了ClassWizard的不足,使用時要特別注意。見書202頁通知消息是所有Windows控件所共有的:NM_CLICK 在控件中單擊鼠標左鍵按鈕NM_DBLCLK 在控件中雙擊鼠標左鍵按鈕NM_RDBLCLK在控件中雙擊鼠標右鍵按鈕NM_RETURN當控件具有輸入焦點時按下ENTER鍵NM_SETFOCUS控件得到輸入焦點NM_KILLFOCUS控件失去輸入焦點NM_OUTOFMEMORY沒有足夠的內(nèi)存使控件十、常用控件靜態(tài)控件 CStatic 用于向用戶顯示一些幾乎固定不變的文字或圖形描述按 鈕 CButton 用于產(chǎn)生某些命令或改變某些選項設(shè)置編輯框 CEdit 可完成文字的輸入、輸出雙向操作,使用戶能查看并編輯文字 列表框 CListBox顯示一個列表,讓用戶從中選取一個或多個項組合框 CComboBox它把列表框和編輯框有機地組合在一起,用戶不僅能選擇列表中已有的項,還能編輯出新的項滾動條 CScrollBar通過滾動塊在滾動條上的移動來改變某些數(shù)值進展條 CProgressCtrl 用于指示一個操作的進度旋轉(zhuǎn)按鈕 CSpinButtonCtrl 又稱“上下控制”,是一對箭頭按鈕,用戶單擊它們可以增加或減小某個值滾動條 CSliderCtrl 是一個包含一個滑動塊和可選的刻度線,用戶可以用鼠標或方向鍵沿某個方向移動滑動塊圖象列表 CImageList是一系列相同大小的圖象的集合標簽控件 CTabCtrl類似于一個筆記本的分割器或一個文件柜上的標簽,使用它可以將一個窗口或?qū)υ捒虻南嗤瑓^(qū)域定義為多個頁面1、靜態(tài)控件 靜態(tài)控件是用于顯示一個字符、框、矩形、圖標、位圖或增強的圖元文件,它可以用做標簽、框或用于分隔其它的控件。一個靜態(tài)控件一般不接受用戶輸入,也不產(chǎn)生通知消息。在對話框編輯器的控件工具欄中,屬于靜態(tài)控件的有:靜態(tài)文本(Static Text)、組框(Group Box)、圖片控件(Picture)三種。其中,靜態(tài)圖片控件的屬性對話框如:書204頁圖5.21所示,表5.7列出了其一般屬性和風格的各個項的意義。我們可以選擇Type(圖片類型)、Image(圖象資源)兩個組合框中的有關(guān)選項內(nèi)容,并可將應(yīng)用程序資源中的圖標、位圖等內(nèi)容顯示在該靜態(tài)圖片控件中。另外,用戶還可設(shè)置其風格來改變控件的外觀以及圖象在控件的位置等。靜態(tài)圖片控件的General和Style屬性對話框:Type 圖片類型,用戶可以從中選擇Frame(框)、Rectangle(矩形區(qū)域)、Icon(圖標)、Bitmap(位圖)、Enhanced Metafile(增強圖元文件,它是各種繪圖命令的集合)Image 當圖片類型為Icon或Bitmap時,通過此框可選擇指定的資源ID號 設(shè)置Frame和Rectangle的顏色,它可以是black(黑色)、white(白色)、 gray(灰色)、或者是具有3D外觀的etched(腐蝕色)Sunken 選中時,在控件的周圍有下沉的邊框Notify 選中時,當用戶單擊或雙擊圖片時會向其父窗口發(fā)出通知消息Right justify 選中時,用戶重置圖片大小,圖片右下角是固定不變的Border 選中時,圖片周圍有邊框Center image 選中時,圖片顯示在控件中央,其余區(qū)域由圖片左上角的象素顏色來填充Real size image選中時,按圖片的原始大小來顯示,超過控件區(qū)域的部分被裁剪 在它的屬性中,用戶可以選擇Type(圖片)、Image(圖象資源)兩個組合框中的有關(guān)選項內(nèi)容,并可將應(yīng)用程序資源中的圖標、位圖等內(nèi)容顯示在該靜態(tài)圖片控件中,另外,用戶還可以設(shè)置其風格來改變控件的外觀以及圖象在控件的位置等。例1:圖片控件(將一個.bmp圖形顯示在圖片控件上)(附加舉例)1)建一個單文檔(SDI)應(yīng)用程序2)創(chuàng)建對話框模板: InsertResource點黑Dialognew3)將圖片控件Picture拖到對話框上,并拉大些,將OK和CANCEL拖到下面。4)向項目中插入一個 .bmp圖片:InsertResource點黑BitmapImport在出現(xiàn)的表中要下拉出:所有文件(*.*)在某處找到一個.bmp圖形Import放到此項目中。5)將這個圖片放到圖片控件上 右鍵對準圖片控件單擊出現(xiàn)屬性框Type處下拉置Bitmapimage處下拉置IDB_BITMAP1,就將圖片加到了圖片控件上。6)為剛才建的對話框添加類 雙擊新建對話框的任何位置OK類名寫:CMyDlg7)創(chuàng)建一個菜單項,用來顯示對話框 ResourceViewMenuIDR_MAINFRAME雙擊空白菜單點POPUPID處寫:ID_DLG 菜單名寫:顯示圖片對話框關(guān)閉8)將菜單命令映射到View中去 ViewClassWizard要加到View中ID-DLGCOMMANDEditCode (在View.h的頭部加:#include “MyDlg.h” 在public:下加:CMyDlg *dlg;)并加代碼: CMyView:OnDlg() dlg=new CMyDlg(this); dlg-Create(IDD_DIALOG1); dlg-ShowWindow(SW_RESTORE); 9)編譯運行2:按鈕常見的按鈕有三種類型:(204頁)(1)按鍵按鈕 按鍵按鈕通??梢粤⒓串a(chǎn)生某個動作,執(zhí)行某個命令,因此也常被稱為命令按鈕。(2)單選按鈕 其外形是在文本前有一個圓圈,當它被選中時,就標上一個黑點。(3)復(fù)選框其外形是在文本前有一個空心方框,當它被選中時,就加上一個“”標記1)按鈕的消息 常見的按鈕映射消息有兩個:(1) BN_CLICKED(單擊按鈕)(2)BN_DOUBLE_CLICKED(雙擊按鈕)見下圖:2)按鈕選中操作 最常用的按鈕操作是設(shè)置或獲取一個按鈕或多個按鈕的選中狀態(tài)。CButton類的以下2個成員函數(shù)原型如下: void SetCheck(int nCheck); /設(shè)置指定按鈕的選中狀態(tài) int GetCheck()const; /獲取指定按鈕的選中狀態(tài) 其中:nCheck和GetCheck函數(shù)返回的值可以是:0表示不選中,1表示選中, 2表示不確定(僅用于三態(tài)按鈕) 而對于多個單選按鈕的選中狀態(tài)的設(shè)置或獲取,需要使用CWnd類的成員函數(shù)CheckRadioButton和GetCheckedRadioButton,它們的原型如下:void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);其中,nIDFirstButton和nIDLastButton分別指定這組單選按鈕的第一個和最后一個按鈕ID值,nIDCheckButton用于指定要設(shè)置選中狀態(tài)的按鈕ID值,函數(shù)GetCheckedRadioButton返回被選中的按鈕ID值。例2:用靜態(tài)圖片、單選按鈕、復(fù)選框和按鍵按鈕控件設(shè)計界面,運行結(jié)果如:書205頁圖5.23所示。剛開始,所有單選按鈕都是灰顯的,我們不能選擇它們,這種情況稱為“禁用”,而當選中“允許”復(fù)選框后,所有單選按鈕可以使用,用戶選定一個單選框后,單擊應(yīng)用按鈕,則彈出相應(yīng)的消息對話框。(1)用MFC AppWizard(exe)創(chuàng)建一個名為:“按鈕的使用”的基于對話框的應(yīng)用程序。(第一步將類型選擇為Dialog Based,然后按Finish按鈕即可。)(2)打開屬性對話框,將其標題改為“使用Windows常用控件”。(3)參看書205頁圖5.23的控件布局,用編輯器為對話框添加如書206頁表5.8所示的一些控件。(4)說明:上面4個單選按鈕的Tab次序應(yīng)連續(xù),而且從IDC_RADIO1到IDC_RADIO4依次增加。(5)ViewClassWizard(或按Ctrl+W快捷鍵)切換到Member Variables頁面,在Class name中選擇CMyDlg,在Control IDs里選中點黑IDC_CHECK1復(fù)選框ID號Add Variables按鈕,為其添加一個BOOL類型的成員變量 m_bEnabledOK。(6)切換到ClassWizard的Message Maps頁面,分別選中點黑復(fù)選框IDC_CHECK1和按鈕IDC_BUTTON1,分別為其添加映射消息,并添如下代碼: void CMyDlg:OnCheck1() UpdateData(); for(int i=0;iEnableWindow(m_bEnabled);/EnableWindow是使一個控件窗口禁用或允許使用,它取決于該函數(shù)/的參數(shù),為TRUE時表示可以使用,否則禁用。void CMyDlg:OnButton1() UpdateData(); if(!m_bEnabled) return; int nID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4); if(nID=IDC_RADIO1) MessageBox(“1”); if(nID=IDC_RADIO2) MessageBox(“2”); if(nID=IDC_RADIO3) MessageBox(“3”); if(nID=IDC_RADIO4) MessageBox(“4”); (7)在此文件中找到CMyDlg:OnInitDialog函數(shù)體,添加下列代碼: BOOL CMyDlg:OnInitDialog() CheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO1); /設(shè)置第一個單選按鈕為選中 OnCheck1(); return TRUE;/此條是原有的(8)編譯運行3、編輯框 編輯框是一個讓用戶從鍵盤輸入和編輯文本的矩形窗口,用戶可以通過它,很方便地輸入各種文本、數(shù)字或口令,也可使用它來編輯和修改簡單的文本內(nèi)容。 當編輯框被激活且具有輸入焦點時,就會出現(xiàn)一個閃動的插入符(又可稱為文本光標),表明當前插入點的位置。 1)編輯框的屬性和風格 Align text 各行文本對齊方式:Left,Center,Right,默認時為LeftMultiline 選中時為多行編輯框,否則為單行編輯框Number 選中時控件只能輸入數(shù)字Horizontal scroll 水平滾動,僅對多行編輯框有效Auto HScroll當用戶在行尾鍵入一個字符時,文本自動向右滾動Vertical scroll 垂直滾動,僅對多行編輯框有效Auto VScroll 當用戶在最后一行按ENTER鍵時,文本自動向上滾動一頁,僅對多行編輯框有效Password 選中時,鍵入編輯框的字符都將顯示為”*”,用于口令設(shè)置,僅對單行編輯框有效No hide selection通常情況下,當編輯框失去鍵盤焦點時,被選擇的文本仍然反色顯示,選中時,則不必具備此功能OEM convert 選中時,實現(xiàn)對特定字符集的字符轉(zhuǎn)換Want return 選中時,用戶按下ENTER鍵,編輯框中就會插入一個回車符Border 選中時,在控件的周圍存在邊框Uppercase 選中時,鍵入在編輯框的字符全部轉(zhuǎn)換成大寫形式Lowercase 選中時,鍵入在編輯框的字符全部轉(zhuǎn)換成小寫形式Read-Only 選中時,防止用戶鍵入或編輯文本多行編輯框具有簡單文本編輯器的常用功能,例如:它可以有滾動條,用戶按Enter鍵另起一行以及文本的選定、復(fù)制、粘貼等常見操作。而單行編輯框功能較簡單,它僅用于單行文本的顯示和操作 2)編輯框的基本操作A、設(shè)置口令 口令設(shè)置在編輯框中不同于一般的文本編輯框,用戶輸入的每個字符都被一個特殊的字符代替顯示。這個特殊的字符稱為口令字符。默認的口令字符是”*”。應(yīng)用程序可以用成員函數(shù)CEdit:SetPasswordChar來定義自己的口令字符,其函數(shù)原形如下: void SetPasswordChar(TCHAR ch);其中,參數(shù)ch表示設(shè)定的口令字符;當ch=0時,編輯框內(nèi)將顯示實際字符。B、選擇文本編程選擇文本,調(diào)用成員函數(shù)CEdit:SetSel來實現(xiàn),還有:CEdit:GetSel和CEdit:ReplaceSel,它們分別用來獲取編輯框中選擇的開始和結(jié)束的位置以及替換被選擇的文本。C、設(shè)置編輯框的頁面邊距用CEdit:SetMargins函數(shù)來實現(xiàn),其函數(shù)原型如下:void SetMargins(UINT nLeft,UINT nRight); 其中,參數(shù)nLeft和nRight分別用來指定左、右邊距的象素大小。D、剪帖板操作E、獲取多行編輯框文本(見書208頁-209頁)。如何設(shè)置口令(密碼):附加例題見后面(教案頁)3)編輯框的通知消息當編輯框的文本修改或者被滾動時,會向其父窗口發(fā)送一些消息,這些消息是:(參看書209頁表5.10并由下圖所示:)EN_CHANGE當編輯框中的文本已被修改,在新的文本顯示之后發(fā)送此消息EN_HSCROLL當編輯框的水平滾動條被使用,在更新顯示之前發(fā)送此消息EN_KILLFOCUS編輯框失去鍵盤輸入焦點時發(fā)送此消息EN_MAXTEXT文本數(shù)目到達了限定值時發(fā)送此消息EN_SETFOCUS編輯框得到鍵盤輸入焦點時發(fā)送此消息EN_UPDATE編輯框中的文本已被修改,新的文本顯示之前發(fā)送此消息EN_VSCROLL當編輯框的垂直滾動條被使用,在更新顯示之前發(fā)送此消息 例:使用靜態(tài)文本、組框、編輯框以及按鈕等控件設(shè)計界面,運行結(jié)果參書209頁圖5.25即下圖所示。當用戶在“成績1”、“成績2”、和“成績3”編輯框中輸入成績后,單擊計算平均分按鈕,將顯示出這三個成績的平均分。 程序設(shè)計步驟如下:(1) 打開前面的項目“按鈕的使用”。(2) 向應(yīng)用程序中添加一個對話框資源,insertResource點黑Dialognew出現(xiàn)一個新的對話框右鍵單擊這個新對話框properties打開其屬性對話框Font將其字體設(shè)置為“新宋體,9”,標題改為“使用編輯框”,ID號改為IDD_EDIT,刪除默認的Cancel按鈕。(3)、(4)、(5)按書210頁往下作書(6)m_strAve=0.00; UpdateData(FALSE);/將成員變量數(shù)據(jù)傳給控件,并在控件中顯示書(7)UpdateData();/將控件顯示的數(shù)據(jù)傳給成員變量 double ave=(double)(m_nScore1+m_nScore2+m_nScore3)/3.0; m_strAve.Format(%6.2f,ave);/Format是CString類的一個經(jīng)常使用的成/員函數(shù),它通過格式操作使任意類型的數(shù)據(jù)轉(zhuǎn)換成一個字符串 UpdateData(FALSE);/將成員變量數(shù)據(jù)傳給控件,并在控件中顯示書(8)定位到void CMyDlg:OnButton1() -/注意,這是你上個程序的按鈕命令,在里找到: if(nID= =IDC_RADIO1) CEditDlg dlg; /注意,將原來MessageBox(1);去掉 dlg.DoModal(); /加上這2條 書(9)在上個程序的:按鈕的使用Dlg.cpp即CMyDlg.cpp的頭文件處加: #include EditDlg.h(就是(8)所在的文件) 編譯運行4、列表框列表框是一個列有許多項目讓用戶選擇的控件。它與單選按鈕組或復(fù)選框組一樣,都可讓用戶在其中選擇一個或多個項。但不同的是,列表框中項的數(shù)目是可靈活變化的,程序運行時可往列表框中添加或刪除某些項。并且,當列表框中項的數(shù)目較多而不能一次全部顯示時,還可以自動提供滾動條來讓用戶瀏覽其余的列表項。1) 列表框的風格按性質(zhì)來分,列表框有單選、多選、擴展多選以及非選四種類型,默認風格下的單選列表框讓用戶一次只能選擇一個項,多列表框可讓用戶一次選擇幾個項,而擴展多項列表框允許用戶用鼠標拖動或其它特殊組合鍵進行選擇,非選列表框不提供選擇功能。還有其它一系列風格,用于定義列表框的外觀及操作方式,這些風格可在下圖所示的列表框?qū)傩詫υ捒蛑性O(shè)置:列表框的Styl屬性:Selection指定列表框的類型:單選(Single)、多選(Multiple)、擴展多選(Extended)、不選(None)Owner draw自畫列表框,默認為NoHas strings選中時,在自畫列表框的項目中含有字符串文本Border選中時,使列表框含有邊框Sort選中時,列表框的項目按字母順序排列Notify選中時,當用戶對列表框操作就會向父窗口發(fā)送通知消息Multi-column選中時,指定一個具有水平滾動的多列列表框Horizontal scroll選中時,在列表框中創(chuàng)建一個水平滾動條Vertical scroll選中時,在列表框中創(chuàng)建一個垂直滾動條No redraw選中時,列表框發(fā)生變化后不會自動重畫Use tabstops選中時,允許使用停止位來調(diào)整列表項的水平位置Want key input選中此項,當用戶按鍵且列表框有輸入焦點時,就會向列表框的父窗口發(fā)送相應(yīng)消息Disable no scroll選中時,即使列表框的列表項能全部顯示,垂直滾動條也會顯示,但此時是禁用的(灰顯)No integral height選中時,在創(chuàng)建列表框的過程中,系統(tǒng)會把用戶指定的尺寸完全作為列表框的尺寸,而不論是否有項目在列表框,也不能完全顯示出來2) 列表框的基本操作當列表框創(chuàng)建之后,往往要添加、刪除、改變或獲取列表框中的列表項,這些操作都可以調(diào)用MFC的CListBox類成員函數(shù)加以實現(xiàn)。索引:表明項目在列表框中排列的位置,它是以0為基數(shù)的,即列表框中第一項的索引是0,第二項的索引是1,依次類推。(1)添加列表項列表框創(chuàng)建時是一個空的列表,需要用戶添加或插入一些列表項,其函數(shù)原型為:int AddString(LPCTSTR lpszItem); int InsertString(int nIndex,LPCTSTR lpszItem); 其中:列表項的字符串文本由參數(shù)pszItem來指定,成功返回列表在列表框的索引,錯誤返回LB_ERR,空間不夠返回LB_ERRSPACE。但:InsertString函數(shù)不會將列表項進行排序,不論列表框控件是否具有sort屬性,只是將列表項插在指定索引的列表項之前,若nIndex等于-1,則列表項添加在列表框末尾。而:AddString函數(shù)在當列表框控件具有sort屬性時會自動將添加的列表項進行排序。以上2個函數(shù)只能將字符串增加到列表框中,但有時用戶還會需要根據(jù)列表項使用其他數(shù)據(jù)。這時,ListBox的SetItemData和SetItemDataPtr能有效解決這個問題,它們能使用戶數(shù)據(jù)和某個列表項關(guān)聯(lián)起來:int SetItemData(int nIndex,DWORD dwItemData);int SetItemDataPtr(int nIndex,void *pData);其中,SetItemData是將一個32位數(shù)與某列表項(由nIndex指定)關(guān)聯(lián)起來,而 SetItemDataPtr可以將用戶的數(shù)組、結(jié)構(gòu)體等大量的數(shù)據(jù)與列表項關(guān)聯(lián) 若產(chǎn)生錯誤,它們都返回LB_ERR而:GetItemData和GetItemDataPar分別用來獲取相關(guān)聯(lián)的用戶數(shù)據(jù)。 以下等待修改(2)刪除列表項(3)查找列表項(4)列表框的單項選擇(5)列表框的多項選擇3) 列表框的通知消息 當列表框中發(fā)生了某個動作,如用戶雙擊選擇了列表框中某儀項時,列表框就會向父窗口發(fā)送一條通知消息。常用的通知消息如書214頁表5.14所示。例:將一個SCORE結(jié)構(gòu)(含有三門成績的數(shù)據(jù)成員)數(shù)據(jù)和列表中每一個學生姓名列表關(guān)聯(lián)起來。當用戶單擊添加記錄按鈕時,學生成績記錄中的“姓名“被添加在列表框中,且該學生的成績與該列表項關(guān)聯(lián)。當用戶單擊刪除記錄按鈕時,列表框中當前選擇項被刪除,相關(guān)聯(lián)的數(shù)據(jù)所占的內(nèi)存空間被釋放。任何時候選中列表框中某個學生,相應(yīng)的記錄數(shù)據(jù)被顯示出來,如:書214頁圖5.27所示。(1) 打開前面的基于對話框的項目“按鈕的使用”。(2) 向項目中添加一個對話框資源IDD_LISTBOX,標題為“使用列表框”,并用ClassWizard為此對話框建類為:CListBoxDlg。接著按書214頁往下作:(3)、(4)-(可在此處將第9步、第11步作出. 因為第5步要用到SCORE結(jié)構(gòu)體 )書(5)UpdateData(TRUE);if(m_strName.IsEmpty()/判斷m_strName是否為空 MessageBox(姓名不能為空!); return;m_strName.TrimLeft();/裁剪m_strName左邊的空格m_strName.TrimRight();/裁剪m_strName右邊的空格if(m_List.FindString(-1,m_strName)!=LB_ERR) MessageBox(列表框中已有相同姓名,不能添加!); return;int nIndex=m_List.AddString(m_strName);/向列表框添加學生 /姓名將該學生成績與新增的列表項關(guān)聯(lián)起來SCORE data;data.score1=m_nScore1;data.score2=m_nScore2;data.score3=m_nScore3;m_List.SetItemDataPtr(nIndex,new SCORE(data);書(6)int nIndex=m_List.GetCurSel();/獲得當前選項的索引if(nIndex!=LB_ERR) m_List.DeleteString(nIndex);/刪除當前選擇項 m_strName.Empty(); m_nScore1=m_nScore2=m_nScore3=0; UpdateData(FALSE);else MessageBox(當前沒有選擇項或列表框操作失敗!);書(7)int nIndex=m_List.GetCurSel();if(nIndex!=LB_ERR) m_List.GetText(nIndex,m_strName); SCORE *data=(SCORE *)m_List.GetItemDataPtr(nIndex); m_nSc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童專注力提升營養(yǎng)益智計劃
- 茶葉加工廠實習總結(jié)范文
- 深化設(shè)計供應(yīng)鏈協(xié)調(diào)職責
- 保險行業(yè)域名購買合同范文
- 部編版新人教版一年級語文上冊課程計劃
- 八年級上冊地理教學課件制作計劃
- 冷藏運輸公司簡介范文
- 印刷材料運輸、包裝及進場質(zhì)量保證措施
- 2025學校紅十字會健康體檢組織計劃
- EPC工程總承包現(xiàn)場管理職責
- 2025年 江西省金控科技產(chǎn)業(yè)集團有限公司招聘考試筆試試卷附答案
- 2025云南中考歷史真題及答案
- 四川省成都市蓉城聯(lián)盟2024-2025學年高一下學期6月期末考試物理試題(含答案)
- 壓軸訓練:全等三角形(多解、動點、新定義型壓軸)(原卷版)
- 福建省三明市永安林業(yè)(集團)股份有限公司招聘筆試題庫2025
- 2025年安慶望江縣融媒體中心專業(yè)技術(shù)人員招聘考試筆試試題(含答案)
- 2025公文寫作考試真題庫(含答案)
- T/CCS 075-2023煤礦柔性薄噴材料噴涂施工技術(shù)要求
- 2025海南中考:政治必考知識點
- 吊裝起重作業(yè)安全培訓
- DLT 5035-2016 發(fā)電廠供暖通風與空氣調(diào)節(jié)設(shè)計規(guī)范
評論
0/150
提交評論