第5章對話框及常用控件課件_第1頁
第5章對話框及常用控件課件_第2頁
第5章對話框及常用控件課件_第3頁
第5章對話框及常用控件課件_第4頁
第5章對話框及常用控件課件_第5頁
已閱讀5頁,還剩177頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

對話框是應(yīng)用程序中最重要的界面元素之一,是與用戶交互的重要手段。它是一個特殊的窗口,其特殊是因為對話框中往往有多個控件(控件是用于和用戶交互的基本單元。控件常用于對話框中,另外它還可由其它的父窗口所擁有以完成其它的任務(wù)。),如文本框、編輯框、列表框、滾動條等。用戶通過與對話框中各控件的交互,起到輸入/輸出數(shù)據(jù)或完成其它任務(wù)的目的。

第五章對話框及常用控件對話框是應(yīng)用程序中最重要的界面元素之一,是與用1從MFC編程的角度看,一個對話框(DialogBox)由兩部分組成:1.對話框(資源)模板對話框(資源)模板用于指定對話框的控件及其分布,Windows根據(jù)對話框模板來創(chuàng)建并顯示對話框。2.對話框類對話框類用來實現(xiàn)對話框的功能,由于對話框行使的功能各不相同,因此需要從CDialog類派生一個新類,以完成特定的功能。從MFC編程的角度看,一個對話框(DialogBox)由兩2相應(yīng)地,對話框的設(shè)計包括對話框模板的設(shè)計和對話框類的設(shè)計兩個主要方面。與對話框有關(guān)的消息主要包括WM_INITDIALOG消息和控件通知消息。在對話框創(chuàng)建時將發(fā)出WM_INITDIALOG消息(初始化對話框消息),該消息的消息處理函數(shù)是OnInitDialog。OnInitDialog函數(shù)的主要用途是初始化對話框。對話框的控件會向?qū)υ捒虬l(fā)送控件通知消息。相應(yīng)地,對話框的設(shè)計包括對話框模板的設(shè)計和對話框類的3CObjectCCmdTargetCWnd

CDialog

CCommonDialog(通用對話框)

CColorDialog(顏色對話框)

CFileDialog(文件對話框)

CFindReplaceDialog(查找替換對話框)

CPageSetupDialog(頁面設(shè)置對話框)

CFontDialog(字體對話框)

CPrintDialog(打印對話框)MFC的部分對話框類繼承關(guān)系如下:MFC的部分對話框類繼承關(guān)系如下:4MFC的CDialog類封裝了用于對話框顯示、關(guān)閉等常用操作的許多成員函數(shù)。5.1.1模式對話框和無模式對話框1.模式對話框模式對話框(ModalDialogBox)是指當(dāng)對話框出現(xiàn)時,它的父窗口將暫時失效,只有處理完對話框所要求的動作后,才會把控制權(quán)交回給父窗口。5.1對話框的使用MFC的CDialog類封裝了用于對話框顯示、關(guān)閉等常用操作5模式對話框一般創(chuàng)建過程:Step1:用CDialog::CDialog構(gòu)造器創(chuàng)建模式對話框;Step2:用CDialog::DoModal函數(shù)顯示對話框(√);Step3:用CDialog::EndDialog函數(shù)終止對話框。CDialog::CDialog構(gòu)造函數(shù):格式:CDialog(UINTnIDTemplate,CWnd*pParentWnd=NULL);功能:構(gòu)造一個基于資源的模式對話框。參數(shù):nIDTemplate-對話框模板資源ID號;pParentWnd-指向父窗口的指針,若為NULL,則對話框窗口為應(yīng)用程序主窗口。模式對話框一般創(chuàng)建過程:6CDialog::DoModal函數(shù):格式:virtualintDoModal();功能:激活并顯示模式對話框,操作完成后返回對話框結(jié)果。返回:返回一個int值(IDOK或IDCANCEL),若創(chuàng)建失敗,則返回0。CDialog::EndDialog函數(shù):格式:voidEndDialog(intnResult);功能:退出模式對話框。參數(shù):nResult-為DoModal函數(shù)的返回值。CDialog::DoModal函數(shù):72.無模式對話框/共存式對話框無模式對話框(ModalessDialogBox)又稱共存式對話框,它不會令父窗口失效,因此無模式對話框出現(xiàn)時,使用者可以繼續(xù)執(zhí)行父窗口的工作。無模式對話框一般創(chuàng)建過程:Step1:用CDialog::Create函數(shù)創(chuàng)建無模式對話框(√);Step2:用CWnd::ShowWindow函數(shù)顯示對話框(√);Step3:用CWnd::DestroyWindow函數(shù)終止對話框。注:由于函數(shù)CDialog::OnOK()和CDialog::OnCancel()調(diào)用EndDialog(),所以需要重載CDialog::OnOK()和CDialog::OnCancel();若按下[Cancel]按鈕時,結(jié)束對話框,則在CDialog::OnCancel()中調(diào)用DestroyWindow()。

2.無模式對話框/共存式對話框8CDialog::Create函數(shù):格式:BOOLCreate(UINTnIDTemplate,CWnd*pParentWnd=NULL);功能:創(chuàng)建一個無模式對話框。返回:若創(chuàng)建成功則返回非0。參數(shù):nIDTemplate-對話框模板資源ID號;

pParentWnd-指向父窗口的指針,若為NULL,則對話框窗口為應(yīng)用程序主窗口。CDialog::Create函數(shù):9CWnd::ShowWindow函數(shù):格式:BOOLShowWindow(intnCmdShow);功能:顯示窗口。返回:若窗口原可見,則返回非0;若窗口原隱藏,則返回0。參數(shù):nCmdShow-規(guī)定如何顯示CWnd窗口,常用取值有:

SW_HIDE:隱藏窗口

SW_SHOWMINIMIZED:最小化窗口

SW_RESTORE:激活并顯示窗口;若已最小化或最大化,則恢復(fù)其原大小和位置

SW_SHOW:激活窗口并以其當(dāng)前大小和位置顯示窗口

SW_SHOWMAXIMIZED:最大化窗口。。。CWnd::ShowWindow函數(shù):10CWnd::DestroyWindow函數(shù):格式:virtualBOOLDestroyWindow();功能:刪除與CWnd對象連接的窗口。返回:若刪除成功,則返回非0值。CDialog::OnOK函數(shù):格式:virtualvoidOnOK();功能:當(dāng)單擊模式/無模式對話框中[Ok]按鈕(ID號為IDOK的按鈕)時調(diào)用該函數(shù)??芍剌d該函數(shù)以實現(xiàn)特定的[Ok]按鈕動作。CDialog::OnCancel函數(shù):

格式:virtualvoidOnCancel();功能:當(dāng)單擊模式/無模式對話框中[Cancel]按鈕(ID號為IDCANCEL的按鈕)時調(diào)用該函數(shù)??芍剌d該函數(shù)以實現(xiàn)特定的[Cancel]按鈕動作。CWnd::DestroyWindow函數(shù):115.1.2使用對話框編輯器操作方法:[Insert]->[Resource…]->[Dialog]->[New]。

1.打開對話框編輯器。

2.控件工具欄中各控件含義。

3.控件布局工具欄。5.1.3對話框的編程程序例:用[MFCAppWizard]創(chuàng)建一SDI程序,程序運行后單擊MOUSE彈出一模式對話框。(見操作演示)主要步驟:Step1:用[MFCAppWizard]創(chuàng)建一SDI程序(設(shè)工程名為CH51A);Step2:[Insert]->[Resource…]->[Dialog]->[New]添加對話框資源

;

5.1.2使用對話框編輯器12Step3:[View]->[ClassWizard…]為對話框派生一個類CMyDlg;此步操作完成時要生成一對文件:MYDLG.H和MYDLG.CPP。Step4:[View]->[ClassWizard…]選擇視圖類CXXXView,添加OnLButtonDown處理函數(shù);Step5:在OnLButtonDown函數(shù)中添加以下代碼:voidCXXXView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault

CMyDlgdlg;//生成并構(gòu)造一個對話框?qū)ο?/p>

dlg.DoModal();//顯示對話框

CView::OnLButtonDown(nFlags,point);}Step6:在CXXXView.CPP文件開始的#include后添加以下代碼:

#include"MyDlg.h"Step3:[View]->[ClassWizard…]為對13程序例:為模式對話框增加一個命令按鈕,單擊該按鈕彈出一消息框。按鈕控件的常用消息有兩個:1、BN_CLICKED(單擊按鈕消息)

當(dāng)用戶單擊按鈕時,由按鈕控件發(fā)送給對話框。2、BN_DOUBLECLICKED(雙擊按鈕消息)

當(dāng)用戶雙擊按鈕時,由按鈕控件發(fā)送給對話框。程序例:用[MFCAppWizard]創(chuàng)建一SDI程序,程序運行后單擊MOUSE彈出一無模式對話框。(見操作演示)主要步驟:Step1:用[MFCAppWizard]創(chuàng)建一SDI程序(設(shè)工程名為CH51B);Step2:[Insert]->[Resource…]->[Dialog]->[New]添加對話框資源

;程序例:為模式對話框增加一個命令按鈕,單擊該按鈕彈出一消息框14

Step3:[View]->[ClassWizard…]為對話框派生一個類CMyDlg;此步操作完成時要生成一對文件:MYDLG.H和MYDLG.CPP。Step4:[View]->[ClassWizard…]選擇視圖類CH51BView,添加OnLButtonDown處理函數(shù);Step5:在OnLButtonDown函數(shù)中添加以下代碼:voidCCH51BView::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault

CMyDlg*pDlg=newCMyDlg; pDlg->Create(IDD_DIALOG1,this); pDlg->ShowWindow(SW_SHOW); CView::OnLButtonDown(nFlags,point);}Step3:[View]->[ClassWizard…]為15Step6:在CH51BView.CPP文件開始的#include后添加以下代碼:

#include"MyDlg.h"

從上面兩種不同對話框的例子可以看出:模式對話框在顯示時,未關(guān)閉窗口前其它窗口是不能成為活動窗口的;無模式對話框在顯示時,未關(guān)閉窗口前其它窗口則是可以成為活動窗口的。Step6:在CH51BView.CPP文件開始的#incl16控件(Control)是能夠完成輸入/輸出等特定功能的一種特殊窗口。系統(tǒng)定義的標(biāo)準(zhǔn)控件所對應(yīng)的類一般是由CWnd派生的。5.2.1在對話框中創(chuàng)建和使用控件控件的創(chuàng)建方式有兩種:1、在對話框模板中用編輯器指定控件 即將控件的父窗口指定為對話框。2、把控件看作任一窗口的子窗口,通過調(diào)用Create()函數(shù)來創(chuàng)建5.2控件的創(chuàng)建和使用控件(Control)是能夠完成輸入/輸出等特定功能的一種特17程序例:在本例中,可學(xué)到三種改變按鈕控件標(biāo)題的方法:法1:通過ClassWizard增加資源IDD_DIALOG1的CButton類對象

CButtonm_MyBtn;在OnInitDialog()中添加:

m_MyBtn.SetWindowText(“歡迎”);//將按鈕控件標(biāo)題設(shè)為//“歡迎”CWnd::SetWindowText函數(shù):格式:voidSetWindowText(LPCTSTRlpszString);功能:設(shè)置窗口或控件的標(biāo)題。參數(shù):lpszString-指向用作新標(biāo)題或控件文本的CString對象或字符串。程序例:在本例中,可學(xué)到三種改變按鈕控件標(biāo)題的方法:18法2:通過CWnd::GetDlgItem獲取按鈕控件對象指針實現(xiàn)

設(shè)新增按鈕控件的ID號為IDC_BUTTON1,則與m_MyBtn.SetWindowText(“歡迎”);等價的代碼如下:GetDlgItem(IDC_BUTTON1)->SetWindowText(“歡迎”);CWnd::GetDlgItem函數(shù):格式:CWnd*GetDlgItem(intnID);功能:獲取指定控件或子窗口的指針。參數(shù):nID-控件或子窗口的ID標(biāo)識符。法3:在對話框模板中,通過設(shè)定控件屬性對話框?qū)崿F(xiàn)法2:通過CWnd::GetDlgItem獲取按鈕控件對象指19

5.2.2控件的數(shù)據(jù)交換和數(shù)據(jù)驗證

DDV/DDX技術(shù)DDX(dialogdataexchange)DDV(dialogdatavalidation)UpdateData()函數(shù)實現(xiàn)控件的控制程序例(P200)UpdateData();M_mybtn.SetWindowText(m_strEdit)5.2.2控件的數(shù)據(jù)交換和數(shù)據(jù)驗證205.2.3控件的通用屬性

控件的屬性對話框的修改5.2.3控件的通用屬性215.2.4控件的消息在控件的使用和編程過程中,用戶可以向控件發(fā)送消息來完成特定的任務(wù),或者是根據(jù)控件產(chǎn)生的消息來執(zhí)行所需要的程序代碼。當(dāng)控件的狀態(tài)發(fā)生改變時,控件會向其父窗口發(fā)送消息,該消息稱為通知消息。每個消息均由一個MSG結(jié)構(gòu)來記錄。對一般控件,通知消息通常是WM_COMMAND。MSG結(jié)構(gòu)中記錄的該消息的幾個常用參數(shù)說明如下:HIWORD(wParam)-控件ID標(biāo)識符LOWORD(wParam)-控件的具體消息代碼(如命令按鈕有BN_CLICKED和BN_DOUBLECLICKED兩個)lParam-控件的句柄5.2.4控件的消息225.2.5如何在程序中加載其它的應(yīng)用程序?

有時,需要在一個應(yīng)用程序中加載另一個應(yīng)用程序。在VC中,有三個API函數(shù)WinExec()、ShellExecute()、CreateProcess()可以實現(xiàn)這種應(yīng)用目的。

WinExec最簡單,原型如下:WinExec(LPCSTRlpCmdLine,//程序文件的路徑

UINTFuCmdShow//窗口顯示方式

);

如,加載C盤windows文件夾下的notepad.exe記事本程序,代碼如下:WinExec("c:\\windows\\notepad.exe",SW_SHOWMAXIMIZED);5.2.5如何在程序中加載其它的應(yīng)用程序?23運行EMAIL或網(wǎng)址在某消息映射中添加實現(xiàn)EMAIL運行charszMailAddress[80];

strcpy(szMailAddress,"mailto:netvc@21");

ShellExecute(NULL,"open",szMailAddress,NULL,NULL,SW_SHOWNORMAL);在某消息映射中添加實現(xiàn)網(wǎng)址啟動

charszMailAddress[80];strcpy(szMailAddress,"");ShellExecute(NULL,"open",szMailAddress,NULL,NULL,SW_SHOWNORMAL);運行EMAIL或網(wǎng)址在某消息映射中添加實現(xiàn)EMAIL運行24可將控件分為三類:

1、一般控件/標(biāo)準(zhǔn)控件表:一般控件控件名稱MFC類靜態(tài)控件CStatic(√)按鈕控件CButton(√)(包括:命令按鈕、單選鈕、復(fù)選框)編輯控件CEdit(√)列表框CListBox(√)組合框CComboBox(√)滾動條CScrollBar(√)

5.3Window常用控件可將控件分為三類:5.3Window常用控件25

2、新增的公共控件Windows支持18種新的公共控件,VC的MFC類庫提供相應(yīng)的類以方便程序員編程。表:公共控件控件名稱MFC類動畫控件CAnimateCtrl擴展組合框控件CComboBoxEx

(比一般的組合框控件多一項功能:支持圖象列表)日期時間控件CDateTimeCtrl標(biāo)題控件CHeaderCtrl熱鍵控件CHotKeyCtrl(它是一個窗口,用于顯示用戶輸入的熱鍵,如[Ctrl]+[Shift]+[F8]。使用熱鍵可迅速地完成指定的操作。它常用于對話框中。)2、新增的公共控件26圖象列表CImageListIP地址控件CIPAddressCtrl列表控件CListCtrl月歷控件CMonthCalCtrl進(jìn)展條控件CProgressCtrl豐富編輯控件CRichEditCtrl(是一個窗口,用戶可以在其中輸入和編輯文字,同時允許用戶在編輯時使用豐富的格式特性,就像Word中使用腳注[Footnote]等一樣。它既支持文字和圖形格式,也可包括嵌入的OLE對象。)滑動條控件CSliderCtrl(√)旋轉(zhuǎn)按鈕控件CSpinButtonCtrl(√)圖象列表CImageLi27狀態(tài)欄控件CStatusBarCtrl標(biāo)簽控件CTabCtrl工具欄控件CToolBarCtrl工具欄提示控件CToolTipCtrl樹形控件CTreeCtrl

3、ActiveX控件ActiveX(ActivetheInternet:激活I(lǐng)nternet)控件:是MS提出的一組使用COM(ComponentObjectModel:組件對象模型)使得軟件組件在網(wǎng)絡(luò)環(huán)境中進(jìn)行交互的技術(shù)集。另外,我們還可編寫代碼定制自己的控件(CustomControl)。狀態(tài)欄控件CStatusB285.3.1靜態(tài)控件和按鈕

1、靜態(tài)控件靜態(tài)控件的功能比較簡單,可作為顯示字符串、圖標(biāo)、位圖用。靜態(tài)控件一般不接收用戶輸入,也不能被選擇。在對話框的資源編輯器的控件工具欄中,屬于靜態(tài)控件的有:靜態(tài)文本(StaticText)、成組框(GroupBox)、靜態(tài)圖片(Picture)。成組框(GroupBox):是一個矩形框,其中有一組控件(如單選鈕或復(fù)選框)。它可用于把具有公共用途的控件組織在一起。成組框不能被選中,應(yīng)用程序也不能向它發(fā)送消息。靜態(tài)圖片(Picture)可將應(yīng)用程序資源中的位圖、圖標(biāo)等顯示在該控件中。

5.3.1靜態(tài)控件和按鈕29

2、按鈕事實上,Wndows可為我們提供4種按鈕:命令按鈕/按鍵按鈕(Button)、單選鈕(RadioButton)、復(fù)選框(CheckBox)、自畫按鈕四種。MFC提供類CButton來實現(xiàn)按鈕控件的功能。從對話框模板創(chuàng)建,只需向?qū)υ捒蝾惣尤隒Button類型的成員變量即可。

(1)命令按鈕/按鍵按鈕(Button)幾乎所有的對話框都使用命令按鈕,應(yīng)用程序通常使用命令按鈕啟動某一操作。(2)單選鈕(RadioButton)應(yīng)用程序通常在成組框中使用單選按鈕,用戶可以在一組相關(guān)但又對立的選項中進(jìn)行選擇,在同一時刻只能選中其中一個。它通常有兩種狀態(tài):選中(按鈕上有黑點)和未選中(沒有黑點)。另外如果為三態(tài)單選鈕,則還有禁止?fàn)顟B(tài)(灰鈕)。2、按鈕30(3)復(fù)選框(CheckBox)應(yīng)用程序通常在成組框中使用復(fù)選框,用戶可以在一組相關(guān)但又獨立的選項中進(jìn)行選擇,在同一時刻可以選擇任意個選項。它通常有兩種狀態(tài):選中(框中有√)和未選中(沒有√)。另外如果為三態(tài)復(fù)選框,則還有禁止?fàn)顟B(tài)(灰框)。

例:見教材P205圖5.22。(4)自畫按鈕對于手工創(chuàng)建,則首先要調(diào)用CButton()構(gòu)造對象,然后再調(diào)用CButton::Create創(chuàng)建按鈕控件,并將其連接到CButton對象。最典型的自畫按鈕就是位圖按鈕,它是用位圖圖象代替文字標(biāo)簽的按鈕控件。位圖按鈕的作用與命令按鈕相同。MFC提供的CButton的派生類CBitmapButton(位圖按鈕類)來實現(xiàn)位圖按鈕的功能,通過幾個獨立的位圖分別代表按鈕的松開(Up)、按下(Down)、獲取輸入焦點(Focused)和禁止(Disabled)狀態(tài)。(3)復(fù)選框(CheckBox)31創(chuàng)建按鈕CButton::Create成員函數(shù):格式:BOOLCreate(LPCTSTRlpszCaption,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);參數(shù):lpszCaption-按鈕上顯示的文字;dwStyle-按鈕風(fēng)格,除了Windows風(fēng)格可以使用外(如WS_CHILD|WS_VISUBLE|WS_BORDER)還有按鈕專用的一些風(fēng)格,常用的有:BS_CHECKBOX

復(fù)選框BS_DEFPUSHBUTTON

默認(rèn)命令按鈕

BS_OWNERDRAW

自繪按鈕BS_PUSHBUTTON

命令按鈕BS_RADIOBUTTON

單選按鈕BS_3STATE

允許按鈕有三種狀態(tài),即:選中,未選中,未定

創(chuàng)建按鈕CButton::Create成員函數(shù):32

Rect-窗口所占據(jù)的矩形區(qū)域;

pParentWnd-父窗口指針;nId-該窗口的ID值。獲取/改變按鈕狀態(tài):通過調(diào)用intCButton::GetCheck得到當(dāng)前是否被選中,返回0:未選中,1:選中,2:未定。調(diào)用voidCButton::SetCheck設(shè)置當(dāng)前選中狀態(tài)。3、按鈕的消息BN_CLICKED:單擊按鈕消息;BN_DOUBLECLICKED:雙擊按鈕消息。處理按鈕消息:要處理按鈕消息需要在父窗口中進(jìn)行消息映射,映射宏為ON_BN_CLICKED(id,memberFun)id為按鈕的ID值,就是創(chuàng)建時指定的nID值。處理函數(shù)原型為afx_msgvoidmemberFun();演示:P205【例Ex_Ctrls1】Rect-窗口所占據(jù)的矩形區(qū)域;33voidCEx_CommCtrlsDlg::OnButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); if(!m_bEnabled)return; intnID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4); if(nID==IDC_RADIO1) { CEditDlgdlg; dlg.DoModal(); } if(nID==IDC_RADIO2) { CListBoxDlgdlg; dlg.DoModal(); } if(nID==IDC_RADIO3) { CComboDlgdlg; dlg.DoModal(); } if(nID==IDC_RADIO4) { CScrollDlgdlg; dlg.DoModal(); }}voidCEx_CommCtrlsDlg::OnCheck1(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); for(inti=0;i<4;i++) GetDlgItem(IDC_RADIO1+i)->EnableWindow(m_bEnabled);}BOOLCEx_CommCtrlsDlg::OnInitDialog(){……………… //TODO:Addextrainitializationhere CheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO1); OnCheck1(); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCEx_CommCtrlsDlg::OnButto344.技巧-位圖按鈕舉例位圖按鈕是以位圖(而不是文本)作標(biāo)題的按鈕。可用CBitmapButton位圖按鈕類和CBitmapButton::AutoLoad()函數(shù)實現(xiàn)。一個CBitmapButton對象按鈕可以包含四幅位圖,即:松開(Up)、按下(Down)、聚焦(Focused)、禁止(disabled),其中第一幅位圖是必須的。實現(xiàn)步驟:⑴用對話框資源編輯器在對話框中放置一個命令按鈕(Button),并選中Styles卡片中Owner_draw/自繪按鈕復(fù)選框⑵為按鈕設(shè)定標(biāo)題名和ID(如ID編輯框輸入:IDC_MYIMAGE,Caption編輯框輸入:MYIMAGE)⑶用資源編輯器生成四幅位圖,并把位圖資源ID設(shè)置成與按鈕標(biāo)題相對應(yīng)的字符串ID

這里要注意位圖資源不能用數(shù)字ID,而是使用字符串ID(即用雙引號將ID標(biāo)識符括起來),使用格式如下:

4.技巧-位圖按鈕舉例35

"按鈕標(biāo)題名U"-松開(Up)位圖

"按鈕標(biāo)題名D"-按下(Down)位圖

"按鈕標(biāo)題名F"-聚焦(Focused)位圖

"按鈕標(biāo)題名X"-禁止(disabled)位圖⑷在對話框類中生成CBitmapButton對象(該類要用#include<afxext.h>)

CBitmapButtonm_BitmapButton;⑸在CDialog::OnInitDialog()函數(shù)中調(diào)用CBitmapButton::AutoLoad()函數(shù)實現(xiàn)位圖與按鈕的關(guān)聯(lián)此處代碼如下:

m_BitmapButton.AutoLoad(IDC_MYIMAGE,this);

"按鈕標(biāo)題名U"-松開(Up)位36

CBitmapButton::AutoLoad函數(shù):格式:BOOLAutoLoad(UINTnID,CWnd*pParent);功能:初始化對話框中的按鈕為位圖按鈕。參數(shù):nID-按鈕的ID號;pParent-指向父窗口的指針。⑹建立位圖按鈕的消息處理機制,這樣就可以使用位圖按鈕了

CBitmapButton::AutoLoad函375.3.2編輯框(EditBox)Edit控件是用來接收用戶輸入和編輯文本的控件。1.編輯控件的屬性和風(fēng)格見編輯框的屬性對話框。2.編輯框的常用操作(1)文本、數(shù)字的設(shè)置和讀取為使編輯控件允許輸入和讀取不同類型的數(shù)據(jù),需要使用對話框數(shù)據(jù)交據(jù)交換DDX(DialogDataeXchange)和數(shù)據(jù)驗證DDV(DialogDataVerification)技術(shù)。

DDX技術(shù)的實質(zhì)就是為控件建立一數(shù)據(jù)映射,DDX接收CDataExchange類(該類提供上下文信息,它沒有基類)中的信息,并將數(shù)據(jù)在指定控件和數(shù)據(jù)變量或CString對象之間傳遞。

DDV技術(shù)的實質(zhì)是驗證數(shù)據(jù)的有效性,它主要驗證數(shù)據(jù)是否在給定的最大值和最小值之間。一旦數(shù)據(jù)超出了有效范圍,DDV函數(shù)將顯示一消息框,并在消息框中給用戶提示合理的輸入范圍。

DDX和DDV的關(guān)鍵技術(shù)是DDX全局函數(shù)和DDV全局函數(shù)(通常DDV函數(shù)要與DDX函數(shù)成對出現(xiàn))。5.3.2編輯框(EditBox)38CWnd::UpdateData成員函數(shù):用法1:UpdateData(TRUE);/UpdateData();功能:將對話框中控件的數(shù)據(jù)傳送至相關(guān)聯(lián)的成員變量。用法2:UpdateData(FALSE);功能:將對話框中控件相關(guān)聯(lián)的成員變量的值傳送至控件。(2)口令設(shè)置當(dāng)編輯框控件設(shè)置口令形式時,用戶輸入的各字符都被一特殊的字符顯示(該特殊字符叫口令字符),缺省的口令字符是星號“*”。應(yīng)用程序可用CEdit::SetPassWordChar成員函數(shù)設(shè)置口令字符:格式:voidSetPassWordChar(TCHARch);功能:設(shè)置或刪除輸入文本時顯示在編輯控件中的口令字符。參數(shù):ch-設(shè)定的口令字符,若為0則顯示用戶實際輸入的字符。

Edit控件口令字符也可通過該控件的Password屬性設(shè)置,當(dāng)Password屬性設(shè)為True時,就會將輸入的內(nèi)容屏蔽為星號“*”。CWnd::UpdateData成員函數(shù):39注:采用這里的方法設(shè)置口令存在漏洞,故此法只能用于一般的口令設(shè)置(漏洞:當(dāng)把其Password屬性設(shè)為True時,雖然我們看來都是星號,但程序中的Edit控件實際仍是用戶輸入的密碼,應(yīng)用程序可以獲取該控件中的密碼,其他應(yīng)用程序也可以通過向Edit控件發(fā)送WM_GETTEXT或EM_GETLINE消息來獲取Edit控件中的內(nèi)容。黑客程序正是利用Edit控件的這個特性,當(dāng)發(fā)現(xiàn)當(dāng)前探測的窗口是Edit控件并且具有ES_PASSWORD屬性值時,則通過SendMessage向此編輯控件窗口發(fā)送WM_GETTEXT或EM_GETLINE消息,這樣Edit框中的內(nèi)容就一目了然了。注:采用這里的方法設(shè)置口令存在漏洞,故此法只能用于一般的口令40(3)選擇文本由于在編輯框中編輯文本時,用戶可能選擇要某一段文本,所以通過voidCEdit::GetSel(int&nStartChar,int&nEndChar)得到用戶選擇的字符范圍,通過調(diào)用voidCEdit::SetSel(intnStartChar,intnEndChar,BOOLbNoScroll=FALSE)可以設(shè)置當(dāng)前選擇的文本范圍,如果指定nStartChar=0、nEndChar=-1則表示選中所有的文本。voidReplaceSel(LPCTSTRlpszNewText,BOOLbCanUndo=FALSE)可以將選中的文本替換為指定的文字。此外編輯框還有一些和剪貼板有關(guān)的功能,voidCEdit::Clear()刪除選中的文本,voidCEdit::Copy()可將選中的文本送入剪貼板,voidCEdit::Paste()將剪貼板中內(nèi)容插入到當(dāng)前編輯框中光標(biāo)位置,voidCEdit::Cut()

相當(dāng)于Copy和Clear結(jié)合使用。(3)選擇文本414.編輯控件的常用消息當(dāng)編輯框的文本被修改等事件發(fā)生時,將向父窗口發(fā)送一些消息,常用的消息如下:EN_CHANGE

編輯框中文本更新后產(chǎn)生此消息(映射宏名:ON_EN_CHANGE)EN_ERRSPACE

編輯框無法分配內(nèi)存時產(chǎn)生此消息(映射宏名:ON_EN_ERRSPACE)EN_KILLFOCUS/EN_SETFOCUS

在編輯框失去/獲取輸入焦點時產(chǎn)生相應(yīng)的消息(映射宏名:ON_EN_KILLFOCUS/ON_EN_SETFOCUS)

程序例:P209[例Ex_Ctrls2]程序主要代碼附后4.編輯控件的常用消息42BOOLCEditDlg::OnInitDialog(){ CDialog::OnInitDialog();

//TODO:Addextrainitializationhere m_strAve="0.00"; UpdateData(FALSE); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCEditDlg::OnButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); doubleave=(double)(m_nScore1+m_nScore2+m_nScore3)/3.0; m_strAve.Format("%6.2f",ave); UpdateData(FALSE);}BOOLCEditDlg::OnInitDialog()435.3.3列表框(ListBox)列表框用來列出許多項目供用戶選擇的控件。1.列表框的風(fēng)格列表框按性質(zhì)可分為單選(缺省)、多選、擴展多選、非選四種類型。單選列表框(Single):用戶一次只能選擇一個選項;多選列表框(Multiple):用戶一次只能選擇幾個選項;擴展多選列表框(Extended):用戶可用Mouse拖動或其它特殊組合鍵進(jìn)行選擇;非選列表框(No):不提供選擇功能。見教材P140圖表。5.3.3列表框(ListBox)442.列表框基本操作在列表框被創(chuàng)建后,往往要添加、刪除、改變或獲取列表框中的列表項,該操作可調(diào)用ClistBox類成員函數(shù)實現(xiàn)。列表框的(列表)項可用字符串標(biāo)識或用索引確定(索引表明某項在列表框中的位置,它以0為基數(shù),即:第一項索引為0,第二項索引為1,。。。)。(1)添加列表項列表框創(chuàng)建時是一個空表,需要由用戶添加或插入一些項。添加列表項可使用ClistBox::AddString成員函數(shù):格式:intAddString(LPCTSTRlpszItem);功能:在列表框中添加字符串文本的一個列表項。若列表框未以LBS_SORT風(fēng)格創(chuàng)建,則添加字符串到列表的尾部,否則插到列表中。2.列表框基本操作45返回:添加列表項在列表框中的索引。錯誤返回LB_ERR,空間不足返回LB_ERRSPACE。參數(shù):lpszItem-列表項的文本字符串。CListBox::InsertString用于將列表項插入到指定位置:格式:intInsertString(intnIndex,LPCTSTRlpszItem)功能:將字符串文本插入到指定位置。返回:字符串在列表框中插入位置的索引。錯誤返回LB_ERR,空間不足返回LB_ERRSPACE。參數(shù):nIndex-指定插入字符串的索引(從0開始)。若為-1,則該串插入到列表的尾部。lpszItem-列表項的文本字符串。返回:添加列表項在列表框中的索引。錯誤返回LB_ERR,空間46CListBox::SetItemData成員函數(shù):格式:intSetItemData(intnIndex,DWORDdwItemData);功能:設(shè)置與列表框中指定列表項相關(guān)的32位值。返回:若出錯,則返回LB_ERR。參數(shù):nIndex-列表項的索引dwItemData-指定與列表項相關(guān)的32位值CListBox::SetItemDataPtr成員函數(shù):格式:intSetItemDataPtr(intnIndex,void*pData);功能:設(shè)置與列表框中指定列表項相關(guān)的指針。返回:若出錯,則返回LB_ERR。CListBox::SetItemData成員函數(shù):47參數(shù):nIndex-列表項的索引。pData-指定與列表項相關(guān)的指針。CListBox::SetItemData是將一個32數(shù)值與某列表項(由nIndex指定)關(guān)聯(lián)起來,而CListBox::SetItemDataPtr可將數(shù)組、結(jié)構(gòu)體等數(shù)據(jù)與列表項關(guān)聯(lián)。與上面相對應(yīng)的兩個函數(shù)CListBox::GetItemData和CListBox::GetItemDataPtr分別用來獲取相關(guān)聯(lián)的用戶數(shù)據(jù)。CListBox::GetItemDataPtr函數(shù):格式:void*GetItemDataPtr(intnIndex);功能:獲取與指定列表項關(guān)聯(lián)的指針。返回:若調(diào)用成功,則返回獲取的指針;若發(fā)生錯誤,則返回-1。參數(shù):nIndex-列表項索引(從0開始)。參數(shù):48(2)刪除列表項intCListBox::DeleteString(UINTnIndex)成員函數(shù)用于刪除指定列表項,并返回列表中剩下的列表項個數(shù)。voidCListBox::ResetContent()成員函數(shù)可刪除列表框中所有列表項。通過調(diào)用intCListBox::GetCount()成員函數(shù)將得到當(dāng)前列表框中列表項的個數(shù)。(3)查找列表項通過調(diào)用CListBox::FindString成員函數(shù)可以在列表框中查找指定的列表項的位置。格式:intFindString(intnStartAfter,LPCTSTRlpszItem);功能:在列表框中查找指定的字符串的列表項。返回:若查找成功,則返回所匹配的列表項索引,若查找不成功則返回LB_ERR。(2)刪除列表項49參數(shù):nStartAfter-查找的開始位置索引號。若為-1,則從頭至尾查找。LpszItem-要查找的列表項文本串。(4)選擇列表項若獲取當(dāng)前所選列表項,可調(diào)用CListBox::GetCurSel成員函數(shù):格式:intGetCurSel();功能:獲取列表框中當(dāng)前所選列表項的索引。若設(shè)置某列表項為選中狀態(tài),可調(diào)用CListBox::SetCurSel成員函數(shù):格式:intSetCurSel(intnIndex);功能:設(shè)置列表框中某列表項為選中狀態(tài)(高亮顯示)。參數(shù):nIndex-指定列表項的索引。參數(shù):50若獲取某列表項的文本串,可使用CListBox::GetText成員函數(shù):格式:voidGetText(intnIndex,CString&rString);功能:若獲取某列表項的字符串。參數(shù):nIndex-列表項的索引。

rString-獲取的字符串對象。3.列表框的Notification消息列表框可以向父窗口發(fā)六種Notification消息:

LBN_DBLCLK

鼠標(biāo)雙擊列表框中某項字符串時產(chǎn)生(映射宏:ON_LBN_DBLCLK)

LBN_ERRSPACE

列表框無法分配內(nèi)存時產(chǎn)生

LBN_KILLFOCUS/LBN_SETFOCUS

在列表框失去/得到輸入焦點時產(chǎn)生

LBN_SELCHANGE

列表框選擇的項發(fā)生改變時產(chǎn)生

LBN_SELCANCEL

取消當(dāng)前列表框的選項時產(chǎn)生若獲取某列表項的文本串,可使用CListBox::GetTe51使用以上幾種消息映射的方法為定義原型如:afx_msgvoidmemberFxn();的函數(shù),并且定義形式如ON_Notification(id,memberFxn)的消息映射。如果在對話框中使用列表框,ClassWizard會自動列出相關(guān)的消息,并能自動產(chǎn)生消息映射代碼。4.CCheckListBox類(*)在MFC4.2版本中添加了CCheckListBox類(復(fù)選列表框類),該類是由CListBox派生并擁有CListBox的所有功能,不同的是可以在每行前加上一個復(fù)選框。必須注意的是在創(chuàng)建時必須指明LBS_OWNERDRAWFIXED或LBS_OWNERDRAWVARIABLE風(fēng)格。使用以上幾種消息映射的方法為定義原型如:afx_msgvo52voidCListBoxDlg::OnDataAdd(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); if(m_strName.IsEmpty()) { MessageBox("姓名不能為空!"); return; } m_strName.TrimLeft(); m_strName.TrimRight(); if((m_List.FindString(-1,m_strName))!=LB_ERR) { MessageBox("列表框中已有相同姓名,不能添加!"); return; } intnIndex=m_List.AddString(m_strName); SCOREdata; data.score1=m_nScore1; data.score2=m_nScore2; data.score3=m_nScore3; m_List.SetItemDataPtr(nIndex,newSCORE(data));}5示例:P214[例Ex_Ctrls3]voidCListBoxDlg::OnDataAdd()53voidCListBoxDlg::OnDataDel(){ //TODO:Addyourcontrolnotificationhandlercodehere intnIndex=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("當(dāng)前沒有選擇項或列表框操作失??!");}voidCListBoxDlg::OnDestroy(){ CDialog::OnDestroy();

//TODO:Addyourmessagehandlercodehere for(intnIndex=m_List.GetCount()-1;nIndex>=0;nIndex--) { delete(SCORE*)m_List.GetItemDataPtr(nIndex); }}voidCListBoxDlg::OnSelchangeList1(){ //TODO:Addyourcontrolnotificationhandlercodehere intnIndex=m_List.GetCurSel(); if(nIndex!=LB_ERR) { m_List.GetText(nIndex,m_strName); SCORE*data=(SCORE*)m_List.GetItemDataPtr(nIndex); m_nScore1=data->score1; m_nScore2=data->score2; m_nScore3=data->score3; UpdateData(FALSE); }}第5章對話框及常用控件課件545.3.4組合框(ComboBox)組合框窗口一般由一個編輯框和一個列表框組成。1.組合框的風(fēng)格及類型組合框按主要性質(zhì)可分為簡單組合框、下拉式組合框(缺?。?、下拉式列表組合框三種類型。簡單組合框(Simple):其列表框不用下拉,而是直接顯示出來。下拉式組合框(DropDown):Mouse單擊下拉按鈕后顯示下拉的列表框。下拉式列表組合框(DropList):Mouse單擊下拉按鈕后顯示下拉的列表框,但編輯框無效。組合框的其它一些風(fēng)格見教材P146圖表。2.組合框常用操作由于組合框內(nèi)包含了列表框,所以列表框的功能都能夠使用,如:intCComboBox::AddString(LPCTSTRlpszItem)向組合框添加字符串項;5.3.4組合框(ComboBox)55intCComboBox::DeleteString(UINTnIndex)用于刪除指定的索引項;intCComboBox::InsertString(intnIndex,LPCTSTRlpszItem)將字符串插入到指定位置;voidCComboBox::ResetContent()可以刪除組合框中所有項和編輯文本;intCComboBox::GetCount()獲得當(dāng)前組合框中列表項的個數(shù)。如果需要得到/設(shè)置當(dāng)前被選中的項的位置,可以調(diào)用intCComboBox::GetCurSel()/intCComboBox::SetCurSel(intiIndex)。通過調(diào)用intCComboBox::GetLBText(intnIndex,LPTSTRlpszText)獲得組合框內(nèi)指定列表項的字符串。通過調(diào)用intCComboBox::FindString(intnStartAfter,LPCTSTRlpszItem)可以在當(dāng)前所有項中查找指定的字符串的位置,nStartAfter指明開始查找的位置索引號。intCComboBox::SelectString(intnStartAfter,LPCTSTRlpszItem)可以選擇指定的字符串。intCComboBox::DeleteString(UI56此外編輯框的功能都能夠使用。CComboBox::GetEditSel用于獲取組合框的編輯框中被選中的字符位置:格式:DWORDGetEditSel();功能:獲取組合框的編輯框中當(dāng)前選擇的首尾字符位置。返回:LOWORD-開始位置,HIWORD-選擇字符串中的最后一個未選字符的位置。若為不含編輯框的下拉式列表組合框,則返回CB_ERR。CComboBox::SetEditSel用于設(shè)置組合框的編輯框中被選中的字符位置:格式:BOOLSetEditSel(intnStartChar,intnEndChar);功能:設(shè)置組合框的編輯框中要選擇的字符位置。返回:成功,則返回非0。參數(shù):nStartChar-指定開始位置。

nEndChar-指定終止位置。此外編輯框的功能都能夠使用。57BOOLCComboBox::LimitText(intnMaxChars)用于設(shè)置組合框的編輯框中可輸入的最大字符數(shù)。組合框中編輯控件的剪貼板功能CComboBox::Copy、CComboBox::Clear、CComboBox::Cut、CComboBox::Paste均可以使用。3.組合框的Notification消息組合框可以向父窗口發(fā)送11種消息,消息前綴名為CBN_。

CBN_DBLCLK

鼠標(biāo)雙擊組合框的某項字符串時產(chǎn)生

CBN_DROPDOWN

組合框的列表框被彈出時產(chǎn)生

CBN_KILLFOCUS/CBN_SETFOCUS

在編輯框失去/獲得輸入焦點時產(chǎn)生

CBN_SELCHANGE

組合框中選擇的列表項改變時產(chǎn)生

CBN_EDITUPDATE

組合框中的編輯框內(nèi)容被更新時產(chǎn)生

CBN_EDITCHANGE

組合框的編輯框內(nèi)容改變后產(chǎn)生BOOLCComboBox::LimitText(int58使用以上幾種消息映射的方法為定義原型如:afx_msgvoidmemberFxn();的函數(shù),并且定義形式如ON_Notification(id,memberFxn)的消息映射。如果在對話框中使用組合框,ClassWizard會自動列出相關(guān)的消息,并能自動產(chǎn)生消息映射代碼。4.示例P219【例Ex_Ctrls4】主要程序代碼:voidCComboDlg::OnSelchangePattern(){ //TODO:Addyourcontrolnotificationhandlercodehere intnIndex=m_Pattern.GetCurSel(); if(nIndex!=CB_ERR) { m_nDrawPattern=m_Pattern.GetItemData(nIndex); Invalidate(); }}使用以上幾種消息映射的方法為定義原型如:afx_ms59voidCComboDlg::OnPaint(){ CPaintDCdc(this);//devicecontextforpainting

//TODO:Addyourmessagehandlercodehere CWnd*pWnd=GetDlgItem(IDC_DRAW); pWnd->UpdateWindow(); CDC*pDC=pWnd->GetDC(); CBrushdrawBrush; drawBrush.CreateHatchBrush(m_nDrawPattern,RGB(0,0,0)); CBrush*pOldBrush=pDC->SelectObject(&drawBrush); CRectrcClient; pWnd->GetClientRect(rcClient); pDC->Rectangle(rcClient); pDC->SelectObject(pOldBrush); //DonotcallCDialog::OnPaint()forpaintingmessages}BOOLCComboDlg::OnInitDialog(){ CDialog::OnInitDialog();

//TODO:Addextrainitializationhere CStringstr[6]={"水平線","豎直線","向下斜線","向上斜線","十字線","交叉線"}; intnIndex; for(inti=0;i<6;i++) { nIndex=m_Pattern.AddString(str[i]); m_Pattern.SetItemData(nIndex,i); } m_Pattern.SetCurSel(0); m_nDrawPattern=0; returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}第5章對話框及常用控件課件605.3.5滾動條(ScrollBar)滾動條是由兩端的滾動箭頭和中間的滾動框和其中的滾動塊組成。根據(jù)滾動條的走向可分為水平滾動條和垂直滾動條兩種。1.滾動條基本操作MFC中,CScrollBar類是對滾動條控件提供支持的類,它封裝了滾動條控件的各種操作,包括設(shè)置和獲取滾動條的范圍及滾動塊的位置等。在創(chuàng)建滾動條后需要調(diào)用CScrollBar::SetScrollRange設(shè)置滾動范圍:格式:voidSetScrollRange(intnMinPos,intnMaxPos,BOOLbRedraw=TRUE);功能:設(shè)置滾動塊在滾動條控件中的范圍。參數(shù):nMinPos-指定滾動塊最小滾動位置。

nMaxPos-指定滾動塊最大滾動位置。

bRedraw-重畫標(biāo)志,為TRUE時表示滾動條被重畫。5.3.5滾動條(ScrollBar)61CScrollBar::SetScrollPos用來設(shè)置當(dāng)前滾動塊在滾動條控件的位置:格式:intSetScrollPos(intnPos,BOOLbRedraw=TRUE);功能:設(shè)置當(dāng)前滾動塊在滾動條控件的位置。返回:滾動塊在滾動條控件的原位置。參數(shù):nPos-新的滾動塊位置。bRedraw-重畫標(biāo)志,為TRUE時表示滾動條被重畫。CScrollBar::SetScrollPos用來設(shè)置當(dāng)62CScrollBar::GetScrollRange用于獲得滾動范圍:格式:voidGetScrollRange(LPINTlpMinPos,LPINTlpMaxPos);功能:獲取滾動塊在滾動條控件中的范圍。參數(shù):lpMinPos-得到指向滾動塊最小滾動位置的指針。lpMaxPos-得到指向滾動塊最大滾動位置的指針。CScrollBar::GetScrollPos用來獲得當(dāng)前滾動塊在滾動條控件的位置:格式:intGetScrollPos();功能:獲得當(dāng)前滾動塊在滾動條控件的位置。CScrollBar::GetScrollRange用于獲得63

CScrollBar::ShowScrollBar成員函數(shù):格式:voidShowScrollBar(BOOLbShow=TRUE);功能:顯示/隱藏滾動條。

CScrollBar::EnableScrollBar成員函數(shù):格式:BOOLEnableScrollBar(UINTnArrowFlags=ESB_ENABLE_BOTH);功能:設(shè)置滾動條上箭頭是否為允許狀態(tài)。nArrowFlags可取以下值:

ESB_ENABLE_BOTH

兩個箭頭都為允許狀態(tài)

ESB_DISABLE_LTUP

上/左箭頭為禁止?fàn)顟B(tài)

ESB_DISABLE_RTDN

下/右箭頭為禁止?fàn)顟B(tài)

ESB_DISABLE_BOTH

兩個箭頭都為禁止?fàn)顟B(tài)CScrollBar::ShowScrollBar成員函642.WM_VSCROLL和WM_HSCROLL消息當(dāng)用戶對滾動條進(jìn)行操作時,滾動條會向父窗口發(fā)送WM_VSCROLL或WM_HSCROLL消息(分別對應(yīng)于水平滾動條和垂直滾動條)。這些消息可通過ClassWizard在滾動條的父窗口中進(jìn)行映射,并產(chǎn)生相應(yīng)的消息處理函數(shù)OnHScroll和OnVScroll,函數(shù)原型如下:afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);afx_msgvoidOnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);所使用的消息映射宏為:ON_WM_VSCROLL()/ON_WM_HSCROLL(),在映射宏中不需要指明滾動條的ID,因為所有滾動條的滾動消息都由同樣的函數(shù)處理。在OnHScroll/OnVScroll中,第二個參數(shù)nPos為滾動塊的當(dāng)前位置,第三個參數(shù)pScrollBar指明當(dāng)前滾動條的指針,第一個參數(shù)nSBCode表示滾動條上發(fā)生的動作(即滾動條控件的通知消息),可取以下值:2.WM_VSCROLL和WM_HSCROLL消息65

SB_TOP/SB_BOTTOM

已滾動到頂/底部時產(chǎn)生此消息

SB_LINEUP/SB_LINEDOWN

向上/下滾動一行時產(chǎn)生此消息

SB_PAGEDOWN/SB_PAGEUP

向上/下滾動一頁時產(chǎn)生此消息

SB_THUMBPOSITION滾動塊拖動到某位置時產(chǎn)生此消息

SB_THUMBTRACK拖動滾動塊時產(chǎn)生此消息

SB_ENDSCROLL

停止?jié)L動時產(chǎn)生此消息(用戶松開鼠標(biāo))滾動條控件的通知消息詳見P223表5.21。SB_TOP/SB_BOTTOM已滾動到頂/底部時產(chǎn)生此665.3.6滑動條和旋轉(zhuǎn)按鈕一、滑動條滑動條控件是由滑動塊(或滑桿)和可選刻度線構(gòu)成的窗口。移動滑桿時,控件將發(fā)送通知消息。(1)滑動條的風(fēng)格見教材P227表5.23。(2)滑動條的基本操作MFC的CSliderCtrl類封裝了滑動條控件的各種操作,包括范圍、位置設(shè)置和獲取等。下面對CSliderCtrl類的常用成員函數(shù)進(jìn)行介紹。5.3.6滑動條和旋轉(zhuǎn)按鈕671)設(shè)置和獲取滑動條的位置和范圍CSliderCtrl::SetPos成員函數(shù):格式:voidSetPos(intnPos);功能:設(shè)置滑動塊在滑動條控件中的當(dāng)前位置。參數(shù):nPos-新的滑動塊位置。CSliderCtrl::SetRange成員函數(shù):格式:voidSetRange(intnMin,intnMax,BOOLbRedraw=FALSE);功能:設(shè)置滑動塊在滑動條控件中的范圍(最大和最小值)。參數(shù):nMin-滑動塊的最小位置。nMax-滑動塊的最大位置。bRedraw-重畫標(biāo)志,為TRUE時表示滑動條被重畫。1)設(shè)置和獲取滑動條的位置和范圍68CSliderCtrl::GetPos成員函數(shù):格式:intGetPos();功能:獲取滑動塊在滑動條控件中的當(dāng)前位置。返回:滑動塊在滑動條控件中的當(dāng)前位置。CSliderCtrl::GetRange成員函數(shù):格式:voidGetRange(int&nMin,int&nMax);功能:獲取滑動塊在滑動條控件中的范圍(最大和最小值)。參數(shù):nMin-得到滑動塊的最小位置。nMax-得到滑動塊的最大位置。CSliderCtrl::GetPos成員函數(shù):692)設(shè)置和清除刻度線尺寸CSliderCtrl::SetTic成員函數(shù):格式:BOOLSetTic(intnTic);功能:設(shè)置在滑動條控件中刻度線的位置。返回:若刻度線被設(shè)置,則返回非0,否則返回0。參數(shù):nTic-刻度線的位置。CSliderCtrl::SetTicFreq成員函數(shù):格式:voidSetTicFreq(intnFreq);功能:設(shè)置在滑動條控件中刻度線的間隔(即疏密程度)。參數(shù):nFreq-刻度線的間隔。CSliderCtrl::ClearTics成員函數(shù):格式:voidClearTics(BOOLbRedraw=FALSE);功能:刪除滑動條控件中的刻度線。參數(shù):bRedraw-重畫標(biāo)志,為TRUE時表示選擇清除后滑動條被重畫。2)設(shè)置和清除刻度線尺寸703)設(shè)置和獲取選擇范圍CSliderCtrl::SetSelection成員函數(shù):格式:voidSetSelection(intnMin,intnMax);功能:設(shè)置滑動條

溫馨提示

  • 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

提交評論