




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第第9章章 Windows 標準控件在可視化編標準控件在可視化編程中的應用程中的應用2 控件是控件是Windows 圖形用戶界面圖形用戶界面的主要組成部分之一,用戶通過的主要組成部分之一,用戶通過操作控件對象完成與應用程序之操作控件對象完成與應用程序之間的交互。控件的使用集中體現間的交互。控件的使用集中體現了了Windows 系統面向對象的特點系統面向對象的特點 39.1概述概述控件工控件工具欄具欄控件接受的消息控件接受的消息主要有單擊、雙擊主要有單擊、雙擊和字符輸入等和字符輸入等打開對話框編打開對話框編輯器就會出輯器就會出現控件工具現控件工具欄欄(231頁圖頁圖)459.2 按鈕控件及其應
2、用按鈕控件及其應用 按鈕按鈕控件控件 普通按鈕普通按鈕圓按鈕圓按鈕復選框按鈕復選框按鈕組框按鈕組框按鈕自繪按鈕自繪按鈕 6按鈕控件消息按鈕控件消息:ON_BN_CLICKEDON_BN_DBLCLICKEDON_COMMAND兩個兩個類似類似按鈕按鈕是最是最常見常見的控的控件之件之一一復選框復選框單選按鈕單選按鈕下壓式按鈕下壓式按鈕分組框分組框常用于只有兩種常用于只有兩種完全相反狀態完全相反狀態的情況下的情況下適用于同一組屬性相適用于同一組屬性相同的數據中選一個數據同的數據中選一個數據適用于消息的發送適用于消息的發送沒有太多的操作沒有太多的操作只是在窗口中劃只是在窗口中劃分區域范圍分區域范圍7
3、9.2.1 按鈕控件的創建過程按鈕控件的創建過程 CButton類的控件可以用對話框資源模板類的控件可以用對話框資源模板來創建,可以通過來創建,可以通過CButton類的成員函數類的成員函數Create函數來創建,該函數的聲明為:函數來創建,該函數的聲明為:BOOL Create ( LPCTSTR lpszCaption, /指定了按鈕顯示的正文指定了按鈕顯示的正文 DWORD dwStyle, /按鈕的風格按鈕的風格 (202頁表頁表9-3) const RECT& rect, /按鈕的位置和大小按鈕的位置和大小 CWnd* pParentWnd, /指向父窗口,指向父窗口, UI
4、NT nID/按鈕的按鈕的ID )89GetCheck( )SetCheck( )GetBitmap()SetBitmap()GetButtonStyle()SetButtonStyle()GetCursor()SetCursor()GetIcon()SetIcon()GetState()SetState()CButton類的類的成成員函數員函數這些函數(這些函數(202頁頁表表9-4)是類的成)是類的成員函數,所以調用員函數,所以調用的語句應該是的語句應該是對象對象.函數(參數)函數(參數)Set開頭的有參數開頭的有參數Get開頭的無參數開頭的無參數10 CButton類是類是CWnd類的派
5、生類,在知道按類的派生類,在知道按鈕鈕ID的前提下,還可使用與按鈕有關的的前提下,還可使用與按鈕有關的CWnd成員函數來設置或查詢按鈕狀態成員函數來設置或查詢按鈕狀態 ,當然調用,當然調用的語句也應該是的語句也應該是 對象對象.函數(參數)函數(參數)CheckDlgButtonCheckRadioButtonGetCheckedRadioButtonIsDlgButtonCheckedGetWindowTexGetWindowTextLengthSetWindowText11(1)CheckDlgButton(int nIDButton,UNIT nCheck)該函數用來設置按紐的選擇狀態。
6、其中:該函數用來設置按紐的選擇狀態。其中:nIDButton是按紐的是按紐的ID。 nCheck取值取值0表示按紐未被選擇,表示按紐未被選擇,1表示按紐被表示按紐被選擇,選擇,2表示按紐處于不確定狀態。表示按紐處于不確定狀態。(2)CheckRadioButton(int nIDFirstButton, int nIDLastButton , int nIDCheckButton )該函數用來選擇組中的一個單選按紐。其中:該函數用來選擇組中的一個單選按紐。其中:nIDFirstButton指定按紐組中第一個按紐的指定按紐組中第一個按紐的ID。nIDLastButton指定按紐組中最后一個按紐的
7、指定按紐組中最后一個按紐的ID。int nIDCheckButton指定要選擇的按紐的指定要選擇的按紐的ID12(3)GetCheckedRadioButton (int nIDFirstButton, int nIDLastButton )該函數用來獲得一組單選按紐中被選中按紐的該函數用來獲得一組單選按紐中被選中按紐的ID 。其中:。其中:nIDFirstButton指定按紐組中第一個按紐的指定按紐組中第一個按紐的ID。nIDLastButton指定按紐組中最后一個按紐的指定按紐組中最后一個按紐的ID。(4)IsDlgButtonChecked( int nIDButton )該函數返回復選
8、框或單選按紐的選擇狀態。該函數返回復選框或單選按紐的選擇狀態。返回返回0表示按紐未被選擇,表示按紐未被選擇,1表示按紐被選擇,表示按紐被選擇,2表示按紐處于不確定狀態表示按紐處于不確定狀態(僅用于復選框僅用于復選框)。13(5)GetWindowTex獲得正文獲得正文GetWindowTextLength獲得正文長度獲得正文長度SetWindowText設置正文設置正文例如例如 m_btn2是一個按鈕對象是一個按鈕對象m_btn2.SetWindowText(“按鈕已被按下!按鈕已被按下!”);14MFC還提供了一個還提供了一個CBitmapButton的類,的類,允許用戶以圖標的方式顯示按鈕
9、,它是允許用戶以圖標的方式顯示按鈕,它是在在CButtong下派生的下派生的 MFC調用方法調用方法DrawItem()在按鈕上在按鈕上繪制位圖繪制位圖,LoadBitmaps()方法為一個方法為一個CBitmapButton對象對象附上位圖附上位圖自定義自定義按鈕按鈕159.2.2 按鈕控件示例按鈕控件示例 16控件在可視化編程中的應用主要步驟:控件在可視化編程中的應用主要步驟:1、創建基于對話框項目、創建基于對話框項目 2、設計界面、設計界面3、添加成員變量、添加成員變量4、添加消息響應代碼、添加消息響應代碼前兩步也叫做應用程序的可視化編程部分前兩步也叫做應用程序的可視化編程部分后兩步也叫
10、做應用程序的代碼編程部分后兩步也叫做應用程序的代碼編程部分171、創建基于對話框項目、創建基于對話框項目 (1)使用使用AppWizard創建創建“ MFC AppWizard(exe)”類型項目。類型項目。設項目名為設項目名為MY(2)選擇項目類型時選擇選擇項目類型時選擇“Dialog based”類型的應用程類型的應用程序,資源語言選擇中文,否則界面上的中文無法正序,資源語言選擇中文,否則界面上的中文無法正確顯示。確顯示。(3)點擊點擊Finish按鈕按鈕, VC在工作臺中顯示可以進行可視化在工作臺中顯示可以進行可視化編輯的編輯的IDD_ MY _DIALOG對話框,同時,出現控件對話框,
11、同時,出現控件工具欄窗口,工具欄窗口,(或者在或者在ResourceView選項卡中打開選項卡中打開Dialog資源組,然后雙擊資源組,然后雙擊IDD_ MY _DIALOG)。然后)。然后將對話框上默認的控件(一個將對話框上默認的控件(一個Exit按紐和按紐和Cancel按按紐)刪除干凈。紐)刪除干凈。182、設計界面、設計界面 (1) 在控件工具欄上擊某控件(選一個)在控件工具欄上擊某控件(選一個) (2)在對話框中相應位置擊一下或拖出來一個控件在對話框中相應位置擊一下或拖出來一個控件 把鼠標停在編輯框把鼠標停在編輯框控件上,即可顯示控件上,即可顯示該控件的類型該控件的類型控件工具欄提供控
12、件工具欄提供了了VCVC中所有可建中所有可建立的控件類型立的控件類型19Group屬性屬性Auto屬性屬性(3)在新控件上右擊,在新控件上右擊,快捷菜單中選屬性,快捷菜單中選屬性,就可以設置各控件就可以設置各控件的屬性:的屬性:Caption屬性、屬性、Group屬性屬性和和 Auto屬性屬性20對于對于radio和和check類型的按鈕,如果設置了類型的按鈕,如果設置了Auto風格,風格,則開發者不需要響應按鈕的點擊消息,按鈕會自則開發者不需要響應按鈕的點擊消息,按鈕會自動響應的。如果沒有設置動響應的。如果沒有設置Auto風格,則開發者需要風格,則開發者需要響應按鈕的點擊消息,并自行設置按鈕
13、的狀態。響應按鈕的點擊消息,并自行設置按鈕的狀態。對于對于radio類型的按鈕,每個設置類型的按鈕,每個設置Group風格的按鈕和風格的按鈕和接下來沒有設置接下來沒有設置Group風格的按鈕為一組。下一個風格的按鈕為一組。下一個設置了設置了Group風格的按鈕為新一組的開始,即每組風格的按鈕為新一組的開始,即每組的第一個按鈕設置的第一個按鈕設置Group風格。風格。要設置要設置ID_BUTTON2按鈕為默認按鈕,就是要設置按鈕為默認按鈕,就是要設置ID_BUTTON2的的tab order為所有控件中的第一個。在為所有控件中的第一個。在資源編輯器中選擇菜單資源編輯器中選擇菜單Layout|Ta
14、b Order,對話框編,對話框編輯畫面如圖所示。此時按順序點擊控件,就會更輯畫面如圖所示。此時按順序點擊控件,就會更改控件的改控件的tab順序(不是位置順序,而是響應順順序(不是位置順序,而是響應順序)。序)。213、添加成員變量、添加成員變量連接變量就是給對象起一個變量名,以便調用成員函連接變量就是給對象起一個變量名,以便調用成員函數。哪些對象需要連接變量呢?數。哪些對象需要連接變量呢?(1)非自動的非自動的radio和和check類型的按鈕一定要連接變量類型的按鈕一定要連接變量(2)要調用成員函數對其屬性進行修改的命令按鈕一定要調用成員函數對其屬性進行修改的命令按鈕一定要連接變量要連接變
15、量(3)自動的自動的radio按鈕和按鈕和check按鈕一般不連接變量按鈕一般不連接變量例如,我們給非自動的例如,我們給非自動的check類型的按鈕類型的按鈕IDC_CHECK1連接了變量連接了變量m_chk1,在程序的代碼中可以有語句,在程序的代碼中可以有語句 if(m_chk1.GetCheck()0) m_chk1.SetCheck(0); else m_chk1.SetCheck(1); 與控件連接的變量是本對話框類中的成員變量,同時與控件連接的變量是本對話框類中的成員變量,同時也是對象,是對應控件類的對象。也是對象,是對應控件類的對象。22添加成員變量要使用類向導添加成員變量要使用類
16、向導,View-ClassWizard選項選項234、添加消息響應代碼添加消息響應代碼: ClassWizard選選Message Maps24void CMy9_1Dlg:OnButton1() m_btn1.SetWindowText(“你已按下了按你已按下了按鈕!鈕!”); void CMy9_1Dlg:OnButton2() m_btn2.SetWindowText(“按鈕已被按下!按鈕已被按下!”); void CMy9_1Dlg:OnCheck1() if(m_chk1.GetCheck()0) m_chk1.SetCheck(0); else m_chk1.SetCheck(1)
17、; void CMy9_1Dlg:OnRadio1() m_rad1.SetCheck(1); 259.3 滾動條控件滾動條控件 滾動條是一個交互式的、高度可視化的控件滾動條是一個交互式的、高度可視化的控件它包括一個滑塊、滾動條的兩端的按鈕等。它包括一個滑塊、滾動條的兩端的按鈕等。滾動條控件滾動條控件與與屬于窗口的滾動條屬于窗口的滾動條是不一樣的是不一樣的處于窗口的滾處于窗口的滾動條是由該窗動條是由該窗口創建、管理口創建、管理和釋放的和釋放的滾動條控件是由滾動條控件是由用戶創建、管理用戶創建、管理和釋放的和釋放的269.3.1 滾動條類的結構及其方法滾動條類的結構及其方法 滾動條可以通過滾動條
18、可以通過Create函數來創建,函數來創建,也可以用對話框資源模也可以用對話框資源模板來創建板來創建CScrollBar 類的方法 方方法法 說說明明 EnableScrollBar() 使使滾滾動動條條的的一一個個或或兩兩個個箭箭頭頭有有效效或或無無效效 GetScrollInfo() 獲獲得得滾滾動動條條的的消消息息 GetScrollLimit() 獲獲得得滾滾動動條條的的范范圍圍 GetScrollPos() 獲獲得得滾滾動動條條當當前前的的位位置置 GetScrollRange() 獲獲得得制制定定滾滾動動條條的的當當前前最最大大和和最最小小滾滾動動位位置置 SetScrollInf
19、o() 設設置置滾滾動動條條的的消消息息 SetScrollPos() 設設置置滾滾動動塊塊當當前前的的位位置置 SetScrollRange() 設設置置制制定定滾滾動動條條的的最最大大和和最最小小滾滾動動位位置置 ShowScrollBar() 顯顯示示或或隱隱藏藏滾滾動動條條 279.3.2 創建與初始化滾動條類創建與初始化滾動條類 創建創建CScrollBar對象的一般步驟對象的一般步驟(1) 用用C+關鍵字關鍵字new和構造函數和構造函數CScrollBar:CScrollBar()為一個為一個ScrollBar對象分配一個實例對象分配一個實例(2) 初始化初始化CScrollBar
20、對象,將一對象,將一個個Windows滾動條賦予它,并用滾動條賦予它,并用CScroll:Create()方法設置參數和方法設置參數和樣式樣式分配一個滾動條控件對象并返回指向該對象的指針分配一個滾動條控件對象并返回指向該對象的指針CScrollBar:pMyScroll=new CScrollBarCScrollBar:pMyScroll=new CScrollBar調用調用CScrollBar:Create()方法初始化指針方法初始化指針BOOL Create(BOOL Create(DWORD dwStyleDWORD dwStyle, ,const RECT& rectconst
21、 RECT& rect, ,CWnd CWnd * *pParentWndpParentWnd, ,UINT nIDUINT nID););滾動條窗滾動條窗口的樣式口的樣式表示控件的表示控件的大小和位置大小和位置指向控件所屬指向控件所屬窗口的指針窗口的指針父窗口與滾動父窗口與滾動條通信的標識條通信的標識28在設置滾動條控件時,要通過如下方法設置其范圍在設置滾動條控件時,要通過如下方法設置其范圍CScrollBar:SetScrollRange()例如,設置滾動范圍為例如,設置滾動范圍為-100到到100的垂直滾動條的垂直滾動條pMyScroll-SetScrollRange(SB_VE
22、RT,-100,100);pMyScroll-SetScrollRange(SB_VERT,-100,100);設置滾動條范圍的語句一般放在設置滾動條范圍的語句一般放在OnInitDialog()函數中函數中,在對話框程序初始化時就設置滾動條范圍,在對話框程序初始化時就設置滾動條范圍通過通過SetScrollPos()設置滾動塊當前位置設置滾動塊當前位置例如,滾動快的位置在例如,滾動快的位置在-100到到100的中間,即為的中間,即為0的位置的位置pMyScroller-SetScrollPos(0);pMyScroller-SetScrollPos(0);299.3.3滾動條類編程實例滾動條
23、類編程實例 標題為標題為Application of ScrollBar滾動條的滾滾動條的滾動范圍設為動范圍設為0到到20單擊滾動塊與單擊滾動塊與箭頭之間的區箭頭之間的區域。滾動塊上域。滾動塊上移或下移三格,移或下移三格,編輯框中的數編輯框中的數字加字加3或減或減3單擊向上或向下的單擊向上或向下的箭頭,滾動塊向上箭頭,滾動塊向上或向下移動一格,或向下移動一格,編輯框中的數字加編輯框中的數字加1或減或減1按住滾動塊上按住滾動塊上下拖動。編輯下拖動。編輯框中的數字隨框中的數字隨著隨之變化著隨之變化當前值為當前值為10單擊單擊Up按鈕,按鈕,滾動塊移到最滾動塊移到最上邊,編輯框上邊,編輯框的數字變為
24、的數字變為0單擊單擊Down按鈕按鈕,滾動塊移到最,滾動塊移到最下邊,編輯框的下邊,編輯框的數字變為數字變為20單擊單擊Reset按按鈕,滑塊移到鈕,滑塊移到中間,編輯框中間,編輯框的數字變為的數字變為10單擊單擊Exit按按鈕,退出應鈕,退出應用程序用程序30 對對話話框框中中各各個個對對象象的的屬屬性性 對對象象 ID 滾滾動動條條 IDC_SCROLLBAR 編編輯輯框框 IDC_EDIT1 Up 按按鈕鈕 IDC_UP_BUTTON Down 按按鈕鈕 IDC_DOWN_BUTTON Reset 按按鈕鈕 IDC_RESET_BUTTON Exit 按按鈕鈕 IDC_EXIT_BUTT
25、ON (1) 應用程序的可視化編程部分應用程序的可視化編程部分31(2) 應用程序的代碼編程部分應用程序的代碼編程部分(a) (a) 給滾動條連接變量給滾動條連接變量ID變量名變量名類別類別 類型類型IDC_SCROLLBAR m_Scrollbar ControlCScrollbarIDC_EDITlm_EditControlCEdit32BOOL CMy9_2Dlg:OnInitDialog()BOOL CMy9_2Dlg:OnInitDialog() CDialog:OnInitDialog(); CDialog:OnInitDialog(); / TODO: Add extra ini
26、tialization here/ TODO: Add extra initialization herem_Scrollbar.SetScrollRange(0,20);m_Scrollbar.SetScrollRange(0,20);m_Scrollbar.SetScrollPos(10);m_Scrollbar.SetScrollPos(10);char sPos10;char sPos10;itoa(m_Scrollbar.GetScrollPos(),sPos,itoa(m_Scrollbar.GetScrollPos(),sPos,1010); ); m_Edit.SetSel(0
27、,-1);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);m_Edit.ReplaceSel(sPos);UpdateData(FALSE);UpdateData(FALSE);return TRUE; return TRUE; 1010進進制數制數(b) (b) 初始化滾動條初始化滾動條33(3) 給滾動條消息添加代碼給滾動條消息添加代碼 在在Class Wizard中的中的Object IDs列表框中選控件的列表框中選控件的ID值,值,在在Message列表框中選列表框中選WM_VSCROLL選項選項,此即為垂直此即為垂直滾動條的消息滾動條的消息,為
28、此消息加上一個成員函數為此消息加上一個成員函數OnVScroll(),在該函數中對滾動條不同的動作(在該函數中對滾動條不同的動作(209頁表頁表9-7)做出)做出不同的響應。不同的響應。在一個對話框中,不論有幾個垂直滾動條,只添加一在一個對話框中,不論有幾個垂直滾動條,只添加一個成員函數個成員函數OnVScroll(),不論有幾個水平滾動條,只,不論有幾個水平滾動條,只添加一個成員函數添加一個成員函數OnHScroll()。OnVScrollOnVScroll( (UNIT nSBCode,UNIT nSBCode,UNIT nPos,UNIT nPos,CScrollBarCScrollBa
29、r* * pScrollBar pScrollBar););滾動條動滾動條動作標識作標識滾動塊的滾動塊的位置位置指向滾動條指向滾動條變量的指針變量的指針34(3) 給滾動條消息添加代碼給滾動條消息添加代碼 void CMy9_2Dlg:OnVScroll() / TODO: Add your message handler code herechar sPos10;int iNowPos;switch(nSBCode) if(pScrollBar=&m_Scrollbar) case SB_THUMBTRACK:/拖動滑塊拖動滑塊m_Scrollbar.SetScrollPos(nPo
30、s);itoa(nPos,sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);35case SB_LINEDOWN: /單擊滾動條向下的箭頭單擊滾動條向下的箭頭iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPo
31、s);break;36case SB_LINEUP:/單擊滾動條向上的箭頭單擊滾動條向上的箭頭iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;38case SB_PAGEUP:/單擊箭頭與滾塊之間的區域單擊箭頭與滾塊之間的區域iNowPos=m
32、_Scrollbar.GetScrollPos();iNowPos=iNowPos-3;if(iNowPos 單擊鼠標右鍵,選單擊鼠標右鍵,選擇擇Properties命令,在窗命令,在窗口中輸入控件的口中輸入控件的ID標識標識值,值,IDC_EDIT1,用同,用同樣的方法設置其它各個樣的方法設置其它各個對象的屬性對象的屬性74(3) 應用程序的代碼編程部分應用程序的代碼編程部分給編輯框連接變量給編輯框連接變量1)CEDIT型,需要調用型,需要調用CEDIT類的方法時用類的方法時用2)int類型,在類型,在編輯框中要放整數編輯框中要放整數時用時用3)CString類型,在類型,在編輯框中要放字符
33、串編輯框中要放字符串時用時用75給編輯框連接變量給編輯框連接變量( (假設連接的變量名為假設連接的變量名為aa)aa)分分3 3種情況種情況:1)需要調用)需要調用CEDIT類的方法時要給類的方法時要給編輯框連接編輯框連接CEDIT類型的變量類型的變量,比如要改變比如要改變編輯框顯示的內容編輯框顯示的內容, ,代碼為代碼為: : aa.SetSel(0,-1);aa.ReplaceSel(“ABC”);2)在)在編輯框中要放整數編輯框中要放整數時連接時連接int類型的變量類型的變量,比如計比如計算器程序中。算器程序中。代碼為代碼為: : m1=aa;或;或 aa = 3;3)在)在編輯框中要輸
34、入或輸出字符串編輯框中要輸入或輸出字符串時連接時連接CString類類型的變量型的變量,比如需要輸入學生的姓名等比如需要輸入學生的姓名等,輸入之后輸入之后,把把姓名放到數據庫或數組中,不需要調用姓名放到數據庫或數組中,不需要調用CEDIT類的類的成員函數,此時就連接成員函數,此時就連接CString類型類型變量。變量。例例1 1:CString s1; CString s1; if if (aaaa!=”) s1=aa=”) s1=aa;AfxMessageBox(s1s1 ); 76例例2:在一個編輯框中僅需要顯示一個字符串,不對其:在一個編輯框中僅需要顯示一個字符串,不對其修改,可以連接修
35、改,可以連接CString類型的變量,代碼如下:類型的變量,代碼如下:char s10;Strcopy(s,”abc”););aa=_T(s); / _T將字符串轉成串類,本句相當于將字符串轉成串類,本句相當于aa=_T(“abc”); 或者或者CString cs; cs.Format(“age is %d”,12); aa= cs;連接的變量為連接的變量為int類型和類型和CString類型時,一般先用類型時,一般先用UpdateData(TRUE); 從窗口中讀入和各控件連接的從窗口中讀入和各控件連接的變量,然后對變量進行修改變量,然后對變量進行修改,最后用最后用UpdateData(F
36、ALSE); 刷新屏幕。刷新屏幕。綜合本題可知綜合本題可知:在一個編輯框中需要調用在一個編輯框中需要調用CEDIT類的方類的方法時,連接法時,連接CEDIT類的變量。類的變量。77(b) 設置成員變量名為設置成員變量名為m_Edit1,類別為,類別為Control,變量,變量類型為類型為CEdit注意注意,不要將,不要將m_Edit1設設為為CString類型,因為只類型,因為只有設為有設為CEdit 類型,才類型,才能夠調用能夠調用CEdit 類中的類中的一些成員函數,如一些成員函數,如Copy , Paste等,這樣才能完成等,這樣才能完成本應用程序中對本應用程序中對Transfer按鈕要
37、求復制內容的操按鈕要求復制內容的操作的響應作的響應 78用同樣的方法給編輯框用同樣的方法給編輯框EDIT2等其它對象連接各自的變等其它對象連接各自的變量,增加變量之后量,增加變量之后MFC ClassWizard窗口將變為下圖所示窗口將變為下圖所示79 若此時運行該程序,在若此時運行該程序,在Edit文本框中文本框中不能進行多行輸入,只能單行輸入文本,不能進行多行輸入,只能單行輸入文本,而且按回車鍵終止應用程序,同時,文本而且按回車鍵終止應用程序,同時,文本框中也沒有水平和垂直滾動條。框中也沒有水平和垂直滾動條。 下面,我們來完善應用程序中編輯框的下面,我們來完善應用程序中編輯框的特性,使之能
38、夠進行多行文本的輸入特性,使之能夠進行多行文本的輸入80(c) 修改編輯框的特性修改編輯框的特性如果不選這項,在編輯框中按回車鍵,就會終止程序如果不選這項,在編輯框中按回車鍵,就會終止程序如果選這項,按回車鍵就可以進行下一行的輸入如果選這項,按回車鍵就可以進行下一行的輸入多行多行81(4) 添加代碼添加代碼void CMy9_5Dlg:OnShow1Button() m_Edit1.SetSel(0,-1); / 選中編輯框選中編輯框IDC_EDIT1中的全部內容中的全部內容 m_Edit1.ReplaceSel(This is the first EditBox.); 程序中程序中SetSe
39、l()函數是函數是CEdit類中的成員函數,因為類中的成員函數,因為m_Edit1是屬于是屬于CEdit類的對象,故可以調用該類所有的類的對象,故可以調用該類所有的成員函數。成員函數。ReplaceSel()()函數也是函數也是CEdit類中成員函數。類中成員函數。(a) (a) 給給ShowlShowl按鈕連接代碼按鈕連接代碼82(2) (2) 給給 Clear1Clear1按鈕連接代碼按鈕連接代碼void CMy9_5Dlg:OnClear1Button() m_Edit1.SetSel(0,-1);/選中選中IDC_EDIT1中的內容中的內容m_Edit1.ReplaceSel();/用
40、空串代替所選文本,即把所選的文本刪除用空串代替所選文本,即把所選的文本刪除83void CMy9_5Dlg:OnShow2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(This is the second EditBox.);void CMy9_5Dlg:OnClear2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel();(3) 給給Show2和和Clear2按鈕連接代碼按鈕連接代碼84(4) 給按鈕給按鈕IDC_Transfer_BUTTON連接代碼連接代碼 void CMy9_5Dlg:O
41、nTransferButton() m_Edit1.SetSel(0,-1); m_Edit1.Copy(); m_Edit2.SetSel(0,-1); m_Edit2.ReplaceSel(); m_Edit2.Paste();85(5)給給 Undo按鈕連接代碼按鈕連接代碼void CMy9_5Dlg:OnUndoButton() m_Edit1.Undo(); m_Edit2.Undo();(6)給給Exit按鈕連接代碼按鈕連接代碼 void CMy9_5Dlg:OnExitButton() OnOK();86【例【例9-6】 “乘法乘法器器”示例程序,使示例程序,使用者在用者在“乘數
42、乘數”或或者者“被乘數被乘數”編輯編輯框中輸入數字的時框中輸入數字的時候,程序可以隨時候,程序可以隨時計算乘法的結果計算乘法的結果 IDTypeMemberRead-onlyNumberIDC_EDIT_MUL1intm_A IDC_EDIT_MUL2intm_B IDC_EDIT_RESULT CString m_Result 87初始化結果編輯框初始化結果編輯框BOOL CMy9_6Dlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereUpdateData(TRUE); /從窗口中讀入和各
43、控件連接從窗口中讀入和各控件連接的變量的值的變量的值int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE); /刷新屏幕刷新屏幕return TRUE; 88(2)當編輯框中的內容發生改變時,會產生當編輯框中的內容發生改變時,會產生EN_CHANGE消息,需要為乘數與被乘數兩個編輯框響應該消息消息,需要為乘數與被乘數兩個編輯框響應該消息 void CMy9_6Dlg:OnChangeEditMul1( ) UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FAL
44、SE);void CMy9_6Dlg:OnChangeEditMul2( ) UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);89(3) 響應響應Reset按鈕的消息按鈕的消息 void CMy9_6Dlg:OnReset() m_A = 0;m_B = 0;int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE); 90一個控件可以根據需要連接多種類型的變量。一個控件可以根據需要連接多種類型的變量。一一個編輯框連接個編輯框連接2個變量的例子:判斷
45、合法用戶個變量的例子:判斷合法用戶void CExamDlg:OnOK() / TODO: Add extra validation hereUpdateData(true);/更新控件值變量更新控件值變量if(m_user.IsEmpty()/檢查用戶名不能為空檢查用戶名不能為空 AfxMessageBox(用戶名不能為空,請輸入用戶名不能為空,請輸入); m_EditUser.SetFocus(); / 焦點返回用戶名輸入框焦點返回用戶名輸入框 else if(m_pwd.IsEmpty()/檢查密碼不能為空檢查密碼不能為空 AfxMessageBox(密碼不能為空,請輸入密碼不能為空,請
46、輸入); m_EditPwd.SetFocus();/ 焦點返回密碼輸入框焦點返回密碼輸入框91else /檢查密碼長度必須為檢查密碼長度必須為6位位 int len=m_EditPwd.LineLength();/取得密碼長度取得密碼長度 if(len!=6) AfxMessageBox(密碼必須為密碼必須為6位,請重新輸入位,請重新輸入); m_EditPwd.SetFocus(); else /核對用戶名和密碼是否合法核對用戶名和密碼是否合法 if (m_user=userlist)&(m_pwd=userpsw) MessageBox(you are welcome !); e
47、lse MessageBox(sorry,you are not permitted!); 929.7 組合框控件組合框控件 939.7.1 組合框組合框(CComboBox)類的類的結構及組合框的特點結構及組合框的特點 組合框是兩種預定義窗口的組合形式。組合框是兩種預定義窗口的組合形式。 在在Windows編程中使用單一控件編程中使用單一控件往往不能完全滿足于用戶交互的需要,往往不能完全滿足于用戶交互的需要,最常見的組合框例子是對話框及與其最常見的組合框例子是對話框及與其相聯系的靜態文本和編輯框。相聯系的靜態文本和編輯框。 949.7.2 組合框與應用程序間消息組合框與應用程序間消息傳遞傳遞
48、 組合框通過向其父窗口發關組合框通過向其父窗口發關WM_COMMAND消息通知應用程序用戶的交互信息。消息通知應用程序用戶的交互信息。 應用程序對組合框的操作也通過使用函數應用程序對組合框的操作也通過使用函數SendMessage或或SendDlgItemMessage向組合框向組合框發送消息進行。對組合框的操作實際上是對組發送消息進行。對組合框的操作實際上是對組合框中各成員的操作。合框中各成員的操作。 959.7.3 組合框控件應用舉例組合框控件應用舉例 【例【例9-7】本例創建組合框控件,當單擊向下】本例創建組合框控件,當單擊向下按鈕時,顯示可選文件的名字。當選中某一按鈕時,顯示可選文件的
49、名字。當選中某一項時,顯示該項的名稱項時,顯示該項的名稱 96組合框分組合框分3 3種種普通組合框:顯示一個編輯控件和一個列表框。普通組合框:顯示一個編輯控件和一個列表框。下拉式組合框:隱藏列表框,直到用戶打開它。下拉式組合框:隱藏列表框,直到用戶打開它。下拉列表框:直到用戶打開時才顯示列表框,用戶只下拉列表框:直到用戶打開時才顯示列表框,用戶只能從列表框中選擇選項,不允許用戶輸入。在組合能從列表框中選擇選項,不允許用戶輸入。在組合框控件上選擇框控件上選擇Drop ListDrop List風格。風格。單擊三角按紐,出現一個虛框,虛框的大小決定程序單擊三角按紐,出現一個虛框,虛框的大小決定程序
50、運行時下拉列表框的大小,用鼠標拖動中間的小方運行時下拉列表框的大小,用鼠標拖動中間的小方框,可以調整虛框的大小。框,可以調整虛框的大小。對于普通組合框,當用戶選擇的內容發生改變的時候,對于普通組合框,當用戶選擇的內容發生改變的時候,會產生會產生CBN_SELECTCHANGECBN_SELECTCHANGE消息。消息。對于下拉列表框,當用戶選擇的內容發生改變的時候,對于下拉列表框,當用戶選擇的內容發生改變的時候,會產生會產生CBN_SELENDOKCBN_SELENDOK消息。消息。本例中是普通組合框本例中是普通組合框971 1)組合框一般連接組合框一般連接ComboBoxComboBox類型
51、的變量類型的變量2 2)給組合框裝載選項:可以在)給組合框裝載選項:可以在OnInitDialog()OnInitDialog()函數函數中使用中使用m_xx.AddString(“85”);m_xx.AddString(“85”);的方法來裝載選的方法來裝載選項,還可以打開組合框的屬性表(右擊控件,選項,還可以打開組合框的屬性表(右擊控件,選PropertiesProperties)選)選DataData標簽,輸入組合框的選項,標簽,輸入組合框的選項,添加第一個選項后,按添加第一個選項后,按Ctrl+EnterCtrl+Enter換行輸入第二個換行輸入第二個選項。如果同時使用這兩種方法裝載選
52、項,選中選項。如果同時使用這兩種方法裝載選項,選中SortSort屬性,屬性,插入的內容將按照字母順序排序,否則,插入的內容將按照字母順序排序,否則,從從DataData標簽添加的選項標簽添加的選項排在前面。排在前面。3)設置初值:)設置初值:在在OnInitDialog()函數中使用函數中使用m_ xxxx.SelectString(-1,“95”);選中選中“95”那個選項那個選項或或m_ xxxx.SetCurSel(0) ; 選中下標為選中下標為0的那個選項的那個選項4)4)單擊組合框中某單擊組合框中某選項時選項時,會自動把選項內容在編輯框會自動把選項內容在編輯框中顯示出來。中顯示出來
53、。985 5)如果希望在消息框中顯示組合框中當前)如果希望在消息框中顯示組合框中當前選項,代選項,代碼如下:碼如下:char st15;m_xx.GetWindowText(st,15); /獲得組合框獲得組合框m_xxm_xx的正文的正文( (長長度是度是15),15),并放到變量并放到變量stst中中AfxMessageBox(st);6 6)如果希望根據組合框中當前選項做出不同處理,)如果希望根據組合框中當前選項做出不同處理,要給組合框添加要給組合框添加CBN_SELENDOKCBN_SELENDOK消息響應函數消息響應函數, ,代碼代碼如下:如下:int i;int i;i= i= m
54、_xx.GetCurSel(); /得到得到組合框的下標組合框的下標if (i =0) if (i =0) elseelse if(i =1) if(i =1) 。99 將一個將一個Combo Box控件放到對話框上。控件放到對話框上。取消取消Sort風風格格。否則插入的內容將按照字母順序排序,而不是。否則插入的內容將按照字母順序排序,而不是插入的順序排序。添加插入的順序排序。添加CComboBox類型的變量類型的變量m_cbBOOL CMy9_7Dlg:OnInitDialog() /初始化對話框初始化對話框 CDialog:OnInitDialog();/ TODO: Add extra
55、initialization herem_cb.AddString(Monday);m_cb.AddString(Tuesday);m_cb.AddString(Wednesday);m_cb.AddString(Thursday);m_cb.AddString(Friday);m_cb.AddString(Saturday);m_cb.AddString(Sunday);return TRUE; 100當用戶選擇的內容發生改變的時候,會產生當用戶選擇的內容發生改變的時候,會產生CBN_SELCHANGE消息。為控件添加該消息消息。為控件添加該消息的響應函數:的響應函數:void CMy9_7
56、Dlg:OnSelchangeCombo() CString msg;m_cb.GetLBText(m_cb.GetCurSel(), msg);/將組將組合框中下標為給定值的這一項的名稱給合框中下標為給定值的這一項的名稱給msgAfxMessageBox(msg);101【例【例9-8】本程序為幾種控件的綜合應用】本程序為幾種控件的綜合應用 102控件在可視化編程中的應用主要步驟:控件在可視化編程中的應用主要步驟:1、創建基于對話框項目、創建基于對話框項目 2、設計界面、設計界面3、添加成員變量、添加成員變量4、添加消息響應代碼、添加消息響應代碼添加成員變量的目的:添加成員變量的目的:1、為
57、了在消息響應函數代碼中調用某個、為了在消息響應函數代碼中調用某個控件類控件類的成的成員函數,此時,要連接員函數,此時,要連接control類型類型的變量。類上的的變量。類上的變量叫對象,使用格式:對象變量叫對象,使用格式:對象.成員函數成員函數2、為了在消息響應函數代碼中使用用戶的選擇或用、為了在消息響應函數代碼中使用用戶的選擇或用戶輸入的值,此時,要連接戶輸入的值,此時,要連接value類型類型的變量的變量。103幾種常用控件總結幾種常用控件總結一、命令按紐一般不連變量一、命令按紐一般不連變量, ,但是要對其單擊消息添但是要對其單擊消息添加對話框類的成員函數加對話框類的成員函數, ,并編寫代
58、碼。并編寫代碼。二、二、復選框可以不連接變量,也可以連接復選框可以不連接變量,也可以連接BOOLBOOL型變量,型變量,還可以連接還可以連接CbuttonCbutton型變量型變量。在程序中需要根據復在程序中需要根據復選框是否選中做出不同的處理選框是否選中做出不同的處理, ,代碼編寫如下:代碼編寫如下:1041 1、連接、連接BOOLBOOL型變量:當用戶選中復選框型變量:當用戶選中復選框, ,相連接的變相連接的變量自動為量自動為TRUE,TRUE,此時代碼為此時代碼為if(aa=TRUE)if(aa=TRUE) elseelse 2 2、連接、連接CbuttonCbutton型變量:此時代碼
59、為型變量:此時代碼為if(m_check.Getcheck()if(m_check.Getcheck() elseelse 3 3、不連接變量:此時代碼為、不連接變量:此時代碼為if (IsDlgButtonChenked(IDC_check)if (IsDlgButtonChenked(IDC_check) elseelse 本例中,本例中,2 2個復選框選中時,不對自己操作,而是對個復選框選中時,不對自己操作,而是對編輯框操作。連接編輯框操作。連接BOOLBOOL型變量。型變量。105幾種常用控件總結幾種常用控件總結三、三、Auto風格的單選按紐會自動響應單擊消息,在所風格的單選按紐會自動
60、響應單擊消息,在所選項的前面加點,同時去掉同組中其它單選按紐前選項的前面加點,同時去掉同組中其它單選按紐前面加點,所以,面加點,所以,Auto風格的單選按紐可以不連接風格的單選按紐可以不連接變量。變量。也可以連接也可以連接int型變量,還可以連接型變量,還可以連接Cbutton型變量型變量。一般要在某個控件的某個消息響應函數代碼中根據單一般要在某個控件的某個消息響應函數代碼中根據單選按紐當前的選項做出不同反映。代碼編寫如下:選按紐當前的選項做出不同反映。代碼編寫如下:1、連接、連接Cbutton型變量(每個單選按紐都要連變量):型變量(每個單選按紐都要連變量):此時代碼為此時代碼為if(m_check.Getcheck() el
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論