VC面向?qū)ο笈c可視化程序設(shè)計 第九章 windows標(biāo)準(zhǔn)控_第1頁
VC面向?qū)ο笈c可視化程序設(shè)計 第九章 windows標(biāo)準(zhǔn)控_第2頁
VC面向?qū)ο笈c可視化程序設(shè)計 第九章 windows標(biāo)準(zhǔn)控_第3頁
VC面向?qū)ο笈c可視化程序設(shè)計 第九章 windows標(biāo)準(zhǔn)控_第4頁
VC面向?qū)ο笈c可視化程序設(shè)計 第九章 windows標(biāo)準(zhǔn)控_第5頁
已閱讀5頁,還剩126頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1第第9章章 Windows 標(biāo)準(zhǔn)控件在可視化編標(biāo)準(zhǔn)控件在可視化編程中的應(yīng)用程中的應(yīng)用2 控件是控件是Windows 圖形用戶界面圖形用戶界面的主要組成部分之一,用戶通過的主要組成部分之一,用戶通過操作控件對象完成與應(yīng)用程序之操作控件對象完成與應(yīng)用程序之間的交互。控件的使用集中體現(xiàn)間的交互??丶氖褂眉畜w現(xiàn)了了Windows 系統(tǒng)面向?qū)ο蟮奶攸c系統(tǒng)面向?qū)ο蟮奶攸c 39.1概述概述控件工控件工具欄具欄控件接受的消息控件接受的消息主要有單擊、雙擊主要有單擊、雙擊和字符輸入等和字符輸入等49.2 按鈕控件及其應(yīng)用按鈕控件及其應(yīng)用 按鈕按鈕控件控件 普通按鈕普通按鈕圓按鈕圓按鈕復(fù)選框按鈕復(fù)選框按鈕組

2、框按鈕組框按鈕自繪按鈕自繪按鈕 59.2.1 按鈕控件的創(chuàng)建過程按鈕控件的創(chuàng)建過程 CButton類的成員函數(shù)類的成員函數(shù)Create負(fù)責(zé)創(chuàng)建按負(fù)責(zé)創(chuàng)建按鈕控件,該函數(shù)的聲明為:鈕控件,該函數(shù)的聲明為:BOOL Create ( LPCTSTR lpszCaption, /指定了按鈕顯示的正文指定了按鈕顯示的正文 DWORD dwStyle, /按鈕的風(fēng)格按鈕的風(fēng)格 const RECT& rect, /按鈕的位置和大小按鈕的位置和大小 CWnd* pParentWnd, /指向父窗口,指向父窗口, UINT nID/按鈕的按鈕的ID )6按鈕控件消息按鈕控件消息:ON_BN_CLICKEDO

3、N_BN_DBLCLICKEDON_COMMAND兩個兩個類似類似按鈕按鈕是最是最常見常見的控的控件之件之一一復(fù)選框復(fù)選框單選按鈕單選按鈕下壓式按鈕下壓式按鈕分組框分組框常用于只有兩種常用于只有兩種完全相反狀態(tài)完全相反狀態(tài)的情況下的情況下適用于同一組屬性相適用于同一組屬性相同的數(shù)據(jù)中選一個數(shù)據(jù)同的數(shù)據(jù)中選一個數(shù)據(jù)適用于消息的發(fā)送適用于消息的發(fā)送沒有太多的操作沒有太多的操作只是在窗口中劃只是在窗口中劃分區(qū)域范圍分區(qū)域范圍7GetCheck( )SetCheck( )GetBitmap()SetBitmap()GetButtonStyle()SetButtonStyle()GetCursor()S

4、etCursor()GetIcon()SetIcon()GetState()SetState()CButton類的類的成成員函數(shù)員函數(shù)在知道按鈕在知道按鈕ID的前的前提下,還可使用與提下,還可使用與按鈕有關(guān)的按鈕有關(guān)的CWnd成員函數(shù)來設(shè)置或成員函數(shù)來設(shè)置或查詢按鈕狀態(tài)查詢按鈕狀態(tài) CheckDlgButtonCheckRadioButtonGetCheckedRadioButtonIs DlgButtonCheckedGetWindowTexGetWindowTextLengthSetWindowText8MFC還提供了一個還提供了一個CBitmapButton的類,的類,允許用戶以圖標(biāo)的方

5、式顯示按鈕,它是允許用戶以圖標(biāo)的方式顯示按鈕,它是在在CButtong下派生的下派生的 MFC調(diào)用方法調(diào)用方法DrawItem()在按鈕上在按鈕上繪制位圖繪制位圖,LoadBitmaps()方法為一個方法為一個CBitmapButton對象對象附上位圖,最多可以有附上位圖,最多可以有4個位圖個位圖自定義自定義按鈕按鈕99.2.2 按鈕控件示例按鈕控件示例 10IDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_CHECK1IDC_CHECK2Group屬性屬性Auto屬性屬性主要步驟:主要步驟:1. 創(chuàng)建基于對話框項目創(chuàng)建基于對話框項目2. 設(shè)置按鈕的屬

6、性設(shè)置按鈕的屬性 113. 添加成員變量并添加消息響應(yīng)函數(shù)添加成員變量并添加消息響應(yīng)函數(shù)auto風(fēng)格控風(fēng)格控件不必添加件不必添加成員變量成員變量12void 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(

7、1); void CMy9_1Dlg:OnRadio1() m_rad1.SetCheck(1); 139.3 滾動條控件滾動條控件 滾動條是一個交互式的、高度可視化的控件滾動條是一個交互式的、高度可視化的控件它包括一個滑塊、滾動條的兩端的按鈕等。它包括一個滑塊、滾動條的兩端的按鈕等。滾動條控件滾動條控件與與屬于窗口的滾動條屬于窗口的滾動條是不一樣的是不一樣的處于窗口的滾處于窗口的滾動條是由該窗動條是由該窗口創(chuàng)建、管理口創(chuàng)建、管理和釋放的和釋放的滾動條控件是由滾動條控件是由用戶創(chuàng)建、管理用戶創(chuàng)建、管理和釋放的和釋放的149.3.1 滾動條類的結(jié)構(gòu)及其方法滾動條類的結(jié)構(gòu)及其方法 滾動條可以通過通

8、知代滾動條可以通過通知代碼來創(chuàng)建,也可以用對碼來創(chuàng)建,也可以用對話框資源模板來創(chuàng)建話框資源模板來創(chuàng)建CScrollBar 類的方法 方方法法 說說明明 EnableScrollBar() 使使?jié)L滾動動條條的的一一個個或或兩兩個個箭箭頭頭有有效效或或無無效效 GetScrollInfo() 獲獲得得滾滾動動條條的的消消息息 GetScrollLimit() 獲獲得得滾滾動動條條的的范范圍圍 GetScrollPos() 獲獲得得滾滾動動條條當(dāng)當(dāng)前前的的位位置置 GetScrollRange() 獲獲得得制制定定滾滾動動條條的的當(dāng)當(dāng)前前最最大大和和最最小小滾滾動動位位置置 SetScrollInf

9、o() 設(shè)設(shè)置置滾滾動動條條的的消消息息 SetScrollPos() 設(shè)設(shè)置置滾滾動動塊塊當(dāng)當(dāng)前前的的位位置置 SetScrollRange() 設(shè)設(shè)置置制制定定滾滾動動條條的的最最大大和和最最小小滾滾動動位位置置 ShowScrollBar() 顯顯示示或或隱隱藏藏滾滾動動條條 15常用滾動條動作標(biāo)識及其說明常用滾動條動作標(biāo)識及其說明SB_TOP / SB_BOTTOM :滾動到滾動條最頂:滾動到滾動條最頂 / 底端底端SB_LINEUP / SB_LINEDOWN:向上:向上 / 下滾動一行下滾動一行SB_LEFT / SB_RIGHT:滾動到左:滾動到左 / 右邊右邊SB_LINELE

10、FT / SB_LINERIGHT:向左:向左 / 右滾動一行右滾動一行SB_PAGEUP / SB_PAGEDOWN :向上:向上 / 下滾動一頁下滾動一頁SB_PAGELEFT / SB_PAGERIGHT :向左:向左 / 右滾動一頁右滾動一頁SB_THUMBPOSITION:滾動框移動到新位置:滾動框移動到新位置SB_THUMBTRACK:滾動框被拖動:滾動框被拖動SB_ENDSCROLL:滾動到最終位置:滾動到最終位置169.3.2 創(chuàng)建與初始化滾動條類創(chuàng)建與初始化滾動條類 創(chuàng)建創(chuàng)建CScrollBar對象的一般步驟對象的一般步驟(1) 用用C+關(guān)鍵字關(guān)鍵字new和構(gòu)造函數(shù)和構(gòu)造函數(shù)

11、CScrollBar:CScrollBar()為一個為一個ScrollBar對象分配一個實例對象分配一個實例(2) 初始化初始化CScrollBar對象,將一對象,將一個個Windows滾動條賦予它,并用滾動條賦予它,并用CScroll:Create()方法設(shè)置參數(shù)和方法設(shè)置參數(shù)和樣式樣式分配一個滾動條控件對象并返回指向該對象的指針分配一個滾動條控件對象并返回指向該對象的指針CScrollBar:pMyScroll=new CScrollBarCScrollBar:pMyScroll=new CScrollBar調(diào)用調(diào)用CScrollBar:Create()方法初始化指針方法初始化指針BOOL

12、 Create(BOOL Create(DWORD dwStyleDWORD dwStyle, ,const RECT& rectconst RECT& rect, ,CWnd CWnd * *pParentWndpParentWnd, ,UINT nIDUINT nID););滾動條窗滾動條窗口的樣式口的樣式表示控件的表示控件的大小和位置大小和位置指向控件所屬指向控件所屬窗口的指針窗口的指針父窗口與滾動父窗口與滾動條通信的標(biāo)識條通信的標(biāo)識17在設(shè)置滾動條控件時,要通過如下方法設(shè)置其范圍在設(shè)置滾動條控件時,要通過如下方法設(shè)置其范圍CScrollBar:SetScrollRange()例如,設(shè)置

13、滾動范圍為例如,設(shè)置滾動范圍為-100到到100的垂直滾動條的垂直滾動條pMyScroll-SetScrollRangepMyScroll-SetScrollRange(SB_VERT,-100,100);(SB_VERT,-100,100);通過通過SetScrollPos()設(shè)置滾動塊當(dāng)前位置設(shè)置滾動塊當(dāng)前位置例如,滾動快的位置在例如,滾動快的位置在-100到到100的中間,即為的中間,即為0的位置的位置pMyScroller-SetScrollPospMyScroller-SetScrollPos(0);(0);189.3.3滾動條類編程實例滾動條類編程實例 標(biāo)題為標(biāo)題為Applicat

14、ion of ScrollBar滾動條的滾滾動條的滾動范圍設(shè)為動范圍設(shè)為0到到20單擊滾動塊與單擊滾動塊與箭頭之間的區(qū)箭頭之間的區(qū)域。滾動塊上域。滾動塊上移或下移三格,移或下移三格,編輯框中的數(shù)編輯框中的數(shù)字加字加3或減或減3單擊向上或向下的單擊向上或向下的箭頭,滾動塊向上箭頭,滾動塊向上或向下移動一格,或向下移動一格,編輯框中的數(shù)字加編輯框中的數(shù)字加1或減或減1按住滾動塊上按住滾動塊上下拖動。編輯下拖動。編輯框中的數(shù)字隨框中的數(shù)字隨著隨之變化著隨之變化當(dāng)前值為當(dāng)前值為10單擊單擊Up按鈕,按鈕,滾動塊移到最滾動塊移到最上邊,編輯框上邊,編輯框的數(shù)字變?yōu)榈臄?shù)字變?yōu)?單擊單擊Down按鈕按鈕,滾

15、動塊移到最滾動塊移到最下邊,編輯框的下邊,編輯框的數(shù)字變?yōu)閿?shù)字變?yōu)?0單擊單擊Reset按按鈕,滑塊移到鈕,滑塊移到中間,編輯框中間,編輯框的數(shù)字變?yōu)榈臄?shù)字變?yōu)?0單擊單擊Exit按按鈕,退出應(yīng)鈕,退出應(yīng)用程序用程序19 對對話話框框中中各各個個對對象象的的屬屬性性 對對象象 ID 滾滾動動條條 IDC_SCROLLBAR 編編輯輯框框 IDC_EDIT1 Up 按按鈕鈕 IDC_UP_BUTTON Down 按按鈕鈕 IDC_DOWN_BUTTON Reset 按按鈕鈕 IDC_RESET_BUTTON Exit 按按鈕鈕 IDC_EXIT_BUTTON (1) 應(yīng)用程序的可視化編程部分應(yīng)用

16、程序的可視化編程部分20(2) 應(yīng)用程序的代碼編程部分應(yīng)用程序的代碼編程部分(a) (a) 給滾動條連接變量給滾動條連接變量ID變量名變量名類別類別 類型類型IDC_SCROLLBAR m_Scrollbar ControlCScrollbarIDC_EDITlm_EditControlCEdit21BOOL CMy9_2Dlg:OnInitDialog()BOOL CMy9_2Dlg:OnInitDialog() CDialog:OnInitDialog(); CDialog:OnInitDialog(); / TODO: Add extra initialization here/ TOD

17、O: 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,-1);m_Edit.SetSel(0,

18、-1);m_Edit.ReplaceSel(sPos);m_Edit.ReplaceSel(sPos);UpdateData(FALSE);UpdateData(FALSE);return TRUE; return TRUE; 1010進(jìn)進(jìn)制數(shù)制數(shù)(b) (b) 初始化滾動條初始化滾動條22(3) 給滾動條消息添加代碼給滾動條消息添加代碼 void CMy9_2Dlg:OnVScroll() / TODO: Add your message handler code herechar sPos10;int iNowPos;switch(nSBCode) if(pScrollBar=&m_Scr

19、ollbar) case SB_THUMBTRACK:/拖動滑塊拖動滑塊m_Scrollbar.SetScrollPos(nPos);itoa(nPos,sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);23case SB_LINEDOWN: /單擊滾動條向下的箭頭單擊滾動條向下的箭頭iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.G

20、etScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;24case 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

21、(sPos);break;26case SB_PAGEUP:/單擊箭頭與滾塊之間的區(qū)域單擊箭頭與滾塊之間的區(qū)域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-3;if(iNowPos 單擊鼠標(biāo)右鍵,選單擊鼠標(biāo)右鍵,選擇擇Properties命令,在窗命令,在窗口中輸入控件的口中輸入控件的ID標(biāo)識標(biāo)識值,值,IDC_EDIT1,用同,用同樣的方法設(shè)置其它各個樣的方法設(shè)置其它各個對象的屬性對象的屬性63(3) 應(yīng)用程序的代碼編程部分應(yīng)用程序的代碼編程部分(a)(a) 給編輯框連接變量給編輯框連接變量選擇選擇Member Variables選項卡

22、選項卡在在Control IDs列表框中單擊列表框中單擊IDC_EDIT1項,使之高亮化項,使之高亮化單擊單擊Add Variable按鈕,此時顯示按鈕,此時顯示Add Member Variable窗口窗口64(b) 設(shè)置成員變量名為設(shè)置成員變量名為m_Edit1,類別為,類別為Control,變量,變量類型為類型為CEdit注意注意,不要將,不要將m_Edit1設(shè)設(shè)為為CString類型,因為只類型,因為只有設(shè)為有設(shè)為CEdit 類型,才類型,才能夠調(diào)用能夠調(diào)用CEdit 類中的類中的一些成員函數(shù),如一些成員函數(shù),如Copy , Paste等,這樣才能完成等,這樣才能完成本應(yīng)用程序中對本應(yīng)

23、用程序中對Transfer按鈕要求復(fù)制內(nèi)容的操按鈕要求復(fù)制內(nèi)容的操作的響應(yīng)作的響應(yīng) 65用同樣的方法給編輯框用同樣的方法給編輯框EDIT2等其它對象連接各自的變等其它對象連接各自的變量,增加變量之后量,增加變量之后MFC ClassWizard窗口將變?yōu)橄聢D所示窗口將變?yōu)橄聢D所示66 若此時運行該程序,在若此時運行該程序,在Edit文本框中文本框中不能進(jìn)行多行輸入,只能單行輸入文本,不能進(jìn)行多行輸入,只能單行輸入文本,而且按回車鍵終止應(yīng)用程序,同時,文本而且按回車鍵終止應(yīng)用程序,同時,文本框中也沒有水平和垂直滾動條??蛑幸矝]有水平和垂直滾動條。 下面,我們來完善應(yīng)用程序中編輯框的下面,我們來完

24、善應(yīng)用程序中編輯框的特性,使之能夠進(jìn)行多行文本的輸入特性,使之能夠進(jìn)行多行文本的輸入67可進(jìn)行多行輸入可進(jìn)行多行輸入增加水平及垂直滾動條增加水平及垂直滾動條若不選擇此項,在編輯框若不選擇此項,在編輯框中按回車鍵就會終止應(yīng)用中按回車鍵就會終止應(yīng)用程序,若選此項,按回車程序,若選此項,按回車鍵就可進(jìn)行下一行的輸入,鍵就可進(jìn)行下一行的輸入,實現(xiàn)多行文本的輸入實現(xiàn)多行文本的輸入(c) 修改編輯框的特性修改編輯框的特性68(4) 添加代碼添加代碼void CMy9_5Dlg:OnShow1Button() m_Edit1.SetSel(0,-1); / 選中編輯框選中編輯框IDC_EDIT1中的全部內(nèi)容

25、中的全部內(nèi)容 m_Edit1.ReplaceSel(This is the first EditBox.); 程序中程序中SetSel()函數(shù)是函數(shù)是CEdit類中的成員函數(shù),因為類中的成員函數(shù),因為m_Edit1是屬于是屬于CEdit類的對象,故可以調(diào)用該類所有的類的對象,故可以調(diào)用該類所有的成員函數(shù)。成員函數(shù)。ReplaceSel()()函數(shù)也是函數(shù)也是CEdit類中成員函數(shù)。類中成員函數(shù)。(a) (a) 給給ShowlShowl按鈕連接代碼按鈕連接代碼69(2) (2) 給給 Clear1Clear1按鈕連接代碼按鈕連接代碼void CMy9_5Dlg:OnClear1Button()

26、m_Edit1.SetSel(0,-1);/選中選中IDC_EDIT1中的內(nèi)容中的內(nèi)容m_Edit1.ReplaceSel();/用空串代替所選文本,即把所選的文本刪除用空串代替所選文本,即把所選的文本刪除70void 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按鈕

27、連接代碼按鈕連接代碼71(4) 給按鈕給按鈕IDC_Transfer_BUTTON連接代碼連接代碼 void CMy9_5Dlg:OnTransferButton() m_Edit1.SetSel(0,-1);m_Edit1.Copy(); m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel();m_Edit2.Paste();72(5)給給 Undo按鈕連接代碼按鈕連接代碼void CMy9_5Dlg:OnUndoButton() m_Edit1.Undo(); m_Edit2.Undo();(6)給給Exit按鈕連接代碼按鈕連接代碼 void CMy9_5Dlg

28、:OnExitButton() OnOK();73【例【例9-6】 “乘法乘法器器”示例程序,使示例程序,使用者在用者在“乘數(shù)乘數(shù)”或或者者“被乘數(shù)被乘數(shù)”編輯編輯框中輸入數(shù)字的時框中輸入數(shù)字的時候,程序可以隨時候,程序可以隨時計算乘法的結(jié)果計算乘法的結(jié)果 IDTypeMemberRead-onlyNumberIDC_EDIT_MUL1intm_AIDC_EDIT_MUL2intm_BIDC_EDIT_RESULTCStringm_Result74(1) 初始化結(jié)果編輯框初始化結(jié)果編輯框BOOL CMy9_6Dlg:OnInitDialog()CDialog:OnInitDialog();/

29、TODO: Add extra initialization hereUpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);return TRUE; 75(2)當(dāng)編輯框中的內(nèi)容發(fā)生改變時,會產(chǎn)生當(dāng)編輯框中的內(nèi)容發(fā)生改變時,會產(chǎn)生EN_CHANGE消息,需要為乘數(shù)與被乘數(shù)兩個編輯框響應(yīng)該消息消息,需要為乘數(shù)與被乘數(shù)兩個編輯框響應(yīng)該消息 void CMy9_6Dlg:OnChangeEditMul1( ) UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i

30、);UpdateData(FALSE);void CMy9_6Dlg:OnChangeEditMul2( ) UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);76(3) 響應(yīng)響應(yīng)Reset按鈕的消息按鈕的消息 void CMy9_6Dlg:OnReset() m_A = 0;m_B = 0;int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE); 779.7 組合框控件組合框控件 789.7.1 組合框組合框(CComboBox)類的類的結(jié)構(gòu)及組

31、合框的特點結(jié)構(gòu)及組合框的特點 組合框是兩種預(yù)定義窗口的組合形式。組合框是兩種預(yù)定義窗口的組合形式。 在在Windows編程中使用單一控件編程中使用單一控件往往不能完全滿足與用戶交互的需要,往往不能完全滿足與用戶交互的需要,最常見的組合框例子是對話框及與其最常見的組合框例子是對話框及與其相聯(lián)系的靜態(tài)文本和編輯框。相聯(lián)系的靜態(tài)文本和編輯框。 799.7.2 組合框與應(yīng)用程序間消息組合框與應(yīng)用程序間消息傳遞傳遞 組合框通過向其父窗口發(fā)關(guān)組合框通過向其父窗口發(fā)關(guān)WM_COMMAND消息通知應(yīng)用程序用戶的交互信息。消息通知應(yīng)用程序用戶的交互信息。 應(yīng)用程序?qū)M合框的操作也通過使用函數(shù)應(yīng)用程序?qū)M合框的操

32、作也通過使用函數(shù)SendMessage或或SendDlgItemMessage向組合框向組合框發(fā)送消息進(jìn)行。由于對組合框的操作實際上是發(fā)送消息進(jìn)行。由于對組合框的操作實際上是對組合框中各成員的操作。對組合框中各成員的操作。 809.7.3 組合框控件應(yīng)用舉例組合框控件應(yīng)用舉例 【例【例9-7】本例創(chuàng)建組合框控件,當(dāng)單擊向下】本例創(chuàng)建組合框控件,當(dāng)單擊向下按鈕時,顯示可選文件的名字。當(dāng)選中某一按鈕時,顯示可選文件的名字。當(dāng)選中某一項時,顯示該項的名稱項時,顯示該項的名稱 81 將一個將一個Combo Box控件放到對話框上??丶诺綄υ捒蛏?。取消取消Sort風(fēng)風(fēng)格格。否則插入的內(nèi)容將按照字母順序

33、排序,而不是。否則插入的內(nèi)容將按照字母順序排序,而不是插入的順序排序。添加插入的順序排序。添加CComboBox類型的變量類型的變量m_cbBOOL CMy9_7Dlg:OnInitDialog() /初始化對話框初始化對話框 CDialog:OnInitDialog();/ TODO: Add extra initialization herem_cb.AddString(Monday);m_cb.AddString(Tuesday);m_cb.AddString(Wednesday);m_cb.AddString(Thursday);m_cb.AddString(Friday);m_cb.

34、AddString(Saturday);m_cb.AddString(Sunday);return TRUE; 82當(dāng)用戶選擇的內(nèi)容發(fā)生改變的時候,會產(chǎn)當(dāng)用戶選擇的內(nèi)容發(fā)生改變的時候,會產(chǎn)生生CBN_SELCHANGE消息。為控件添加該消息。為控件添加該消息的響應(yīng)函數(shù):消息的響應(yīng)函數(shù):void CMy9_7Dlg:OnSelchangeCombo() CString msg;m_cb.GetLBText(m_cb.GetCurSel(), msg);AfxMessageBox(msg);83【例【例9-8】本程序為幾種控件的綜合應(yīng)用】本程序為幾種控件的綜合應(yīng)用 84在設(shè)計的過程中,同一組在設(shè)計

35、的過程中,同一組單選按鈕必須一個接一單選按鈕必須一個接一個地放進(jìn)對話框中,中個地放進(jìn)對話框中,中間不能插入其它的控件間不能插入其它的控件 對于成組的單選按對于成組的單選按鈕,只在每組的第鈕,只在每組的第一個按鈕的屬性中一個按鈕的屬性中選中選中Group設(shè)置設(shè)置在在Sex Selecting組中只有組中只有Boy單單選按鈕選中選按鈕選中Group屬性屬性在在Age Range組中只組中只有有“20”單選按鈕單選按鈕選中選中Group屬性屬性85Visual C按照放入對話框中的先后順序,給每個控件賦一按照放入對話框中的先后順序,給每個控件賦一個個ID值,所以控件的值,所以控件的ID值是連續(xù)的。值

36、是連續(xù)的。Group屬性的控件之間屬性的控件之間的控件為一組。的控件為一組??梢詮目梢詮膔esource.h的資源頭文件中得到的資源頭文件中得到ID值值#define IDC_SHOW_BUTTON 1006#define IDC_SHOW_BUTTON 1006#define IDC_HIDE_BUTTON 1007#define IDC_HIDE_BUTTON 1007#define IDC_Boy_RADIO 1008#define IDC_Boy_RADIO 1008#define IDC_Girl_RADIO 1009#define IDC_Girl_RADIO 1009#defin

37、e IDC_Age1_RADIO 1010#define IDC_Age1_RADIO 1010#define IDC_Age2_RADIO 1011#define IDC_Age2_RADIO 1011#define IDC_Age3_RADIO 1012#define IDC_Age3_RADIO 1012#define IDC_Show_Sex_Age_BUTTON 1013#define IDC_Show_Sex_Age_BUTTON 1013#define IDC_Result_EDIT 1014#define IDC_Result_EDIT 101486在為相關(guān)控件連接變量和方法后

38、,開始編程(1) 給復(fù)選框給復(fù)選框IDC_DATE_CHECK添加代碼添加代碼 OnDateCheck()方法的實現(xiàn)代碼如下:方法的實現(xiàn)代碼如下:void CMy9_8Dlg:OnDataCheck() UpdateData(TRUE);if(m_DateCheck=TRUE)CTime tNow ;tNow=CTime:GetCurrentTime();CString sNow=tNow.Format(%y.%m.%d);m_DateEdit.SetSel(0,-1);m_DateEdit.ReplaceSel(sNow);elsem_DateEdit.SetSel(0,-1);m_Date

39、Edit.ReplaceSel();UpdateData(FALSE); 以當(dāng)前的屏幕以當(dāng)前的屏幕顯示內(nèi)容更新顯示內(nèi)容更新控件的變量控件的變量 87(2)(2)為復(fù)選框為復(fù)選框IDC_TIME_CHECKIDC_TIME_CHECK添加代碼添加代碼 void CMy9_8Dlg:OnTimeCheck() void CMy9_8Dlg:OnTimeCheck() UpdateData(TRUE);UpdateData(TRUE);if(m_TimeCheck=TRUE)if(m_TimeCheck=TRUE) CTime tNow;CTime tNow;tNow=CTime:GetCurren

40、tTime();tNow=CTime:GetCurrentTime();CString sNow=tNow.CString sNow=tNow.Format(%I:%M:%S)Format(%I:%M:%S); ;m_TimeEdit.SetSel(0,-1);m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel(sNow);m_TimeEdit.ReplaceSel(sNow); elseelse m_TimeEdit.SetSel(0,-1);m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel();m_TimeE

41、dit.ReplaceSel(); UpdateData(FALSE);UpdateData(FALSE); 函數(shù)函數(shù)FormatFormat的參的參數(shù)數(shù)% %I I是時間的小是時間的小時表示法(時表示法(01011212),),% %m m是分的是分的表示法(表示法(00005959),),% %d d是秒的是秒的表示法(表示法(00005959) 88 (3) 給給Enable按鈕添加代碼按鈕添加代碼void CMy9_8Dlg:OnEnableButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(TRUE);GetDlgItem(IDC_TIM

42、E_CHECK)-EnableWindow(TRUE);m_DateEdit.EnableWindow(TRUE);m_TimeEdit.EnableWindow(TRUE); 89(4) 為為Disable按鈕連接代碼按鈕連接代碼void CMy9_8Dlg:OnDisableButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(FALSE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(FALSE);m_DateEdit.EnableWindow(FALSE);m_TimeEdit.EnableWindow(FA

43、LSE); 90(5) 為為Show Again按鈕添加代碼按鈕添加代碼void CMy9_8Dlg:OnShowButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(SW_SHOW);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_SHOW);GetDlgItem(IDC_DATE_EDIT)-EnableWindow(SW_SHOW);m_DateEdit.ShowWindow(SW_SHOW);GetDlgItem(IDC_TIME_EDIT)-EnableWindow(SW_SHOW);m_TimeEdi

44、t.ShowWindow(SW_SHOW); 91(6) 為為Hide the Clock Setting按鈕添加實現(xiàn)代碼按鈕添加實現(xiàn)代碼void CMy9_8Dlg:OnHideButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(SW_HIDE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_HIDE);m_DateEdit.ShowWindow(SW_HIDE);m_TimeEdit.ShowWindow(SW_HIDE); 92(7) 給給Show_the_Sex_and_Age按鈕添加代碼按鈕添加代碼

45、void CMy9_8Dlg:OnShowSexAgeBUTTON() char sEdit50;int iSexRADIO;int iAgeRADIO;iSexRADIO=GetCheckedRadioButton(IDC_Boy_RADIO,IDC_Girl_RADIO);if(iSexRADIO=IDC_Boy_RADIO)strcpy(sEdit,The boys age is);if(iSexRADIO=IDC_Girl_RADIO)strcpy(sEdit,The girls age is);iAgeRADIO=GetCheckedRadioButton(IDC_Age1_RADI

46、O,IDC_Age3_RADIO);if(iAgeRADIO=IDC_Age1_RADIO)strcat(sEdit, great than 20);if(iAgeRADIO=IDC_Age2_RADIO)strcat(sEdit, between 15 and 20);if(iAgeRADIO=IDC_Age3_RADIO)strcat(sEdit, less than 15);m_ResultEdit.SetSel(0,-1); m_ResultEdit.ReplaceSel(sEdit); 93(8) 為為Show_Combo按鈕添加代碼按鈕添加代碼void CMy9_8Dlg:OnSh

47、owComboButton() UpdateData(TRUE);char sCourseEdit30;char sRecordEdit15;int iCourseRadio;iCourseRadio=GetCheckedRadioButton(IDC_ENGLISH_RADIO,IDC_NATURE_RADIO);if(iCourseRadio=IDC_ENGLISH_RADIO)strcpy(sCourseEdit,English record is );if(iCourseRadio=IDC_COMPUTER_RADIO)strcpy(sCourseEdit,Computer recor

48、d is );if(iCourseRadio=IDC_NATURE_RADIO)strcpy(sCourseEdit,Natural record is );m_Record.GetWindowText(sRecordEdit,15);strcat(sCourseEdit,);strcat(sCourseEdit,sRecordEdit);m_ComboEdit=_T(sCourseEdit);UpdateData(FALSE);94(9) 給給OnExitButton()方法添加代碼方法添加代碼void CMy9_8Dlg:OnExitButton() void CMy9_8Dlg:OnEx

49、itButton() OnOK();OnOK(); 95初始化單選按鈕初始化單選按鈕 BOOL CMy9_8Dlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereCheckRadioButton(IDC_Boy_RADIO,IDC_Girl_RADIO,IDC_Boy_RADIO);CheckRadioButton(IDC_Age1_RADIO,IDC_Age3_RADIO,IDC_Age2_RADIO);UpdateData(FALSE);m_English=0;m_Record.AddSt

50、ring(85);m_Record.AddString(90);m_Record.AddString(95);m_Record.SelectString(-1,95);UpdateData(FALSE);return TRUE; 969.8 對話框通用控件對話框通用控件 大部分控件都是在對話框中使用的,大部分控件都是在對話框中使用的,無論是基于對話框的應(yīng)用程序還是無論是基于對話框的應(yīng)用程序還是Doc/ViewDoc/View結(jié)構(gòu)的應(yīng)用程序,控件通常是結(jié)構(gòu)的應(yīng)用程序,控件通常是放在對話框中的。本節(jié)將以一個名為放在對話框中的。本節(jié)將以一個名為“CtrlCtrl”的基于對話框的應(yīng)用程序來介的基于對話

51、框的應(yīng)用程序來介紹各種紹各種WindowsWindows通用控件的使用。通用控件的使用。 979.8.1 Picture控件的使用控件的使用 (1)(1)分隔線分隔線 將將PicturePicture控件拖放控件拖放到對話框上,到對話框上,【TypeType】屬性選擇】屬性選擇“Frame”Frame”,【ColorColor】屬性選擇】屬性選擇“Etched”Etched”,將控,將控件拖到最細(xì),這時,件拖到最細(xì),這時,PicturePicture控件看起來控件看起來的效果就跟一條分的效果就跟一條分隔線一樣了隔線一樣了98(2) 圖片圖片 將【將【Type】屬性設(shè)置為】屬性設(shè)置為“Icon”

52、或者或者“Bitmap”的時候,可以設(shè)置的時候,可以設(shè)置【Image】屬性為相應(yīng)】屬性為相應(yīng)的資源的資源ID,來顯示圖標(biāo),來顯示圖標(biāo)或位圖。我們在資源中或位圖。我們在資源中導(dǎo)入一位圖,導(dǎo)入一位圖,命名為命名為IDB_BITMAP_DOT,設(shè)置,設(shè)置Picture控件【控件【Type】為為“Bitmap”,【,【Image】為】為“IDB_BITMAP_DOT”999.8.2 Spin控件的使用控件的使用 Spin按鈕控件提供了一按鈕控件提供了一對箭頭,用戶通過點對箭頭,用戶通過點擊箭頭可以微調(diào)該控?fù)艏^可以微調(diào)該控件所表示的數(shù)值。件所表示的數(shù)值。表示表示Spin控件的是控件的是CSpinBut

53、tonCtrl類類 Spin控件通常和控件通常和tab order位于它之前的位于它之前的控件成對使用。通控件成對使用。通過過CSpinButtonCtrl的的GetBuddy方法可獲方法可獲得與之配對的控件得與之配對的控件 100 向?qū)υ捒蛲戏乓粋€向?qū)υ捒蛲戏乓粋€Edit控件,置為只讀,然后拖放一控件,置為只讀,然后拖放一個個Spin控件緊挨著剛才拖放的控件緊挨著剛才拖放的Edit控件,兩個控件的控件,兩個控件的ID都是用默認(rèn)值,設(shè)置都是用默認(rèn)值,設(shè)置Spin控件的【控件的【Allignment】屬】屬性為性為“Right”,選中【,選中【Auto buddy】屬性】屬性 BOOL CEx9

54、_9Dlg:OnInitDialog()/ TODO: Add extra initialization hereCSpinButtonCtrl* pSpin =(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);pSpin-SetRange(0, 100);pSpin-SetPos(50);pSpin-GetBuddy()-SetWindowText(5.0);return TRUE; 設(shè)置設(shè)置Spin的范圍是的范圍是0100,當(dāng),當(dāng)前位置是前位置是50,同時設(shè)置它的,同時設(shè)置它的配對控件的顯示值配對控件的顯示值 101在對話框中添加在對話框中添加WM_VSCR

55、OLLWM_VSCROLL消息的響應(yīng):消息的響應(yīng):void CEx9_9Dlg:OnVScroll() if (pScrollBar-GetDlgCtrlID() = IDC_SPIN1) CString strValue; strValue.Format(%3.1f, (double) nPos / 10.0);(CSpinButtonCtrl*)pScrollBar)-GetBuddy()-SetWindowText(strValue); CDialog:OnVScroll(nSBCode, nPos, pScrollBar); 1029.8.3 Progress控件的使用控件的使用 進(jìn)度

56、控件是一個用進(jìn)度控件是一個用來指示長時間操作來指示長時間操作的進(jìn)展程度的控件。的進(jìn)展程度的控件。MFC中表示進(jìn)度控制中表示進(jìn)度控制的是的是CProgressCtrl類類 進(jìn)度條有一個進(jìn)度條有一個范圍范圍和和當(dāng)前位置當(dāng)前位置。范圍表示整個范圍表示整個操作的持續(xù)時間操作的持續(xù)時間,當(dāng)前位置表示當(dāng)前進(jìn)行到的當(dāng)前位置表示當(dāng)前進(jìn)行到的位置位置,進(jìn)度條根據(jù)當(dāng)前位置來判斷進(jìn)行的百分,進(jìn)度條根據(jù)當(dāng)前位置來判斷進(jìn)行的百分比,來顯示進(jìn)度比,來顯示進(jìn)度 103 添加一個添加一個Progress控件,保持默認(rèn)控件,保持默認(rèn)ID,設(shè)置,設(shè)置Smooth屬性。在旁邊添加一個按鈕,設(shè)置屬性。在旁邊添加一個按鈕,設(shè)置ID為為

57、“IDC_BUTTON_START”,Caption為為“開始開始” 在在OnInitDialog中添加如下代碼:中添加如下代碼:CProgressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);pProg-SetRange(0, 100);pProg-SetPos(50);為為“開始開始”按鈕添加點擊事件實現(xiàn)代碼:按鈕添加點擊事件實現(xiàn)代碼:void CEx9_9Dlg:OnButtonStar() CProgressCtrl* pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pP

58、rog-SetPos(0); SetTimer(1000,100,NULL); 104在在CCtrlDlg中添加對中添加對WM_TIMER消息的響應(yīng)函數(shù):消息的響應(yīng)函數(shù):void CEx9_9Dlg:OnTimer(UINT nIDEvent) if(nIDEvent = 1000)CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);pProg-SetPos(pProg-GetPos()+1);if(pProg-GetPos() = 100)KillTimer(nIDEvent);AfxMessageBox(進(jìn)行完

59、畢進(jìn)行完畢);CDialog:OnTimer(nIDEvent); 每隔每隔0.1秒,秒,進(jìn)度條前進(jìn)度條前進(jìn)一步進(jìn)一步 1059.8.4 Slider控件的使用控件的使用 滑塊控件可以使用戶通過拖動滑塊來滑塊控件可以使用戶通過拖動滑塊來快速獲得指定的數(shù)據(jù)。當(dāng)用戶滑動滑塊的快速獲得指定的數(shù)據(jù)。當(dāng)用戶滑動滑塊的時候,控件將發(fā)送消息來指示變化。時候,控件將發(fā)送消息來指示變化。 滑塊控件在你滑塊控件在你選擇一系列離散選擇一系列離散值或者一段連續(xù)值或者一段連續(xù)范圍內(nèi)的時候十范圍內(nèi)的時候十分有用。分有用。 106 在對話框上增加一個在對話框上增加一個Slider控件,設(shè)置控件,設(shè)置Point屬性為屬性為“

60、Bottom/Right”,然后在旁邊添加一,然后在旁邊添加一個個Static控件,控件,ID設(shè)置為設(shè)置為IDC_STATIC_SLIDER。該控件用來顯示滑塊的當(dāng)前位置。該控件用來顯示滑塊的當(dāng)前位置。 在在OnInitDialog函數(shù)中添加如下代碼:函數(shù)中添加如下代碼:CString strText1;CSliderCtrl* pSlide1 =(CSliderCtrl*) GetDlgItem(IDC_SLIDER1);pSlide1-SetRange(0, 100);pSlide1-SetPos(50);strText1.Format(%d, pSlide1-GetPos();SetDl

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論