




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
會計學(xué)1Windows標(biāo)準(zhǔn)控件在可視化編程中的應(yīng)用29.1概述9.1.1在程序界面中增加控件方法1.使用類的成員函數(shù)完成控件的增加使用控件類定義一個實例對象Cbuttonmybtn;調(diào)用該類的Create()函數(shù)創(chuàng)建相應(yīng)的控件Mybtn.Create(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);使用ShowWindow()函數(shù)顯示該控件ShowWindow()調(diào)用MoveWindow()、SetWindowPos()、SetWindowText()等函數(shù)等窗口管理函數(shù)來移動、顯示或隱藏控件、改變控件的位置、尺寸以及其它操作第1頁/共131頁3窗口類名窗口類簡介CButton代表一個按鈕的小長方形的子窗口(按鈕控件)CComboBox代表一個選擇列表框的子窗口(組合框控件)CEdit代表一個接收用戶輸入的文本輸入子窗口(編輯框控件)CListBox代表字符串列表的子窗口(列表框控件)CScrollBar代表一個滾動條的子窗口(滾動條控件)CStaic代表一個顯示靜態(tài)文本的子窗口(靜態(tài)控件)系統(tǒng)預(yù)定義的窗口類第2頁/共131頁2.使用可視化工具在基于對話框的應(yīng)用程序中添加控件4第3頁/共131頁9.1.2為控件添加消息映射消息映射:對控件進行操作,從而引發(fā)各種事件,在應(yīng)用程序中添加控件的消息響應(yīng)的方法,并將之綁定的機制。如:ON_BN_CLICKED(IDC_BUTTON1,OnBnClickedButton1)5標(biāo)明了消息的類型控件的ID處理消息的函數(shù)在對話框?qū)?yīng)的頭文件中申明處理事件的函數(shù);
如:afx_msgvoidOnBnClickedButton1();消息映射形式:BEGIN_MESSAGE_MAPON_BN_CLICKED(IDC_BUTTON1,OnBnClickedButton1)END_MESSAGE_MAP第4頁/共131頁6子窗口控件消息通知代碼對應(yīng)事件簡介按鈕控件BN_CLICKED用戶在按鈕子窗口中單擊BN_DOUBLECLICKED用戶在按鈕子窗口中雙擊編輯框控件EN_CHANGE用戶在編輯框子窗口中更改了輸入框中的數(shù)據(jù)EN_ERRSPACE編輯框的空間已用完EN_HSCROLL水平滾動條被按下并被激活EN_KILLFOCUS編輯框失去輸入焦點EN_MAXTEXT輸入的正文數(shù)超過了編輯框的最大容量EN_SETFOCUS編輯框子窗口獲得輸入焦點EN_UPDATE編輯框子窗口將更新顯示內(nèi)容EN_VSCROLL垂直滾動條被按下并激活第5頁/共131頁7子窗口控件消息通知代碼對應(yīng)事件簡介列表框控件LBN_DBLCLK字符串列表框中的字符串被雙擊LBN_ERRSPACE分配給字符串列表框的內(nèi)存已經(jīng)用完LBN_KILLFOCUS字符串列表框失去焦點LBN_SELCHANGE在字符串列表框進行的選擇發(fā)生了改變LBN_SELCANCEL在列表框中取消某個選擇時發(fā)出的消息LBN_SETFOCUS字符串列表框獲得輸入焦點組合框控件CBN_DBLCLK選擇組合框中的字符串被雙擊CBN_DROPDOWN選擇組合框?qū)⒈蝗∠鸆BN_EDITCHANGE選擇組合框中的正文將被修該CBN_EDITUPDATE選擇組合框中的正文將被更新CBN_ERRSPACE分配給選擇組合框的內(nèi)存已用完CBN_KILLFOCUS選擇組合框失去焦點第6頁/共131頁8子窗口控件消息通知代碼對應(yīng)事件簡介組合框控件CBN_SELENDCANCEL當(dāng)用戶選擇了列表框中的某一項后又選了其他控鍵或關(guān)閉對話框,此時發(fā)出此消息CBN_SELCHANGE選擇列表框中的選擇項發(fā)生改變CBN_SELENDOK用戶選擇了某一項,或選擇后關(guān)閉了組合框后發(fā)送的消息CBN_CLOSEUP組合框關(guān)閉時發(fā)送的消息CBN_SETFOCUS選擇組合框獲得焦點滾動條控件沒有與滾動條相關(guān)的通知代碼靜態(tài)控件沒有與靜態(tài)文本框相關(guān)的通知代碼控件及其相應(yīng)的通知代碼第7頁/共131頁9為控件的事件添加消息映射第8頁/共131頁10為處理消息的成員函數(shù)添加代碼voidCch07_1_2Dlg::OnBnClickedExit(){ OnOK();}第9頁/共131頁9.1.3在應(yīng)用程序中使用控件1.使用GetDlgItem函數(shù)根據(jù)控件ID來獲取控件的地址。 GetDlgItem函數(shù)的原型為: virtualCWnd*GetDlgItem(intnID)const;CEdit*pEdit;//定義一個指向CEdit控件指針pEdit=(CEdit*)GetDlgItem(IDD_EDIT1);//獲取ID為IDD_EDIT1編輯框的指針pEdit->SetSel(2,5);//使用控件指針11第10頁/共131頁2、為控件定義標(biāo)識符
如果控件使用頻繁,可為控件指定一個標(biāo)識符。控件類型有兩種:一種是控件類型,這樣定義的控件標(biāo)識符就是控件類的實例對象,可以用標(biāo)識符訪問類的所有成員;另一種是將控件定義為一個C++數(shù)據(jù)類型,如將編輯框定義為CString類型。12第11頁/共131頁13第12頁/共131頁控件定義為value類型的刷新問題:刷新操作都是通過DDX技術(shù)來完成,DDX是將控件ID和控件變量綁定的一種技術(shù),其數(shù)據(jù)交換通過DoDataExchange()函數(shù):VoidDoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); DDX_Control(pDX,IDC_EDIT1,m_edit); DDX_Text(pDX,IDC_EDIT2,m_name);}UpdateData(true)UpdateData(false)第13頁/共131頁9.1.4自定義控件類控件類可以被繼承的類,派生出新的控件類,就可以擴展控件類的功能。
操作步驟:
1、在項目上單擊快捷菜單,選擇“添加->類”,進入類向?qū)?,選擇“MFC類”,然后,單擊“添加”按鈕152、指定派生類的基類,輸入新類的名稱3、增加類的成員,擴展控件類的功能;4、為控件定義變量,在變量類型中輸入自定義的控件類第14頁/共131頁169.2按鈕控件及其應(yīng)用按鈕控件普通按鈕圓按鈕復(fù)選框按鈕組框按鈕自繪按鈕
第15頁/共131頁179.2.1按鈕控件的創(chuàng)建過程
CButton類的成員函數(shù)Create負責(zé)創(chuàng)建按鈕控件,該函數(shù)的聲明為:
BOOLCreate(LPCTSTRlpszCaption,//指定了按鈕顯示的正文
DWORDdwStyle, //按鈕的風(fēng)格
constRECT&rect, //按鈕的位置和大小
CWnd*pParentWnd, //指向父窗口,
UINTnID //按鈕的ID
)第16頁/共131頁18按鈕控件消息:ON_BN_CLICKEDON_BN_DBLCLICKEDON_COMMAND兩個類似按鈕是最常見的控件之一復(fù)選框單選按鈕下壓式按鈕分組框常用于只有兩種完全相反狀態(tài)的情況下適用于同一組屬性相同的數(shù)據(jù)中選一個數(shù)據(jù)適用于消息的發(fā)送沒有太多的操作只是在窗口中劃分區(qū)域范圍第17頁/共131頁19GetCheck()SetCheck()GetBitmap()SetBitmap()GetButtonStyle()SetButtonStyle()GetCursor()SetCursor()GetIcon()SetIcon()GetState()SetState()CButton類的成員函數(shù)在知道按鈕ID的前提下,還可使用與按鈕有關(guān)的CWnd成員函數(shù)來設(shè)置或查詢按鈕狀態(tài)CheckDlgButtonCheckRadioButtonGetCheckedRadioButtonIsDlgButtonCheckedGetWindowTexGetWindowTextLengthSetWindowText第18頁/共131頁20MFC還提供了一個CBitmapButton的類,允許用戶以圖標(biāo)的方式顯示按鈕,它是在CButton下派生的
MFC調(diào)用方法DrawItem()在按鈕上繪制位圖,LoadBitmaps()方法為一個CBitmapButton對象附上位圖,最多可以有4個位圖自定義按鈕第19頁/共131頁219.2.2按鈕控件示例
第20頁/共131頁22主要步驟:創(chuàng)建基于對話框項目設(shè)置按鈕的屬性IDCaptionGroupAutoIDC_BUTTON1這里是一個按鈕,按我吧!IDC_BUTTON2這是缺省按鈕,按下看看吧!IDC_RADIO1自動單選按鈕1√IDC_RADIO2自動單選按鈕2√IDC_RADIO3單選按鈕1√IDC_RADIO3單選按鈕2IDC_CHECK1自動復(fù)選按鈕1√IDC_CHECK2復(fù)選按鈕2第21頁/共131頁23添加成員變量控件ID變量類型成員變量名IDC_BUTTON1CButtonM_btn1IDC_BUTTON2CButtonM_btn2IDC_RADIO3CButtonM_rad3IDC_RADIO4CButtonM_rad4IDC_CHECK2CButtonM_chk2添加消息響應(yīng)函數(shù)控件ID成員變量名消息處理函數(shù)IDC_BUTTON1M_btn1OnBnClickedButton1IDC_BUTTON2M_btn2OnBnClickedButton2IDC_RADIO3M_rad3OnBnClickedRadio3IDC_RADIO4M_rad4OnBnClickedRadio4IDC_CHECK2M_chk2OnBnClickedCheck2第22頁/共131頁24voidCch07_1Dlg::OnBnClickedButton1(){m_btn1.SetWindowText(L"你已按下了按鈕!");}voidCch07_1Dlg::OnBnClickedButton2(){m_btn2.SetWindowText(L"按鈕已被按下!");}voidCch07_1Dlg::OnBnClickedRadio3(){ m_rad3.SetCheck(1); m_rad4.SetCheck(0);}第23頁/共131頁25voidCch07_1Dlg::OnBnClickedRadio4(){ m_rad3.SetCheck(0); m_rad4.SetCheck(1);}voidCch07_1Dlg::OnBnClickedCheck2(){if(m_chk2.GetCheck()) m_chk2.SetCheck(0); else m_chk2.SetCheck(1);}
第24頁/共131頁269.3滾動條控件
滾動條是一個交互式的、高度可視化的控件它包括一個滑塊、滾動條的兩端的按鈕等。滾動條控件與屬于窗口的滾動條是不一樣的處于窗口的滾動條是由該窗口創(chuàng)建、管理和釋放的滾動條控件是由用戶創(chuàng)建、管理和釋放的第25頁/共131頁279.3.1滾動條類的結(jié)構(gòu)及其方法
滾動條可以通過通知代碼來創(chuàng)建,也可以用對話框資源模板來創(chuàng)建第26頁/共131頁28常用滾動條動作標(biāo)識及其說明SB_TOP/SB_BOTTOM:滾動到滾動條最頂/底端SB_LINEUP/SB_LINEDOWN:向上/
下滾動一行SB_LEFT/SB_RIGHT:滾動到左/
右邊SB_LINELEFT/SB_LINERIGHT:向左/
右滾動一行SB_PAGEUP/SB_PAGEDOWN:向上/
下滾動一頁SB_PAGELEFT/SB_PAGERIGHT:向左/
右滾動一頁SB_THUMBPOSITION:滾動框移動到新位置SB_THUMBTRACK:滾動框被拖動SB_ENDSCROLL:滾動到最終位置第27頁/共131頁299.3.2創(chuàng)建與初始化滾動條類
創(chuàng)建CScrollBar對象的一般步驟(1)用C++關(guān)鍵字new和構(gòu)造函數(shù)CScrollBar::CScrollBar()為一個ScrollBar對象分配一個實例(2)初始化CScrollBar對象,將一個Windows滾動條賦予它,并用CScroll::Create()方法設(shè)置參數(shù)和樣式分配一個滾動條控件對象并返回指向該對象的指針CScrollBar::pMyScroll=newCScrollBar調(diào)用CScrollBar::Create()方法初始化指針BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);滾動條窗口的樣式表示控件的大小和位置指向控件所屬窗口的指針父窗口與滾動條通信的標(biāo)識第28頁/共131頁30在設(shè)置滾動條控件時,要通過如下方法設(shè)置其范圍CScrollBar::SetScrollRange()例如,設(shè)置滾動范圍為-100到100的垂直滾動條pMyScroll->SetScrollRange(SB_VERT,-100,100);通過SetScrollPos()設(shè)置滾動塊當(dāng)前位置例如,滾動快的位置在-100到100的中間,即為0的位置pMyScroller->SetScrollPos(0);第29頁/共131頁319.3.3滾動條類編程實例
標(biāo)題為ApplicationofScrollBar滾動條的滾動范圍設(shè)為0到20單擊滾動塊與箭頭之間的區(qū)域。滾動塊上移或下移三格,編輯框中的數(shù)字加3或減3單擊向上或向下的箭頭,滾動塊向上或向下移動一格,編輯框中的數(shù)字加1或減1按住滾動塊上下拖動。編輯框中的數(shù)字隨著隨之變化當(dāng)前值為10單擊Up按鈕,滾動塊移到最上邊,編輯框的數(shù)字變?yōu)?單擊Down按鈕,滾動塊移到最下邊,編輯框的數(shù)字變?yōu)?0單擊Reset按鈕,滑塊移到中間,編輯框的數(shù)字變?yōu)?0單擊Exit按鈕,退出應(yīng)用程序第30頁/共131頁32(1)應(yīng)用程序的可視化編程部分對象ID變量名及類型Caption只讀滾動條IDC_SCROLLBARm_scrollbar(control)無編輯框IDC_EDIT1m_dispinfo(control)無√Top按鈕IDC_BTN_TOP&TopBottom按鈕IDC_BTN_BOTTOM&BottomReset按鈕IDC_BTNRESET&ResetExit按鈕IDC_BTNEXIT&Exit第31頁/共131頁33(2)應(yīng)用程序的代碼編程部分在Cch07_2Dlg類中加入一個成員函數(shù)ChangeDisplayInfo(intpos),用于將數(shù)值型參數(shù)pos顯示到編輯框控件中第32頁/共131頁第33頁/共131頁voidCch07_2Dlg::ChangeDisplayInfo(intpos){ TCHARsPos[10]; _itow(pos,sPos,10); m_dispinfo.SetSel(0,-1); m_dispinfo.ReplaceSel(sPos); UpdateData(FALSE);//將與控件綁定的變量內(nèi)容顯示到屏幕上}函數(shù)_itow(pos,sPos,10)是將數(shù)值pos按十進制形式轉(zhuǎn)化到字符串sPos中,SetSel()和ReplaceSel()是CEdit類的成員函數(shù),SetSel(0,-1)表示選中編輯框中的所有內(nèi)容,ReplaceSel(sPos)表示用sPos的值去替換編輯框中的內(nèi)容。第34頁/共131頁36BOOLCch07_2Dlg::OnInitDialog(){ CDialog::OnInitDialog();…… SetIcon(m_hIcon,TRUE); SetIcon(m_hIcon,FALSE);
m_scrollbar.SetScrollRange(0,20); m_scrollbar.SetScrollPos(10);ChangeDisplayInfo(m_scrollbar.GetScrollPos());returnTRUE;}(b)初始化滾動條第35頁/共131頁在Cch07_2Dlg的屬性框中選擇“消息”選項卡,選擇“WM_VSCROLL”消息,單擊右側(cè)的向下的箭頭按鈕,然后添加一個成員函數(shù)OnVScroll第36頁/共131頁38(3)給滾動條消息添加代碼voidCch07_2Dlg::OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){
intiNowPos; switch(nSBCode) { if(pScrollBar==&m_scrollbar) { caseSB_THUMBTRACK:
m_scrollbar.SetScrollPos(nPos); ChangeDisplayInfo(m_scrollbar.GetScrollPos());第37頁/共131頁39caseSB_LINEDOWN:
iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos+1; if(iNowPos>20) iNowPos=20; m_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos()); break;第38頁/共131頁40caseSB_LINEUP: //單擊滾動條向上的箭頭 iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos-1; if(iNowPos<0) iNowPos=0; m_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos()); break;第39頁/共131頁41caseSB_PAGEDOWN://單擊滾動條下面的箭頭與滾動塊之間的區(qū)域
iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos+3; if(iNowPos>20) iNowPos=20; m_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos()); break;第40頁/共131頁42caseSB_PAGEUP: //單擊滾動條上面的箭頭與滾動塊之間的區(qū)域 iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos-3; if(iNowPos<0) iNowPos=0; m_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos()); break; }} CDialog::OnVScroll(nSBCode,nPos,pScrollBar);}第41頁/共131頁43(4)給Exit按鈕連接代碼
voidCch07_2Dlg::OnBnClickedBtnExit(){ OnOK();}(5)給Up按鈕添代碼voidCch07_2Dlg::OnBnClickedBtnTop(){
m_scrollbar.SetScrollPos(0);ChangeDisplayInfo(m_scrollbar.GetScrollPos());}第42頁/共131頁44(6)給
Down按鈕添加代碼voidCch07_2Dlg::OnBnClickedBtnBottom(){
m_scrollbar.SetScrollPos(20); ChangeDisplayInfo(m_scrollbar.GetScrollPos());}(7)給Reset按鈕添加代碼voidCch07_2Dlg::OnBnClickedBtnReset(){
m_scrollbar.SetScrollPos(10); ChangeDisplayInfo(m_scrollbar.GetScrollPos());}
第43頁/共131頁45在應(yīng)用程序中,編輯框只是有于顯示滾動塊的位置,不需要進行編輯,因此必須將其屬性改為只讀第44頁/共131頁469.4靜態(tài)控件
第45頁/共131頁479.4.1靜態(tài)控件的特點
一般情況下靜態(tài)控件不發(fā)送消息。實際應(yīng)用中,需要靜態(tài)文本能夠象超文本那樣響應(yīng)用戶的輸入,向應(yīng)用程序發(fā)送控件消息。要在創(chuàng)建靜態(tài)控件時加入SS_NOTIFY樣式該樣式允許靜態(tài)控件向其父窗口發(fā)送WM_COMMAND消息,該消息的字參數(shù)的低字節(jié)中包含靜態(tài)控件的ID,高字節(jié)中包含通知碼第46頁/共131頁489.4.2靜態(tài)控件應(yīng)用舉例
【例7-3】本例通過演示位圖靜態(tài)控件的使用方法,說明靜態(tài)控件消息的強制生成與處理過程,當(dāng)單擊位圖時,就報告該位圖的尺寸。第47頁/共131頁49主要步驟如下:創(chuàng)建基于對話框的MFC應(yīng)用程序ch09_3。向資源中導(dǎo)入一張圖片,假設(shè)位圖資源名稱為IDB_BITMAP1。向?qū)υ捒蛏戏派弦粋€static控件,其ID為IDC_STATIC_BMP,并設(shè)置控件為nofity風(fēng)格為該控件添加CStatic類型成員——m_bmp。在OnInitDailog函數(shù)中添加如下代碼,設(shè)置控件為位圖風(fēng)格,并設(shè)置位圖。第48頁/共131頁50(4)在OnInitDailog函數(shù)中添加如下代碼,設(shè)置控件為位圖風(fēng)格,并設(shè)置位圖BOOLCMy9_3Dlg::OnInitDialog(){ …… //TODO:Addextrainitializationhere m_bmp.ModifyStyle(0,SS_BITMAP);
HBITMAPhBmp=LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));m_bmp.SetBitmap(hBmp); returnTRUE;}
第49頁/共131頁51(5)響應(yīng)鼠標(biāo)單擊靜態(tài)控件的消息。為static控件添加STN_CLICKED消息的響應(yīng)voidCMy9_3Dlg::OnStaticBmp(){//TODO:AddyourcontrolnotificationhandlercodehereBITMAPbmp; GetObject(m_bmp.GetBitmap(),sizeof(BITMAP),&bmp); CStringmsg;
msg.Format(L"ImageSize%d*%d",bmp.bmWidth,bmp.bmHeight);AfxMessageBox(msg);}第50頁/共131頁529.5列表框控件
列表框經(jīng)常用在對話框里,如用列表框選擇文件名、目錄等。列表框有一個預(yù)定義的鍵盤接口,用戶可以用鍵盤上的箭頭和PageUp或PageDown鍵在列表框中進行數(shù)據(jù)的選擇,或通過適當(dāng)?shù)臉邮皆O(shè)置,允許與Shift或Ctrl鍵組合使用。列表框常應(yīng)用于從眾多數(shù)據(jù)中選某一項第51頁/共131頁539.5.1列表框控件的類結(jié)構(gòu)
MFC中CListBox類的層次結(jié)構(gòu)第52頁/共131頁54第53頁/共131頁55消息映像項使用下面的基本格式:ON_Message(ControlID,ClassMethod)所有者類聲明中的方法原型afx_msgvoidClassMethod();發(fā)送消息的列表框控件的子窗口標(biāo)識處理消息的父類方法的名字第54頁/共131頁569.5.2列表框類的方法
第55頁/共131頁57(1)通用方法
通用方法用來獲得和設(shè)置列表框數(shù)據(jù)的值和屬性,所有的CListBox列表框都有這些方法.第56頁/共131頁58(2)單項選擇特定方法
列表框的默認模式是單選項模式;所有的通用方法均適用于單選項列表框只有兩個類方法專門處理單選項列表框GetCurSel()SetCurSel()獲得當(dāng)前選擇列表框項的下標(biāo)(基于0)選擇列表框字符串第57頁/共131頁59
方法說明 GetAnchorIndex() 獲得多項選擇列表框中當(dāng)前定位項的下標(biāo) GetCaretIndex() 獲得多項選擇列表框中具有光標(biāo)矩形的項的下標(biāo) GetSelCount() 獲得多項選擇列表框中當(dāng)前所選的項的數(shù)目 GetSelItems() 將所有當(dāng)前被選列表框項下標(biāo)放入一整型數(shù)組緩沖區(qū)SelItemRange() 切換多選擇列表框項范圍的選擇狀態(tài) SetAnchorIndex() 在多項選擇列表框中擴充選擇設(shè)置開始(定位)項 SetCaretIndex() 在多項選擇列表框中指定下標(biāo)項設(shè)置光標(biāo)矩形 SetSel() 在多項選擇列表框中切換項目的選擇狀態(tài)(3)多項選擇特定方法多選項列表框擴展了標(biāo)準(zhǔn)單項選擇列表框的能力,可以解決在一個列表框中選擇多項帶來的復(fù)雜性特定多項選擇列表框的CListBox類方法第58頁/共131頁60(4)字符串指定的方法
方法說明 AddString() 在列表框中加入一個字符串 DeleteString() 從列表框中刪除一個字符串 Dir() 從當(dāng)前目錄加文件名放入列表框 FindString() 在列表框中搜索一字符串 FindStringExact()在列表框中搜索第一個與指定搜索字符串匹配的字符串InsertString() 在列表框指定下標(biāo)處插入一字符串 ResetContent() 清除列表框中的所有項 SelectString() 在單選列表框中搜索并選擇一字符串CListBox指定列表框中字符串的方法第59頁/共131頁61(5)虛擬方法CListBox類還聲明了幾個虛擬方法,你可以從CListBox類中派生一些類替換到你的類中。
方法說明
CharToItem() 可以替換此方法來為自繪列表框(沒有字符串)處理WM-CHARCompareItem() 由MFC調(diào)用以得到排序的自繪列表框中的新項的位置 DeleteItem() 當(dāng)用戶從自繪列表框中刪除一項時MFC調(diào)用此方法 DrawItem() 當(dāng)確定自繪列表框項必須重繪時MFC調(diào)用此方法 MeasureItem() 當(dāng)一自繪列表框被創(chuàng)建時MFC調(diào)用此方法來決定列表框的維數(shù)VKeyToItem() 用戶可替換此方法,來處理具有LBS_WANTKEYBOARDINPUT樣式的列表框的WM_KEYDOWN第60頁/共131頁62創(chuàng)建和初始化CListBox對象用C++關(guān)鍵字new和構(gòu)造函數(shù)為CListBox對象分配一個實例: CListBox::CListBox()(2)初始化CListBox對象并賦于它一個Windows列表框,通過方法CListBox::Create()設(shè)置列表框的參數(shù)和樣式第61頁/共131頁63例如,下面代碼分配一個CListBox對象并返回指向該對象的指針:
CListBox*pMyListBox=newCListBox();指針pMyListBox用CListBox::Create()方法進行初始化該方法聲明如下:
BOOLCreate(DWORDdwStyle, //列表框控件的窗口樣式
constRecy&rect, //指明控件的大小和位置
CWnd*pParentWnd,//指向控件所有者的指針
UINTnID //控件標(biāo)識
)第62頁/共131頁649.5.3列表框和應(yīng)用程序之間消息傳遞
第63頁/共131頁651.列表框向應(yīng)用程序發(fā)送消息
當(dāng)用戶與列表框交互時,列表框向應(yīng)用程序發(fā)出WM_COMMAND消息。該消息字參數(shù)的高字節(jié)為標(biāo)識列表框動作的消息通知碼(如LBN_DBLCLK標(biāo)識用戶雙擊);低字節(jié)為控件標(biāo)識值。LBN_SELCHANGE: 列表框中的用戶選擇已發(fā)生改變LBN_DBCLK: 雙擊LBN_SELCANCLE: 列表框中的選擇被取消LBN_SETFOCUS: 列表框收到輸入焦點LBN_KILLFOCUS: 列表框失去輸入焦點第64頁/共131頁662.應(yīng)用程序向列表框發(fā)送消息
應(yīng)用程序?qū)α斜砜虻牟僮魍ㄟ^調(diào)用函數(shù)SendMessage或SendDlgItemMessage向其發(fā)送各種消息完成。第65頁/共131頁679.5.4列表框應(yīng)用舉例
【例7-4】創(chuàng)建一個單選列表框,并在該列表框中列出當(dāng)前目錄的文件,雙擊后刪除該項第66頁/共131頁68主要步驟如下:(1)在對話框上放置一個ListBox(IDC_LIST_DIR)控件和一個Static(IDC_STATIC_DIR)控件。ListBox控件用于顯示文件名稱,Static控件用于顯示當(dāng)前顯示的文件所在的目錄
(2)為ListBox控件添加CListBox類型成員變量——m_list
第67頁/共131頁69(3)在OnInitDialog函數(shù)中添加初始化列表框內(nèi)容的代碼BOOLCMy9_4Dlg::OnInitDialog(){ CDialog::OnInitDialog(); //TODO:Addextrainitializationhere DWORDcchCurDir=MAX_PATH; LPTSTRlpszCurDir; CHARtchBuffer[MAX_PATH]; lpszCurDir=tchBuffer;
GetCurrentDirectory(cchCurDir,lpszCurDir);
DlgDirList(lpszCurDir,IDC_LIST_DIR,IDC_STATIC_DIR,0); returnTRUE;}
獲得當(dāng)前目錄
設(shè)置列表框顯示條目為當(dāng)前目錄下所有文件名
第68頁/共131頁70(4)為了實現(xiàn)雙擊條目刪除的功能,需要響應(yīng)列表框的LBN_DBLCLK消息voidCMy9_4Dlg::OnDblclkListDir(){ //TODO:Addyourcontrolnotificationhandlercodehereinti=m_list.GetCurSel(); CStringstr; m_list.GetText(i,str); m_list.DeleteString(i); CStringmsg=L"Item"+str+L"deleted!"; AfxMessageBox(msg);}
第69頁/共131頁719.6編輯框控件
編輯框控件看起來是個非常簡單的矩形窗口,但它具有許多功能,編輯框控件可以自帶滾動條,顯示多行文本。CEdit是CWnd類直接派生來的,這就意味著它具有CWnd的所有功能
編輯框控件單行編輯框控件多行編輯框控件第70頁/共131頁72第71頁/共131頁73第72頁/共131頁749.6.2編輯框與應(yīng)用程序間的消息傳遞
編輯框通過向其父窗口發(fā)關(guān)WM_COMMAND消息通知應(yīng)用程序用戶的交互信息
應(yīng)用程序?qū)庉嬁虻牟僮魍ㄟ^調(diào)用函數(shù)SendMessage或SendDlgItemMessage
第73頁/共131頁759.6.3編輯類編程實例
單擊Showl,則在Edit1編輯框中顯示“ThisisthefirstEditBox.”單擊Clear1,則Edit1編輯框中的內(nèi)容被清除;單擊Show2,則在Edit2編輯框中顯示“ThisisthesecondEditBox!”單擊Clear2,則Edit2編輯框中的內(nèi)容被清除;單擊Transfer,則把Edit1編輯框的內(nèi)容復(fù)制到Edit2的編輯框中去單擊Undo,則取消上一次操作若單擊Exit,則退出程序的運行第74頁/共131頁76具體的編程過程生成了工程文件和工程工作區(qū)文件后在EditBox的工作區(qū)中選擇ResourceView因為本應(yīng)用程序是基于對話框的,由向?qū)蓪υ捒虼翱谧鳛閼?yīng)用程序的主窗口,并且給這個對話框取名為IDD_EDITBOX_DIALOG,然后在這個對話框窗口中進行界面設(shè)計第75頁/共131頁77(1)創(chuàng)建資源:在ResourceView選項卡中打開Dialog資源組,然后雙擊IDD_EDITBOX_DIALOG。VC在工作臺中顯示可以進行可視化編輯的IDD_EDITBOX_DIALOG對話框把鼠標(biāo)停在編輯框控件上,即可顯示該控件的類型控件工具窗提供了VC中所有可建立的控件類型第76頁/共131頁78(2)設(shè)置控件ID對象ID變量類型變量名消息類型消息處理函數(shù)編輯框IDC_EDIT1控件m_edit1編輯框IDC_EDIT2控件m_edit2命令按鈕IDC_BTN_SHOW1BN_CLICKEDOnBnClickedBtnShow1命令按鈕IDCBTNCLEAR1BN_CLICKEDOnBnClickedBtnClear1命令按鈕IDCBTNSHOW2BN_CLICKEDOnBnClickedBtnShow2命令按鈕IDCBTNCLEAR2BN_CLICKEDOnBnClickedBbtnClear2命令按鈕IDCBTNTRANBN_CLICKEDOnBnClickedBtnTran命令按鈕IDCBTNEXITBN_CLICKEDOnBnClickedBtnExit命令按鈕IDCBTNUNDOBN_CLICKEDOnBnClickedBtnUndo第77頁/共131頁79(3)
應(yīng)用程序的代碼編程部分}voidCch09_5Dlg::OnBnClickedBtnExit(){
OnOK();}voidCch09_5Dlg::OnBnClickedBtnTran(){
m_edit1.SetSel(0,-1);//選中m_editl編輯框所有內(nèi)容
m_edit1.Copy();//將m_Editl編輯框中所選的內(nèi)容拷貝到剪貼板上
m_edit2.SetSel(0,-1); m_edit2.ReplaceSel(L""); m_edit2.Paste(); //將剪貼板中的內(nèi)容粘貼到m_edit2編輯框中}第78頁/共131頁80voidCch09_5Dlg::OnBnClickedBtnUndo(){m_edit1.Undo();//取消m_edit1編輯框中上一次操作m_edit2.Undo();//取消m_edit2編輯框中上一次操作}
voidCch09_5Dlg::OnBnClickedBtnShow1(){m_edit1.SetSel(0,-1);//選中編輯框中的全部內(nèi)容m_edit1.ReplaceSel(L"ThisisthefirstEditBox.");}
voidCch09_5Dlg::OnBnClickedBtnClear1(){m_edit1.SetSel(0,-1);m_edit1.ReplaceSel(L""); //用空字符串代替所選中的文本,即把所選的文本刪除掉}第79頁/共131頁81第80頁/共131頁82【例7-6】編輯框控件的“乘法器”示例程序,使用者在“乘數(shù)”或者“被乘數(shù)”編輯框輸入數(shù)字的時候,程序可以隨時計算乘法的結(jié)果主要步驟如下:1.創(chuàng)建基于對話框的項目文件ch09_6,按上圖為對話框添加控件第81頁/共131頁項目IDTypeMemberCaptionRead-onlyGroup“運算數(shù)”編輯框IDC_NUM1doublem_num1運算數(shù)“加”單選框IDC_ADDintm_operator加√“減”單選框IDC_SUB減“乘”單選框IDC_MUL乘“除”單選框IDC_DIV除“運算數(shù)”編輯框IDC_NUM2doublem_num2運算數(shù)“結(jié)果”編輯框IDC_RESULTdoublem_result結(jié)果√“重置”命令按鈕IDC_RESET重置832.為對話框控件添加變量并設(shè)置控件的屬性第82頁/共131頁3、添加各個控件的消息代碼函數(shù)
對象ID消息類型消息處理函數(shù)“運算數(shù)”編輯框IDC_NUM1EN_CHANGEOnEnChangeNum1“加”單選框IDC_ADDBN_CLICKEDOnBnClickedAdd“減”單選框IDC_SUBBN_CLICKEDOnBnClickedSub“乘”單選框IDC_MULBN_CLICKEDOnBnClickedMul“除”單選框IDC_DIVBN_CLICKEDOnBnClickedDiv“運算數(shù)”編輯框IDC_NUM2EN_CHANGEOnEnChangeNum2“重置”命令按鈕IDC_RESETBN_CLICKEDOnBnClickedReset第83頁/共131頁854、編寫各個控件的消息處理代碼BOOLvoidch09_6Dlg::OnEnChangeNum1(){
UpdateData(TRUE);
switch(m_operator)
{case0:
m_result=m_num1+m_num2; break; case1: m_result=m_num1-m_num2; break; case2: m_result=m_num1*m_num2; break; case3: m_result=m_num1/m_num2; } UpdateData(FALSE);}第84頁/共131頁86voidCch09_6Dlg::OnBnClickedAdd(){
OnEnChangeNum1();}voidCch09_6Dlg::OnBnClickedSub(){
OnEnChangeNum1();}voidCch09_6Dlg::OnBnClickedMul(){OnEnChangeNum1();}voidCch09_6Dlg::OnBnClickedDiv(){OnEnChangeNum1();}voidCch09_6Dlg::OnEnChangeNum2(){OnEnChangeNum1();}voidCch09_6Dlg::OnBnClickedReset(){
m_result=m_num1=m_num2=m_operator=0; UpdateData(FALSE);}第85頁/共131頁879.7組合框控件
第86頁/共131頁889.9.1組合框(CComboBox)類的結(jié)構(gòu)及組合框的特點
組合框是兩種預(yù)定義窗口的組合形式,是編輯框與列表框的組合。組合框可以使用輸入,也可以選擇。
第87頁/共131頁899.9.2組合框與應(yīng)用程序間消息傳遞
1、組合框通過向其父窗口發(fā)關(guān)WM_COMMAND消息通知應(yīng)用程序用戶的交互信息。該消息字參數(shù)(wParam)的低字節(jié)為控件標(biāo)識,高字節(jié)為標(biāo)識組合框動作的消息通知碼。通知碼說明通知碼說明CBN_SELCHANG組合框中列表框部分所選中項發(fā)生改變CBN_EDITCHANGE組合框中的編輯中的文本發(fā)生改變CBN_DBLCLK雙擊CBN_EDITUPDATE組合框中的編輯框?qū)@示修改過的文本CBN_SETFOCUS組合框收到輸入焦點CBN_DROPDOWN組合框中的列表框?qū)⑾吕瑿BN_KILLFOCUS組合框失去輸入焦點CBN_CLOSEUP組合框中的列表框?qū)㈦[藏第88頁/共131頁902、應(yīng)用程序?qū)M合框的操作也通過使用函數(shù)SendMessage或SendDlgItemMessage向組合框發(fā)送消息進行。
消息說明消息說明CB_SHOWDROPDOWN顯示下拉列表框CB_GETCURSEL獲取列表框中的選中項索引值CB_ADDSTRING在列表框中加入新項CB_GETCOUNT獲取列表框中的項的數(shù)目CB_DELETESTRING在列表框中刪除新項CB_GETLBTEXT獲取列表框中的指定項的文本CB_INSERTSTRING列表框中插入新項CB_GETLBTEXTLEN獲取列表框中指定項的文本長度CB_FINDSITING列表框中查詢列表項CB_LIMITEXT限制編輯框中的字符串長度CB_RESETCONTENT清空列表框CB_GETEDITSEL獲取編輯框中的選擇CB_DIR在列表框中顯示指定目錄及文件CB_SETEDITSEL設(shè)置編輯框中的選擇CB_SETCURSEL設(shè)置列表框中的選中項,該項將在編輯框中顯示第89頁/共131頁CCombox類的常用成員函數(shù)
CCombox類的成員函數(shù)功能說明Create創(chuàng)建一個CCombox類對象的組合框窗口Clear刪除當(dāng)前選項,若編輯框中有內(nèi)容,則清除Copy將當(dāng)前選中的內(nèi)容復(fù)制至剪貼板,格式為CF_TEXTCut將當(dāng)前選中內(nèi)容復(fù)制至剪貼板,格式為CF_TEXT,將刪除當(dāng)前選項,GetComboBoxInfo返回當(dāng)前CCombox對象的信息GetCount返回組合框中列表框的條目數(shù)GetCurSel返回所選組合框中列表框條目的順序號GetEditSel返回一個DWORD型數(shù)據(jù),其中低字表編輯框選中字符的開始位置,高字是選中文字的結(jié)束位置GetItemHeight返回組合框中表示列表條目數(shù)GetLBText返回組合框的列表中指定條目的字符串GetLBTextLen返回組合框的列表中指定條目的字符串的長度Paste將剪貼板中格式為CF_TEXT內(nèi)容粘貼到編輯框SetCurSel選中組合框的指定條目SetMinVisibleItems設(shè)置組合框中下拉列表中顯示的條目數(shù)SetTopIndex將指定條目置為下拉列表框的第一個可見條目AddString添加一個字符串到列表條目中DeleteString從列表條目中刪除一個字符串條目FindString查找一個與給定字符串相匹配的第一個字符串的序號InsertString將一個字符串插入到指定的位置ResetContent組合框的所有內(nèi)容置空SelectString從列表中查找指定的字符串,若找到將其放置在組合框的編輯框中第90頁/共131頁929.9.3組合框控件應(yīng)用舉例
【例7-7】本例創(chuàng)建組合框控件,當(dāng)單擊向下按鈕時,顯示可選文件的名字。當(dāng)選中某一項時,顯示該項的名稱
第91頁/共131頁93主要步驟如下:1.創(chuàng)建基于對話框的MFC應(yīng)用程序,項目為ch09_7。2.將一個ComboBox控件放到對話框上。取消Sort風(fēng)格。3.為該控件添加CComboBox類型的變量m_cb。3.初始化對話框時,加入選擇內(nèi)容:BOOLCch09_7Dlg::OnInitDialog(){ CDialog::OnInitDialog(); ……
m_cb.AddString(L"Monday"); m_cb.AddString(L"Tuesday"); m_cb.AddString(L"Wednesday"); m_cb.AddString(L"Thursday"); m_cb.AddString(L"Friday"); m_cb.AddString(L"Saturday"); m_cb.AddString(L"Sunday"); returnTRUE;}第92頁/共131頁94當(dāng)用戶選擇的內(nèi)容發(fā)生改變的時候,會產(chǎn)生CBN_SELCHANGE消息。為控件添加該消息的響應(yīng)函數(shù):voidCch09_7Dlg::OnCbnSelchangeCombo1()
{
CStringmsg; m_cb.GetLBText(m_cb.GetCurSel(),msg); AfxMessageBox(msg);}第93頁/共131頁959.8對話框通用控件
大部分控件都是在對話框中使用的,無論是基于對話框的應(yīng)用程序還是Doc/View結(jié)構(gòu)的應(yīng)用程序,控件通常是放在對話框中的。本節(jié)將以一個名為“Ex9_9”的基于對話框的應(yīng)用程序來介紹各種Windows通用控件的使用。第94頁/共131頁969.8.1Picture控件的使用
(1)分隔線將Picture控件拖放到對話框上,【Type】屬性選擇“Frame”,【Color】屬性選擇“Etched”,將控件拖到最細,這時,Picture控件看起來的效果就跟一條分隔線一樣了第95頁/共131頁97(2)圖片將【Type】屬性設(shè)置為“Icon”或者“Bitmap”的時候,可以設(shè)置【Image】屬性為相應(yīng)的資源ID,來顯示圖標(biāo)或位圖。我們在資源中導(dǎo)入一位圖,命名為IDB_BITMAP_DOT,設(shè)置Picture控件【Type】為“Bitmap”,【Image】為“IDB_BITMAP_DOT”第96頁/共131頁98Spin控件的使用
Spin按鈕控件提供了一對箭頭,用戶通過點擊箭頭可以微調(diào)該控件所表示的數(shù)值。表示Spin控件的是CSpinButtonCtrl類Spin控件通常和taborder位于它之前的控件成對使用。通過CSpinButtonCtrl的GetBuddy方法可獲得與之配對的控件第97頁/共131頁99SpinButtonCtrl類常用成員
成員描述CSpinButtonCtrl構(gòu)造CSpinButtonCtrl對象。Create創(chuàng)建一個微調(diào)按鈕對象。SetBase設(shè)置顯示的基,也就是以十進制還是十六進制還是其它進制顯示數(shù)據(jù)。SetBuddy設(shè)置該控件的伙伴窗口。SetPos設(shè)置當(dāng)前位置。SetRange設(shè)置取值范圍。第98頁/共131頁100
向?qū)υ捒蛲戏乓粋€Edit控件,置為只讀,然后拖放一個Spin控件緊挨著剛才拖放的Edit控件,兩個控件的ID都是用默認值,設(shè)置Spin控件的【Allignment】屬性為“Right”,選中【Autobuddy】屬性BOOLCEx9_9Dlg::OnInitDialog(){ ……//TODO:AddextrainitializationhereCSpinButtonCtrl*pSpin=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1);pSpin->SetRange(0,100);pSpin->SetPos(50);pSpin->GetBuddy()->SetWindowText(L"5.0");returnTRUE;}設(shè)置Spin的范圍是0~100,當(dāng)前位置是50,同時設(shè)置它的配對控件的顯示值第99頁/共131頁101在對話框中添加WM_VSCROLL消息的響應(yīng):voidCEx9_9Dlg::OnVScroll(……){if(pScrollBar->GetDlgCtrlID()==IDC_SPIN1){CStringstrValue;strValue.Format(L"%3.1f",(double)nPos/10.0);
((CSpinButtonCtrl*)pScrollBar)->GetBuddy()->SetWindowText(strValue);}CDialog::OnVScroll(nSBCode,nPos,pScrollBar);}第100頁/共131頁1029.8.3Progress控件的使用
進度控件是一個用來指示長時間操作的進展程度的控件。MFC中表示進度控制的是CProgressCtrl類
進度條有一個范圍和當(dāng)前位置。范圍表示整個操作的持續(xù)時間,當(dāng)前位置表示當(dāng)前進行到的位置,進度條根據(jù)當(dāng)前位置來判斷進行的百分比,來顯示進度第101頁/共131頁103
添加一個Progress控件,保持默認ID,設(shè)置Smooth屬性。在旁邊添加一個按鈕,設(shè)置ID為“IDC_BUTTON_START”,Caption為“開始”在OnInitDialog中添加如下代碼:CProgressCtrl*pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);pProg->SetRange(0,100);pProg->SetPos(50);為“開始”按鈕添加點擊事件實現(xiàn)代碼:voidCEx9_9Dlg::OnButtonStar(){CProgressCtrl*pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);pProg->SetPos(0);SetTimer(1000,100,NULL);}第102頁/共131頁104在CCtrlDlg中添加對WM_TIMER消息的響應(yīng)函數(shù):voidCEx9_9Dlg::OnTimer(UINTnIDEvent){ if(nIDEvent==1000) { CProgressCtrl*pProg=(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); pProg->SetPos(pProg->GetPos()+1); if(pProg->GetPos()>=100) { KillTimer(nIDEvent); AfxMessageBox("進行完畢"); } } CDialog::OnTimer(nIDEvent);}每隔0.1秒,進度條前進一步第103頁/共131頁1059.8.4Slider控件的使用
滑塊控件可以使用戶通過拖動滑塊來快速獲得指定的數(shù)據(jù)。當(dāng)用戶滑動滑塊的時候,控件將發(fā)送消息來指示變化。
滑塊控件在你選擇一系列離散值或者一段連續(xù)范圍內(nèi)的時候十分有用。第104頁/共131頁CProgressCtrl類的主要成員成員描述CProgressCtrl構(gòu)造CProgressCtrl對象。Create創(chuàng)建進度條。SetRange設(shè)置表示范圍。SetPos設(shè)置當(dāng)前位置。SetStep設(shè)置漸進步長。StepIt前進一步。第105頁/共131頁107
在對話框上增加一個Slider控件,設(shè)置Point屬性為“Bottom/Right”,然后在旁邊添加一個Static控件,ID設(shè)置為IDC_STATIC_SLIDER。該控件用來顯示滑塊的當(dāng)前位置。在OnInitDialog函數(shù)中添加如下代碼:CProgressCtrl*pProg= (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProg->SetRange(0,100); pProg->SetPos(50);為開始按鈕添加點擊事件,實現(xiàn)代碼如下:voidCEx9_9Dlg::OnButtonStar()
{ CProgressCtrl*pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProg->SetPos(0); SetTimer(2008,100,NULL);
}第106頁/共131頁108
為了響應(yīng)滑塊移動的消息,添加WM_HSCROLL消息的響應(yīng)(Slider是水平的,如果是垂直的,則需要響應(yīng)WM_VSCROLL)。實現(xiàn)如下:voidCEx9_9Dlg::OnHScroll(……){
if(pScrollBar->GetDlgCtrlID()==IDC_SLIDER1) { CSliderCtrl*pSlide=(CSliderCtrl*)pScrollBar; CStringstrText; strText.Format(L"%d",pSlide->GetPos()); SetDlgItemText(IDC_STATIC_SLIDER,strText); } CDialog::OnHScroll(nSBCode,nPos,pScrollBar);}第107頁/共131頁1099.8.5DateTimePicker控件的使用
DateTimerPicker可以用來接收日期或者時間輸入。用戶可以直接按照指定的形式輸入,也可以在彈出的日歷控件中選擇日期。如果讓用戶以字符串形式輸入,則由于輸入的多樣性,程序不好解析第108頁/共131頁110成員描述CDateTimeCtrl構(gòu)造CDateTimeCtrl對象。Create創(chuàng)建進日期控件。SetMothCalColor設(shè)置內(nèi)嵌的日歷控件的顏色,包括背景、文字等顏色。SetFormat設(shè)置顯示日期的格式。SetRange設(shè)置日期范圍。GetTime獲得表示的時間。CDateTimeCtrl類主要成員第109頁/共131頁111
在對話框上添加一個DateTimePicker控件,設(shè)置Format為“ShortDate”,選擇“UseSpinControl”,如果不選擇使用Spin控件,則用戶在彈出的日歷控件中進行輸入。在該控件旁邊添加一個按鈕,ID為“IDC_BUTTON_TIME”,Caption為“報時”。在OnInitDialog中添加如下代碼:CDateTimeCtrl*pDT= (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1);CStringformatStr=_T("'今天是:'yy'/'MM'/'dd");pDT->SetFormat(formatStr);第110頁/共131頁112添加對【報時】按鈕的點擊事件的響應(yīng)函數(shù):voidCEx9_9Dlg::OnButtonTime(){ CDateTimeCtrl*pDT=(CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1);
CTimet; pDT->GetTime(t);
CStrings=t.Format(L"%A,%B%d,%Y%H:%M:%S"); AfxMessageBox(s);}
第111頁/共131頁1139.8.6ListControl控件的使用列表控件第112頁/共131頁114
列表控件是Windows應(yīng)用程序中最常用的控件之一。最常見的用途就是資源管理器右邊的文件列表。MFC中使用CListCtrl類來封裝列表控件的功能。列表控件通??梢园ㄒ粋€圖標(biāo)和一個標(biāo)簽。此外,每一項還可以具有其它附加信息,例如資源管理器中文件的具體信息就是附加信息。第113頁/共131頁115列表控件的視圖風(fēng)格圖標(biāo)視圖:每項顯示32×32圖標(biāo),在圖標(biāo)下面顯示標(biāo)簽。用戶可以將圖標(biāo)拖放到視圖內(nèi)任何位置
小圖標(biāo)視圖:每項顯示16×16圖標(biāo),在圖標(biāo)右邊顯示標(biāo)簽。用戶可以將圖標(biāo)拖放到視圖內(nèi)任何位置
列表視圖:每項顯示16×16圖標(biāo),在圖標(biāo)右邊顯示標(biāo)簽。每一項按列排列,不能隨意拖動圖標(biāo)
報表視圖:每項占一行,第一列是主項,顯示16×16圖標(biāo),在圖標(biāo)右側(cè)顯示標(biāo)簽。右邊的列顯示子項,具體由程序來決定
第114頁/共131頁116成員描述成員描述CListCtrl構(gòu)造CListCtrl對象SetItemText設(shè)置列表項的標(biāo)簽文字Create創(chuàng)建列表控件GetHotItem獲得當(dāng)前位于鼠標(biāo)之下的列表項SetBkColor設(shè)置背景顏色GetSelectionMark獲得當(dāng)前選擇的列表項SetImageList設(shè)置圖像列表SubItemHitTest獲得指定點下的列表項SetItem設(shè)置列表項數(shù)據(jù)SetBkImage設(shè)置背景圖片GetItemRect獲得列表項的所占區(qū)域InsertItem插入列表項GetEditControl獲得當(dāng)前正在編輯的列表項的Edit控件EditLabel啟動顯示編輯標(biāo)簽文字SetTextColor設(shè)置文字顏色CreateDragImage創(chuàng)建用于拖放的圖片SetTextBkColor設(shè)置文字背景顏色列表控件的主要成員第115頁/共131頁117為使用列表控件,首先需要創(chuàng)建圖標(biāo)資源,在ResourceView的Icon一欄內(nèi)創(chuàng)建8個圖標(biāo)資源在Cex9_9Dlg類中增加成員如下:CImageListm_imageList;在OnInitDialog函數(shù)中添加初始化圖片列表的代碼:HICONhIcon[8]; intn;m_imageList.Create(16,16,0,8,8);hIcon[0]=AfxGetApp()->LoadIcon(IDI_ICON_WHITE);hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON_BLACK);hIcon[2]=AfxGetApp()->LoadIcon(IDI_ICON_RED);hIcon[3]=AfxGetApp()->LoadIcon(IDI_ICON_BLUE);hIcon[4]=AfxGetApp()->LoadIcon(IDI_ICON_YELLOW);hIcon[5]=AfxGetApp()->LoadIcon(IDI_ICON_CYAN);hIcon[6]=AfxGetApp()->LoadIcon(IDI_ICON_PURPLE);hIcon[7]=AfxGetApp()->LoadIcon(IDI_ICON_GREEN);for(n=0;n<8;n++)m_imageList.Add(hIcon[n]);第116頁/共131頁118創(chuàng)建標(biāo)簽資源,也就是每一項的文字,在OnInitDialog函數(shù)中添加如下實現(xiàn)代碼:staticcha
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 材料抵債協(xié)議書
- 運輸供應(yīng)商合同協(xié)議
- 運輸拖掛車隊合同協(xié)議
- 鄰里房屋協(xié)議書范本
- 水下砌墻協(xié)議書
- 化妝品代理銷售合同
- 通訊工程設(shè)計合同協(xié)議
- 活動委托協(xié)議書
- 課程顧問招聘合同協(xié)議
- 返傭協(xié)議書范本模板
- 浙江省腫瘤醫(yī)院醫(yī)療廢物暫存間環(huán)保設(shè)施提升改造項目報告表
- 《加拉帕戈斯群島》課件
- 2024人教版新教材初中物理八年級下冊內(nèi)容解讀課件(深度)
- 工程經(jīng)濟學(xué)(青島理工大學(xué))知到智慧樹章節(jié)測試課后答案2024年秋青島理工大學(xué)
- (高清版)DB2201∕T 43-2023 肉犢牛飼養(yǎng)技術(shù)規(guī)范
- 2025年醫(yī)院消化內(nèi)科年度工作計劃
- 水資源應(yīng)急調(diào)度模型-洞察分析
- DB51-T 3000-2023 退役軍人服務(wù)站建設(shè)與運行管理規(guī)范
- 神經(jīng)指南:中國成人失眠診斷與治療指南(2017版)
- 代理商合作條件說明
- GB/T 15843.2-2024網(wǎng)絡(luò)安全技術(shù)實體鑒別第2部分:采用鑒別式加密的機制
評論
0/150
提交評論