国产午夜福利在线观看红一片,久久精品国产再热青青青,又硬又粗又大一区二区三区视频,中文字幕乱码免费,久久超碰97文字幕 ,中国精学生妹品射精久久

最新更新最新專題

您的位置:首頁 > ppt下載 > PPT課件 > 課件PPT > mfc按鈕控件ppt

mfc按鈕控件ppt下載

素材大小:
880.5 KB
素材授權(quán):
免費下載
素材格式:
.ppt
素材上傳:
chenrong
上傳時間:
2018-04-13
素材編號:
190743
素材類別:
課件PPT

素材預(yù)覽

mfc按鈕控件ppt

這是mfc按鈕控件ppt,包括了對話框的使用,控件的創(chuàng)建和使用方法,作業(yè)1,常用控件,通用對話框和消息對話框,作業(yè)2等內(nèi)容,歡迎點擊下載。

mfc按鈕控件ppt是由紅軟PPT免費下載網(wǎng)推薦的一款課件PPT類型的PowerPoint.

第5章對話框和常用控件 oBC紅軟基地
5.1 對話框的使用 oBC紅軟基地
5.2 控件的創(chuàng)建和使用方法oBC紅軟基地
作業(yè)1 oBC紅軟基地
5.3 常用控件 oBC紅軟基地
5.4 通用對話框和消息對話框 oBC紅軟基地
作業(yè)2oBC紅軟基地
5.1對話框的使用oBC紅軟基地
5.1.1模式和無模式對話框 oBC紅軟基地
模式對話框 oBC紅軟基地
指當(dāng)對話框被彈出,用戶必須在對話框中作出相應(yīng)的操作,在退出對話框之前,對話框所在的應(yīng)用程序不能繼續(xù)執(zhí)行。oBC紅軟基地
無模式對話框 oBC紅軟基地
指當(dāng)對話框被彈出后,一直保留在屏幕上,可繼續(xù)在對話框所在的應(yīng)用程序中進(jìn)行其它操作;需要使用對話框時,單擊對話框所在的區(qū)域即可激活。oBC紅軟基地
在創(chuàng)建和退出對話框窗口時的方式不同:oBC紅軟基地
創(chuàng)建時,模式對話框由系統(tǒng)自動分配內(nèi)存空間,對話框退出時,對話框?qū)ο笞詣觿h除。無模式對話框需要來指定內(nèi)存,退出時還需刪除對話框?qū)ο蟆?span style="display:none">oBC紅軟基地
退出時,兩種對話框所使用的終止函數(shù)不一樣。模式對話框通過調(diào)用CDialog:: EndDialog來終止,無模式對話框則是調(diào)用CWnd::DestroyWindow來終止。oBC紅軟基地
函數(shù)CDiaolog::OnOK和CDiaolog::OnCancel是調(diào)用EndDialog的,因此無模式對話框必須用DestroyWindow來重載OnOK 和OnCancel兩個函數(shù)。oBC紅軟基地
需要正確刪除表示對話框的對象。對模式對話框,在創(chuàng)建函數(shù)返回后即可刪除對象。無模式對話框不是同步的,在創(chuàng)建函數(shù)調(diào)用后立即返回,因而不知道何時刪除對象,但可以通過重載CWnd::PostNcDestroy函數(shù)并執(zhí)行清除操作。  oBC紅軟基地
5.1對話框的使用oBC紅軟基地
5.1.2使用對話框編輯器 oBC紅軟基地
打開對話框編輯器 oBC紅軟基地
 將項目工作區(qū)窗口切換到ResourceView頁面,雙擊Dialog目錄下任意一個對話框ID。或者,選擇“Insert”“Resource”菜單命令(或按快捷鍵Ctrl+R),選擇Dialog項,單擊New。 oBC紅軟基地
5.1對話框的使用oBC紅軟基地
在對話框中添加和編輯控件 oBC紅軟基地
 (1)控件添加的方法 oBC紅軟基地
 在對話框中添加一個控件的方法有下列幾種:oBC紅軟基地
在控件工具欄中單擊某控件,鼠標(biāo)箭頭在對話框內(nèi)變成“十”字形狀;在對話框指定位置單擊鼠標(biāo)左鍵,再拖動選擇框可改變控件的大小和位置。oBC紅軟基地
在控件工具欄中單擊某控件,鼠標(biāo)箭頭對話框內(nèi)變成“十”字形狀;在指定位置處單擊鼠標(biāo)左鍵不放,拖動鼠標(biāo)至滿意位置,釋放鼠標(biāo)鍵。oBC紅軟基地
用鼠標(biāo)左鍵點中控件工具欄中的某控件,并按住鼠標(biāo)鍵不放;在移動鼠標(biāo)到對話框的指定位置的過程中,會看到一個虛線框,下面帶有該控件的標(biāo)記;釋放鼠標(biāo)鍵。 oBC紅軟基地
5.1對話框的使用oBC紅軟基地
(2)單個控件的選取oBC紅軟基地
鼠標(biāo)選取oBC紅軟基地
         保證選擇按鈕(   )是被選中的,移動鼠標(biāo)指針至指定的控件上,單擊鼠標(biāo)左鍵。oBC紅軟基地
助記符選取oBC紅軟基地
         在相應(yīng)的控件上右擊。選擇“Properties”菜單項,對話框中的“Caption”框是用來輸入控件的標(biāo)題,在標(biāo)題中的某個字母之前鍵入“&”符號,則該字母就是此控件的助記符。oBC紅軟基地
Tab鍵選取oBC紅軟基地
         利用Tab鍵,可在對話框內(nèi)的控件中進(jìn)行選擇。每按一次Tab鍵依次選取對話框中的下一個控件,若按住Shift鍵,再單擊Tab鍵則選取上一個控件。 oBC紅軟基地
(3)多個控件的選取 oBC紅軟基地
在對話框內(nèi)按住鼠標(biāo)左鍵不放,拖出一個大的虛框,釋放鼠標(biāo),則被該虛框所包圍的控件都將被選取。oBC紅軟基地
先按住Shift鍵不放,用鼠標(biāo)選取控件,直到所需要的多個控件選取之后再釋放Shift鍵。若在選取時,對已選取的控件再選取一下,則該控件取消選取。oBC紅軟基地
一旦單個控件被選取后,其四周由選擇框包圍著,選擇框上還有幾個(通常是八個)藍(lán)色實心小方塊,拖動它可改變控件的大小,如圖。oBC紅軟基地
多個控件被選取后,其中只有一個控件的選擇框有幾個藍(lán)色實心小方塊,這個控件稱為主要控件,而其他控件的選擇框的小方塊是空心的。如圖。oBC紅軟基地
5.1對話框的使用oBC紅軟基地
(4)控件的移動、刪除和復(fù)制oBC紅軟基地
 當(dāng)單個控件或多個控件被選取后,按方向鍵或用鼠標(biāo)拖動控件的選擇框可移動控件。若在鼠標(biāo)拖動過程中還按住Ctrl鍵則復(fù)制控件。若按Del鍵可將選取的控件刪除。 oBC紅軟基地
(5)設(shè)定控件的Tab鍵次序oBC紅軟基地
 一是改變用Tab鍵選擇控件的次序,二是當(dāng)兩個或兩個以上的控件構(gòu)成一組時,需要它們的Tab鍵次序連續(xù)。oBC紅軟基地
 對話框內(nèi)控件的Tab鍵次序設(shè)定步驟如下:oBC紅軟基地
首先,選擇“Layout”“Tab Order”命令,或按Ctrl+D,此時每個控件的左上方都有一個數(shù)字,表明了當(dāng)前Tab鍵次序,如圖。oBC紅軟基地
其次,按新的次序依次用鼠標(biāo)單擊各個控件,新的Tab鍵即可生成。oBC紅軟基地
最后,單擊對話框或按Enter鍵結(jié)束Tab Order 方式。oBC紅軟基地
5.1對話框的使用oBC紅軟基地
對話框內(nèi)的控件的布局 oBC紅軟基地
5.1對話框的使用oBC紅軟基地
大多布置控件的命令使用前,需要選取多個控件,且“主要控件”起到了關(guān)鍵作用。多個控件的布置過程中,常需要重新設(shè)置“主要控件”。設(shè)置的方法是按住Ctrl或Shift鍵,用鼠標(biāo)單擊所要指定的控件。oBC紅軟基地
系統(tǒng)提供了網(wǎng)格、標(biāo)尺等輔助工具。在圖5.5的控件布局工具欄的最后兩個按鈕分別用作網(wǎng)格和標(biāo)尺的切換。一旦網(wǎng)格顯示,添加或移動控件時都將自動定位在網(wǎng)格線上。“Layout”菜單下的“Guide Settings”命令提供了設(shè)置網(wǎng)格單元大小的功能,如圖。oBC紅軟基地
測試對話框oBC紅軟基地
5.1對話框的使用oBC紅軟基地
5.1.3對話框的編程 oBC紅軟基地
添加對話框資源 oBC紅軟基地
 選擇“Insert”“Resource”菜單命令(或按Ctrl+R),若單擊Dialog項左邊的“+”號,將展開對話框資源的不同類型選項,如圖。  oBC紅軟基地
5.1對話框的使用oBC紅軟基地
改變對話框的屬性 oBC紅軟基地
 在對話框模板的非控件的區(qū)域內(nèi)左擊,用下列方式之一打開屬性對話框:oBC紅軟基地
選擇“View”菜單“Properties”命令或按Alt+Enter健(3種方法)。oBC紅軟基地
用鼠標(biāo)右擊對話框模板,選取Properties命令。oBC紅軟基地
 如圖,General是對話框?qū)傩缘哪J(rèn)顯示頁面,其中列有對話框的標(biāo)識符名稱框、標(biāo)題框等,具體說明如表。oBC紅軟基地
5.1對話框的使用oBC紅軟基地
向?qū)υ捒騼?nèi)添加控件 oBC紅軟基地
添加一個類 oBC紅軟基地
 在對話框模板的非控件的區(qū)域內(nèi)雙擊,如圖的對話框。 oBC紅軟基地
 單擊[OK],彈出如圖的對話框。可以為對話框資源定義一個新類名。 oBC紅軟基地
5.1對話框的使用oBC紅軟基地
消息映射 oBC紅軟基地
 單擊[OK]按鈕,出現(xiàn)“MFC ClassWizard”對話框,如圖。 oBC紅軟基地
5.1對話框的使用oBC紅軟基地
 選定IDC_BUTTON1的BN_CLICKED,雙擊左鍵或單擊[Add Function]按鈕,如圖。oBC紅軟基地
 對話框中,可以為添加的成員函數(shù)名重新定義,單擊[OK]。選定成員函數(shù)OnButton1項,雙擊左鍵或單擊[Edit Code]按鈕,在此成員函數(shù)添加代碼。 oBC紅軟基地
不同資源對象(控件、菜單命令等)的消息是不相同的。例如,按鈕控件IDC_BUTTON1的消息有兩個:BN_CLICKED和BN_DOUBLECLICKED,分別表示當(dāng)用戶單擊或雙擊該按鈕時產(chǎn)生的消息。oBC紅軟基地
一般不需要對圖5.10對話框中的[OK](確定)與[Cancel](取消)按鈕進(jìn)行消息映射,因為系統(tǒng)已自動設(shè)置了這兩個按鈕的動作,當(dāng)用戶單擊這兩個按鈕都將自動關(guān)閉對話框。 oBC紅軟基地
5.1對話框的使用oBC紅軟基地
添加用戶代碼 oBC紅軟基地
 (1)在頭文件(MyDlg.h文件)中聲明消息處理函數(shù)OnButton1:oBC紅軟基地
 protected:oBC紅軟基地
  //{{AFX_MSG(CMyDlg)oBC紅軟基地
  afx_msg void OnButton1();oBC紅軟基地
  //}}AFX_MSGoBC紅軟基地
 (2)在MyDlg.cpp源文件開頭部分的消息映射入口,添加消息映射宏:oBC紅軟基地
 BEGIN_MESSAGE_MAP(CMyDlg, CDialog)  // 消息映射開始oBC紅軟基地
  //{{AFX_MSG_MAP(CMyDlg)oBC紅軟基地
  ON_BN_CLICKED(IDC_BUTTON1, OnButton1)oBC紅軟基地
  //}}AFX_MSG_MAPoBC紅軟基地
 END_MESSAGE_MAP()    // 消息映射結(jié)束oBC紅軟基地
 表明消息及其處理函數(shù)之間的聯(lián)系。單擊按鈕控件IDC_BUTTON1時,系統(tǒng)將自動調(diào)用OnButton1函數(shù)。oBC紅軟基地
 (3)在MyDlg.cpp文件中寫入一個空的消息處理函數(shù)的模板,以便用戶填入具體代碼,如下面的框架:oBC紅軟基地
 void CMyDlg::OnButton1() oBC紅軟基地
 {oBC紅軟基地
  // TODO: Add your control notification handler code hereoBC紅軟基地
 }oBC紅軟基地
5.1對話框的使用oBC紅軟基地
在程序中使用對話框 oBC紅軟基地
 (1)利用項目工作區(qū)的ClassView標(biāo)簽項,將Ex_SDIHello.cpp源文件打開;oBC紅軟基地
 (2)在Ex_SDIHello.cpp源文件的前面加上包含類CMyDlg的頭文件:oBC紅軟基地
 #include "MyDlg.h"oBC紅軟基地
 (3)在InitInstance函數(shù)體中的“return TRUE;”語句之前添加下列代碼:oBC紅軟基地
 CMyDlg dlg;oBC紅軟基地
 dlg.DoModal();oBC紅軟基地
 DoModal是模式對話框最常用的函數(shù),它負(fù)責(zé)對話框的顯示和終止。oBC紅軟基地
 (4)編譯并運(yùn)行。在程序的一開始就出現(xiàn)用戶自己設(shè)計的對話框,單擊[Button1]按鈕將彈出“歡迎進(jìn)入對話框的設(shè)計!”的消息對話框來。oBC紅軟基地
5.2控件的創(chuàng)建和使用方法 oBC紅軟基地
5.2.1控件的創(chuàng)建方法 oBC紅軟基地
 控件的創(chuàng)建方式有以下兩種:oBC紅軟基地
 一種是在對話框模板中用編輯器指定控件,也就是說,將控件的父窗口指定為對話框,這樣做的好處是明顯的,因為當(dāng)應(yīng)用程序啟動該對話框時,Windows系統(tǒng)就會為對話框創(chuàng)建控件;而當(dāng)對話框消失時,控件也隨之清除。oBC紅軟基地
 另一種方式是將控件看作是任一窗口的子窗口,并通過調(diào)用相應(yīng)的Create函數(shù)來創(chuàng)建。oBC紅軟基地
 [例Ex_SDIHello] 在上例Ex_SDIHello的基礎(chǔ)上用子窗口方式創(chuàng)建控件。oBC紅軟基地
 (1)打開CMyDlg的頭文件MyDlg.h,添加一個按鈕類CButton指針變量:oBC紅軟基地
 class CMyDlg : public CDialogoBC紅軟基地
 {oBC紅軟基地
  // ConstructionoBC紅軟基地
  public:oBC紅軟基地
  CMyDlg(CWnd* pParent = NULL);   // standard constructoroBC紅軟基地
  CButton *m_btnWnd;//動態(tài)創(chuàng)建oBC紅軟基地
  …oBC紅軟基地
 } oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
 (2)按Ctrl+W快捷鍵打開對話框,切換到Message Maps頁面,在Object IDs列表中選定“CMyDlg”項,并在Message列表中找到WM_INITDIALOG消息,雙擊鼠標(biāo)左鍵,然后單擊[Edit Code]按鈕,添加下列代碼:oBC紅軟基地
 BOOL CMyDlg::OnInitDialog() oBC紅軟基地
 { CDialog::OnInitDialog();oBC紅軟基地
  // TODO: Add extra initialization hereoBC紅軟基地
  m_btnWnd = new CButton();  // 構(gòu)造按鈕控件oBC紅軟基地
  m_btnWnd ->Create("你好", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,CRect(20, 20, 120, 60), this, 201); // 創(chuàng)建oBC紅軟基地
  CFont *font = this->GetFont();  // 獲取對話框的字體oBC紅軟基地
  m_btnWnd->SetFont(font);   // 設(shè)置控件字體 oBC紅軟基地
  return TRUE;  // return TRUE unless you set the focus to a controloBC紅軟基地
               // EXCEPTION: OCX Property Pages should return FALSEoBC紅軟基地
 }oBC紅軟基地
 Create用來創(chuàng)建一個按鈕控件,第一個參數(shù)指定按鈕的標(biāo)題,第二個參數(shù)指定控件的風(fēng)格,第三個參數(shù)指定它在父窗口中的位置和大小,第四個參數(shù)指定父窗口指針,最后一個參數(shù)是指定該控件的標(biāo)識值。oBC紅軟基地
 (3)編譯并運(yùn)行, oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
5.2.2控件的數(shù)據(jù)交換和數(shù)據(jù)校驗 oBC紅軟基地
 例如,為CMyDlg類的按鈕控件IDC_BUTTON1添加并使用其成員變量m_MyBtn,則其相應(yīng)的過程如下:oBC紅軟基地
 (1)啟動MFC ClassWizard,切換到Member Variables頁面,如圖。oBC紅軟基地
 (2)選定Class name為CMyDlg,然后在Control IDs列表中,選定所要關(guān)聯(lián)的控件ID號IDC_BUTTON1,雙擊鼠標(biāo)左鍵或單擊[Add Variable]按鈕,如圖。 oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
 (3)在Member variable name框中填好與控件相關(guān)聯(lián)的成員變量,單擊[OK],在Control IDs列表中出現(xiàn)剛才添加的內(nèi)容。oBC紅軟基地
 需要說明的是,oBC紅軟基地
DDV/DDX技術(shù)中,允許為同一個控件關(guān)聯(lián)多個數(shù)據(jù)成員變量,但必須保證這些變量名是互不相同的,且這些變量在同一個類型不能有多個變量。oBC紅軟基地
如果添加的成員變量是一個數(shù)值類型,則在Mm_MyBtnFC ClassWizard對話框的Member Variables頁面下方還要求用戶輸入變量的范圍,這就是控件的數(shù)據(jù)校驗設(shè)置。oBC紅軟基地
(4)單擊[OK],發(fā)現(xiàn)ClassWizard作了以下三方面的修改。oBC紅軟基地
在MyDlg.h文件中,添加與控件關(guān)聯(lián)的成員變量的聲明,代碼如下:oBC紅軟基地
 // Dialog DataoBC紅軟基地
 //{{AFX_DATA(CMyDlg)oBC紅軟基地
 enum { IDD = IDD_DIALOG1 };oBC紅軟基地
 CButton m_MyBtn;//控件型變量,即CButton類的對象oBC紅軟基地
 CString m_strEdit;//字符串變量oBC紅軟基地
 //}}AFX_DATA  oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
在MyDlg.cpp文件中的CMyDlg構(gòu)造函數(shù)實現(xiàn)代碼處,添加數(shù)據(jù)成員變量的初始代碼:oBC紅軟基地
 CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)oBC紅軟基地
 : CDialog(CMyDlg::IDD, pParent)oBC紅軟基地
 { //{{AFX_DATA_INIT(CMyDlg)oBC紅軟基地
  m_strEdit = _T("");oBC紅軟基地
  //}}AFX_DATA_INIToBC紅軟基地
 }oBC紅軟基地
在MyDlg.cpp文件中的DoDataExchange函數(shù)體內(nèi),添加控件的DDX/DDV代碼。oBC紅軟基地
 void CMyDlg::DoDataExchange(CDataExchange* pDX)oBC紅軟基地
 { CDialog::DoDataExchange(pDX); // 調(diào)用此函數(shù)作為DDX的開始oBC紅軟基地
  //{{AFX_DATA_MAP(CMyDlg)oBC紅軟基地
  DDX_Control(pDX, IDC_BUTTON1, m_MyBtn);oBC紅軟基地
  DDX_Text(pDX, IDC_EDIT1, m_strEdit);oBC紅軟基地
  DDV_MaxChars(pDX, m_strEdit, 20); oBC紅軟基地
  //}}AFX_DATA_MAPoBC紅軟基地
 }oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
 (5)為一個控件定義一個關(guān)聯(lián)的數(shù)據(jù)成員變量后,就可以使用CWnd::UpdateData函數(shù)實現(xiàn)控件的控制,包括控件相關(guān)數(shù)據(jù)的輸入和讀取。在OnButton1()函數(shù)中添加如下代碼:oBC紅軟基地
 CWnd* pWnd = GetDlgItem(IDC_BUTTON1);oBC紅軟基地
 GetDlgItemText(IDC_EDIT1,m_strEdit);oBC紅軟基地
 SetDlgItemText(IDC_BUTTON1,m_strEdit);oBC紅軟基地
 運(yùn)行該程序,當(dāng)在編輯框中輸入“Hello”后,單擊[Button1]按鈕,則此時該按鈕的名稱就變成了編輯框控件中的內(nèi)容“Hello”,如圖。 oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
5.2.3控件的通用屬性 oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
5.2.4控件的消息 oBC紅軟基地
 控件的編程和使用過程中,可以向控件發(fā)送消息來完成特定的任務(wù),或者是根據(jù)控件產(chǎn)生的消息執(zhí)行自己的代碼。oBC紅軟基地
 應(yīng)用程序創(chuàng)建一般控件或公共控件之后,控件的狀態(tài)發(fā)生改變時,控件就會向其父窗口發(fā)送消息,這個消息稱為“通知消息”。對于每個消息,系統(tǒng)都會用一個MSG結(jié)構(gòu)來記錄,MSG具有下列結(jié)構(gòu):oBC紅軟基地
 typedef struct tagMSG {      // msg  oBC紅軟基地
      HWND    hwnd;    // 接收到消息的窗口句柄oBC紅軟基地
      UINT    message; // 消息oBC紅軟基地
      WPARAM wParam;   // 消息的附加信息,它的含義取決于messageoBC紅軟基地
      LPARAM  lParam; // 消息的附加信息,它的含義取決于messageoBC紅軟基地
      DWORD  time; // 消息傳送時的時間oBC紅軟基地
      POINT   pt;  // 消息傳送時,光標(biāo)的屏幕坐標(biāo)oBC紅軟基地
 } MSG; oBC紅軟基地
 對于一般控件來說,通知消息通常是一條WM_COMMAND消息,這條消息的wParam參數(shù)的低位字中含有控件標(biāo)識符,wParam參數(shù)的高位字則為通知代碼,lParam參數(shù)則是指向控件的句柄。oBC紅軟基地
5.2控件的創(chuàng)建和使用方法oBC紅軟基地
 對于公共控件,通知消息通常是一條WM_NOTIFY消息,wParam參數(shù)是發(fā)送通知消息的控件的標(biāo)識符,lParam參數(shù)是指向NMHDR結(jié)構(gòu)的指針。對于有些控件的通知消息,lParam參數(shù)是指向一個更大的結(jié)構(gòu),且結(jié)構(gòu)中的第一個成員還必須具有NMHDR結(jié)構(gòu)。 oBC紅軟基地
 對于控件的WM_COMMAND或是WM_NOTIFY消息,都可以用ClassWizard對它們加以映射。 oBC紅軟基地
 盡管控件的各自通知消息并不相同,但下列的通知消息是所有Windows控件所共有的:oBC紅軟基地
 NM_CLICK    在控件中單擊鼠標(biāo)左按鈕oBC紅軟基地
 NM_DBLCLK    在控件中雙擊鼠標(biāo)左按鈕oBC紅軟基地
 NM_RCLICK    在控件中單擊鼠標(biāo)左按鈕oBC紅軟基地
 NM_RDBLCLK    在控件中雙擊鼠標(biāo)右按鈕oBC紅軟基地
 NM_RETURN    當(dāng)控件具有輸入焦點時按下ENTER鍵oBC紅軟基地
 NM_SETFOCUS   控件得到輸入焦點oBC紅軟基地
 NM_KILLFOCUS   控件失去輸入焦點oBC紅軟基地
 NM_OUTOFMEMORY   沒有足夠的內(nèi)存使控件完成操作 oBC紅軟基地
5.3常用控件 oBC紅軟基地
 根據(jù)控件的特性和功能,一般可將其分為三類:Windows公共控件、ActiveX控件以及MFC新增的一些控件等。 oBC紅軟基地
5.3常用控件oBC紅軟基地
5.3.1靜態(tài)控件和按鈕 oBC紅軟基地
靜態(tài)控件 oBC紅軟基地
一個靜態(tài)控件是用來顯示一個字符串、框、矩形、圖標(biāo)、位圖或增強(qiáng)的圖元文件。它可以被用來作為標(biāo)簽、框或用來分隔其它的控件。一個靜態(tài)控件一般不接收用戶輸入,也不產(chǎn)生通知消息。oBC紅軟基地
在對話框編輯器的控件工具欄中,屬于靜態(tài)控件的有:靜態(tài)文本(    )、組框(    )和靜態(tài)圖片(    )三種。 oBC紅軟基地
5.3常用控件oBC紅軟基地
按鈕 oBC紅軟基地
 (1)按鍵按鈕oBC紅軟基地
 通?梢粤⒓串a(chǎn)生某個動作,執(zhí)行某個命令,常被稱為命令按鈕。兩種風(fēng)格:標(biāo)準(zhǔn)按鍵按鈕和默認(rèn)按鍵按鈕。從外觀上來說,默認(rèn)按鍵按鈕是在標(biāo)準(zhǔn)按鍵按鈕的周圍加上一個黑色邊框,這個黑色邊框表示該按鈕已接受到鍵盤的輸入焦點,只須按回車鍵就能按下該按鈕。具體設(shè)定的方法是在按鍵按鈕屬性對話框的Style頁面中選中“Default button”項。oBC紅軟基地
 (2)單選按鈕oBC紅軟基地
 外形是在文本前有一個圓圈,被選中時,就標(biāo)上一個黑點,可分為一般和自動兩種類型。自動類型中,若選中同組按鈕中的某個單選按鈕,則其余的單選按鈕的選中狀態(tài)就會清除,保證了多個選項始終只有一個被選中。oBC紅軟基地
 (3)復(fù)選框oBC紅軟基地
 外形是在文本前有一個空心方框,被選中時,復(fù)選框中就加上一個“”標(biāo)記,三態(tài)復(fù)選框還有種處于灰框狀態(tài),表示“不確定”。設(shè)定成三態(tài)復(fù)選框的方法是在復(fù)選框?qū)傩詫υ捒虻腟tyle頁面中選中“Tri-state”項。 oBC紅軟基地
5.3常用控件oBC紅軟基地
按鈕的消息 oBC紅軟基地
 常見的只有兩個:BN_CLICKED和BN_DOUBLE_CLICKED。 oBC紅軟基地
按鈕選中操作 oBC紅軟基地
最常用的按鈕操作是設(shè)置或獲取一個或多個按鈕的選中狀態(tài)。CButton類的成員函數(shù)SetCheck和GetCheck設(shè)置或獲取指定按鈕的選中狀態(tài),原型:oBC紅軟基地
 void SetCheck( int nCheck );oBC紅軟基地
 int GetCheck( ) const; oBC紅軟基地
 nCheck和GetCheck函數(shù)返回的值可以是:0表示不選中,1表示選中,2表示不確定(僅用于三態(tài)按鈕)。 oBC紅軟基地
對于多個單選按鈕的選中狀態(tài)的設(shè)置或獲取,需要使用CWnd類的成員函數(shù)CheckRadioButton和GetCheckedRadioButton,原型:oBC紅軟基地
 void CheckRadioButton( int nIDFirstButton, int nIDLastButton, int nIDCheckButton );oBC紅軟基地
 int GetCheckedRadioButton( int nIDFirstButton, int nIDLastButton );oBC紅軟基地
 nIDFirstButton和nIDLastButton指定這組單選按鈕的第一個和最后一個按鈕ID值,nIDCheckButton指定要設(shè)置選中狀態(tài)的按鈕ID值,函數(shù)GetCheckedRadioButton返回被選中的按鈕ID值。  oBC紅軟基地
5.3常用控件oBC紅軟基地
 [例Ex_Ctrls1] 用靜態(tài)圖片、單選按鈕、復(fù)選框和按鍵按鈕控件,設(shè)計界面。開始,所有單選按鈕都是灰顯的,不能選擇,選中“允許”復(fù)選框后,所有單選按鈕可以使用,選定一個單選框后,單擊[應(yīng)用]。oBC紅軟基地
 (1)用MFC AppWizard(exe)創(chuàng)建一個名為Ex_CommCtrls的基于對話框的應(yīng)用程序。在創(chuàng)建的第一步,將應(yīng)用程序類型選擇為Dialog Based,按[Finish]。自動顯示出該程序的對話框資源模板內(nèi)容。oBC紅軟基地
 (2)打開屬性對話框?qū)⑵錁?biāo)題改為“使用Windows常用控件”。oBC紅軟基地
 (3)用編輯器為對話框添加如下表所示的一些控件。oBC紅軟基地
 (4)四個單選按鈕的Tab次序應(yīng)連續(xù),從IDC_RADIO1到IDC_RADIO4依次增加。  oBC紅軟基地
 (5)按Ctrl+W快捷鍵,切換到Member Variables頁面,在Class name中選擇CEx_CommCtrlstDlg,選中復(fù)選框控件ID號IDC_CHECK1,雙擊鼠標(biāo)或單擊Add Variables按鈕。 oBC紅軟基地
5.3常用控件oBC紅軟基地
 (6)切換到ClassWizard的Messsage Maps頁面,為復(fù)選框IDC_CHECK1和按鈕IDC_BUTTON1增加BN_CLICKED的消息映射,添加代碼:oBC紅軟基地
 void CEx_CommCtrlsDlg::OnCheck1() oBC紅軟基地
 { UpdateData();oBC紅軟基地
  for (int i=0; i<4; i++)oBC紅軟基地
   GetDlgItem(IDC_RADIO1 + i)->EnableWindow(m_bEnabled);oBC紅軟基地
 }oBC紅軟基地
 void CEx_CommCtrlsDlg::OnButton1() oBC紅軟基地
 { UpdateData();oBC紅軟基地
  if (!m_bEnabled) return;oBC紅軟基地
  int nID = GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO4);oBC紅軟基地
  if (nID == IDC_RADIO1)oBC紅軟基地
  { MessageBox("1");   }oBC紅軟基地
  if (nID == IDC_RADIO2)oBC紅軟基地
  { MessageBox("2");   }oBC紅軟基地
  if (nID == IDC_RADIO3) oBC紅軟基地
  { MessageBox("3"); }oBC紅軟基地
  if (nID == IDC_RADIO4) oBC紅軟基地
  { MessageBox("4"); }oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
 (7)定位到CEx_CommCtrlsDlg::OnInitDialog函數(shù)體中,添加下列代碼:oBC紅軟基地
 BOOL CEx_CommCtrlsDlg::OnInitDialog()oBC紅軟基地
 { CDialog::OnInitDialog();oBC紅軟基地
  …oBC紅軟基地
  CheckRadioButton(IDC_RADIO1, IDC_RADIO4, IDC_RADIO1); //設(shè)置第一個單選按鈕為選中oBC紅軟基地
  OnCheck1(); oBC紅軟基地
  return TRUE;  // return TRUE  unless you set the focus to a controloBC紅軟基地
 }oBC紅軟基地
 (8)編譯并運(yùn)行。oBC紅軟基地
5.3常用控件oBC紅軟基地
5.3.2編輯框 oBC紅軟基地
編輯框的屬性和風(fēng)格 oBC紅軟基地
5.3常用控件oBC紅軟基地
 編輯框的基本操作 oBC紅軟基地
 (1)口令設(shè)置oBC紅軟基地
 默認(rèn)的口令字符是“*”,應(yīng)用程序可以用成員函數(shù)CEdit::SetPasswordChar 來定義自己的口令字符,其函數(shù)原型如下:oBC紅軟基地
 void SetPasswordChar( TCHAR ch ); oBC紅軟基地
 (2)選擇文本oBC紅軟基地
 用鼠標(biāo)來選擇文本的操作方法:在要選擇的文本的一端按下鼠標(biāo)左鍵并拖動鼠標(biāo),到另一端釋放鼠標(biāo)鍵。oBC紅軟基地
 用鍵盤來選擇文本的方法:在按光標(biāo)方向移動鍵的同時,按住Shift鍵。oBC紅軟基地
 應(yīng)用程序中可以通過編程選擇文本,需要通過調(diào)用成員函數(shù)CEdit::SetSel 來實現(xiàn)。與該函數(shù)相對應(yīng)的還有CEdit::GetSel和CEdit::ReplaceSel,分別用來獲取編輯框中選擇的開始和結(jié)束的位置以及替換被選擇的文本。oBC紅軟基地
 (3)設(shè)置編輯框的頁面邊距oBC紅軟基地
 設(shè)置編輯框的頁面邊距可以使文本在編輯框顯示更具滿意效果,應(yīng)用程序可通過調(diào)用成員函數(shù)CEdit::SetMargins來實現(xiàn),函數(shù)原型:oBC紅軟基地
 void SetMargins( UINT nLeft, UINT nRight );oBC紅軟基地
 (4)剪帖板操作oBC紅軟基地
 編輯框自動支持文本的復(fù)制、粘貼、剪切的鍵盤操作,對應(yīng)的快捷健為Ctrl+C、Ctrl+V和Ctrl+X。若應(yīng)用程序調(diào)用CEdit::Undo函數(shù)時,還可撤消當(dāng)前的操作,再調(diào)用一次該函數(shù),則恢復(fù)剛才的操作。   oBC紅軟基地
5.3常用控件oBC紅軟基地
(5)獲取多行編輯框文本oBC紅軟基地
 一種是使用DDX/DDV,將編輯框控件所關(guān)聯(lián)的變量類型選定為CString后,則不管多行編輯框的文本有多少都可用此變量來保存。這種方法不能單獨獲得多行編輯框中的某一行文本。oBC紅軟基地
 另一種方法是使用編輯框CEdit類的相關(guān)成員函數(shù)來獲取文本。例如,下面的代碼將顯示編輯框中第二行的文本內(nèi)容:oBC紅軟基地
 char str[100];oBC紅軟基地
 if (m_Edit.GetLineCount()>=2) // 判斷多行編輯框的文本是否有兩行以上oBC紅軟基地
 { int nChars;oBC紅軟基地
  nChars = m_Edit.LineLength(m_Edit.LineIndex(1)); // 獲取第二行文本的字符個數(shù)oBC紅軟基地
 // 0表示第一行,1表示第二行,依次類推。LineIndex用于將文本行轉(zhuǎn)換成oBC紅軟基地
 // 能被LineLength識別的索引oBC紅軟基地
  m_Edit.GetLine(1,str,nChars); // 獲取第二行文本oBC紅軟基地
  str[nChars] = '\0';oBC紅軟基地
  MessageBox(str);oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
編輯框的通知消息oBC紅軟基地
 [例Ex_Ctrls2] 使用靜態(tài)文本、組框、編輯框以及按鈕等控件,設(shè)計界面。用戶在“成績1”、“成績2”和“成績3”編輯框中輸入成績后,單擊[計算平均分]按鈕,將顯示出這三個成績的平均分。oBC紅軟基地
 (1)打開前面的Ex_CommCtrls。oBC紅軟基地
 (2)向應(yīng)用程序中添加一個對話框資源,打開屬性對話框?qū)⑵錁?biāo)題改為“使用編輯框”,ID號改為IDD_EDIT。oBC紅軟基地
 (3) 用編輯器為對話框添加如下表所示的一些控件。oBC紅軟基地
 (4)雙擊對話框模板或按Ctrl+W快捷鍵,為對話框資源IDD_EDIT創(chuàng)建一個對話框類CEditDlg。  oBC紅軟基地
5.3常用控件oBC紅軟基地
 (5)打開ClassWizard的Member Variables標(biāo)簽,在Class name中選擇CEditDlg,選中所需的控件ID號,雙擊鼠標(biāo)或單擊Add Variables按鈕。依次為控件增加成員變量。 oBC紅軟基地
 (6)切換到ClassWizard的Messsage Maps標(biāo)簽頁,為CEditDlg增加WM_INITDIALOG的消息映射,并添加下列代碼:oBC紅軟基地
 BOOL CEditDlg::OnInitDialog() oBC紅軟基地
 { CDialog::OnInitDialog();oBC紅軟基地
  m_strAve = "0.00";oBC紅軟基地
  UpdateData(FALSE);// 將成員變量數(shù)據(jù)傳給控件,并在控件中顯示oBC紅軟基地
  return TRUE;  oBC紅軟基地
 }oBC紅軟基地
5.3常用控件oBC紅軟基地
 (7)用ClassWziard為按鈕IDC_BUTTON1添加BN_CLICKED的消息映射,并增加下列代碼:oBC紅軟基地
 void CEditDlg::OnButton1() oBC紅軟基地
 { UpdateData();  // 將控件顯示的數(shù)據(jù)傳給成員變量oBC紅軟基地
 double ave = (double)(m_nScore1+m_nScore2+m_nScore3)/3.0;oBC紅軟基地
 m_strAve.Format("%6.2f", ave);oBC紅軟基地
 UpdateData(FALSE);  // 將成員變量數(shù)據(jù)傳給控件并顯示oBC紅軟基地
 }oBC紅軟基地
 (8)定位到CEx_CommCtrlsDlg::OnButton1函數(shù)處,修改代碼如下:oBC紅軟基地
 if (nID == IDC_RADIO1) {oBC紅軟基地
  CEditDlg dlg;oBC紅軟基地
  dlg.DoModal();oBC紅軟基地
 }oBC紅軟基地
 (9)在Ex_CommCtrlsDlg.cpp文件的開始處,增加包含CEditDlg的頭文件。oBC紅軟基地
 #include  “EditDlg.h”oBC紅軟基地
 (10)編譯運(yùn)行并測試。oBC紅軟基地
作業(yè)oBC紅軟基地
1.P375:1,3,6,8,10oBC紅軟基地
2.P412:實驗9oBC紅軟基地
5.3常用控件oBC紅軟基地
5.3.3列表框oBC紅軟基地
列表框的風(fēng)格  oBC紅軟基地
5.3常用控件oBC紅軟基地
列表框的基本操作oBC紅軟基地
 (1)添加列表項oBC紅軟基地
 列表框創(chuàng)建時是一個空的列表,需要添加或插入一些列表項。CListBox類成員函數(shù)AddString 和InsertString用來向列表框增加列表項,原型:oBC紅軟基地
 int AddString( LPCTSTR lpszItem );oBC紅軟基地
 int InsertString( int nIndex, LPCTSTR lpszItem ); oBC紅軟基地
 CListBox的SetItemData和SetItemDataPtr能使數(shù)據(jù)和某個列表項關(guān)聯(lián)起來。oBC紅軟基地
 int SetItemData( int nIndex, DWORD dwItemData );oBC紅軟基地
 int SetItemDataPtr( int nIndex, void* pData ); oBC紅軟基地
 (2)刪除列表項 oBC紅軟基地
 CListBox類成員函數(shù)DeleteString和ResetContent分別用來刪除指定的列表項和清除列表框所有項目。它們的函數(shù)原型如下:oBC紅軟基地
 int DeleteString( UINT nIndex ); // nIndex指定要刪除的列表項的索引oBC紅軟基地
 void ResetContent( );oBC紅軟基地
 若在添加列表項時使用SetItemDataPtr函數(shù),不要忘記在進(jìn)行刪除操作時及時將關(guān)聯(lián)數(shù)據(jù)所占的內(nèi)存空間釋放出來。oBC紅軟基地
5.3常用控件oBC紅軟基地
 (3)查找列表項oBC紅軟基地
 CListBox類成員函數(shù)FindString 和FindStringExact分別用來在列表框中查找所匹配的列表項,其中FindStringExact的查找精度最高。oBC紅軟基地
 int FindString( int nStartAfter, LPCTSTR lpszItem ) const;oBC紅軟基地
 int FindStringExact( int nIndexStart, LPCTSTR lpszFind ) const;oBC紅軟基地
 lpszFind和lpszItem指定要查找的列表項文本,nStartAfter和nIndexStart指定查找的開始位置,若為-1,則從頭至尾查找。查到后,這兩個函數(shù)都將返回所匹配列表項的索引,否則返回LB_ERR。oBC紅軟基地
 (4)列表框的單項選擇oBC紅軟基地
 當(dāng)選中列表框中某個列表項,可以使用CListBox::GetCurSel來獲取這個結(jié)果,與該函數(shù)相對應(yīng)的CListBox::SetCurSel 函數(shù)是用來設(shè)定某個列表項呈選中狀態(tài)(高亮顯示)。oBC紅軟基地
 int GetCurSel( ) const;  // 返回當(dāng)前選擇項的索引oBC紅軟基地
 int SetCurSel( int nSelect );oBC紅軟基地
 nSelect指定要設(shè)置的列表項索引,錯誤時這兩個函數(shù)都將返回LB_ERR。oBC紅軟基地
 若要獲取某個列表項的字符串,可使用下列函數(shù):oBC紅軟基地
 int GetText( int nIndex, LPTSTR lpszBuffer ) const;oBC紅軟基地
 void GetText( int nIndex, CString& rString ) const;oBC紅軟基地
 nIndex指定列表項索引,lpszBuffer 和rString是用來存放列表項文本。 oBC紅軟基地
5.3常用控件oBC紅軟基地
 (5)列表框的多項選擇oBC紅軟基地
 在列表框的Style屬性對話框中選中多選(Multiple)或擴(kuò)展多選(Extended)類型后,就可以在列表框中進(jìn)行多項選擇。要想獲得選中的多個選項,通過需要用ClassWizrd映射LBN_SELCHANGE消息,添加類似代碼:oBC紅軟基地
 void CListBoxDlg::OnSelchangeList1() oBC紅軟基地
 { int nCount = m_list.GetSelCount(); // 獲取用戶選中的項數(shù)oBC紅軟基地
  if (nCount != LB_ERR)oBC紅軟基地
  { int *buffer = new int[nCount]; // 開辟緩沖區(qū)oBC紅軟基地
   m_list.GetSelItems(nCount,buffer);oBC紅軟基地
   CString allStr, str;oBC紅軟基地
   allStr.Empty();   // 字符串清空oBC紅軟基地
   for (int i=0; i<nCount; i++)oBC紅軟基地
   { m_list.GetText(buffer[i], str); oBC紅軟基地
    allStr = allStr + “[” + str + “]”;    }oBC紅軟基地
   delete []buffer;   // 釋放內(nèi)存oBC紅軟基地
   // MessageBox(allStr);  // 處理獲得的文本oBC紅軟基地
  }oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
列表框的通知消息 oBC紅軟基地
 [例Ex_Ctrls3] 將一個SCORE結(jié)構(gòu)(含有三門成績的數(shù)據(jù)成員)數(shù)據(jù)和列表框中每一個學(xué)生姓名列表關(guān)聯(lián)起來。用戶單擊[添加記錄]按鈕時,學(xué)生成績記錄中的“姓名”被添加在列表框中,該學(xué)生的成績與該列表項關(guān)聯(lián)。單擊[刪除記錄]時,列表框中當(dāng)前選擇項被刪除,相關(guān)聯(lián)的數(shù)據(jù)所占的內(nèi)存空間被釋放。任何時候選中列表框中某個學(xué)生,相應(yīng)的記錄數(shù)據(jù)都被顯示出來。oBC紅軟基地
 (1)打開前面創(chuàng)建的基于對話框應(yīng)用程序程序項目Ex_CommCtrls。oBC紅軟基地
 (2)向應(yīng)用程序中添加一個對話框資源IDD_LISTBOX,標(biāo)題定為“使用列表框”,用ClassWizard為此對話框類定義為CListBoxDlg。oBC紅軟基地
 (3)刪除原來的Cancel按鈕,用編輯器為對話框添加如下表所示的控件。 oBC紅軟基地
5.3常用控件oBC紅軟基地
 (4)打開ClassWizard的Member Variables頁面,在Class name中選擇CListBoxDlg,選中所需的控件ID號,雙擊鼠標(biāo)或單擊Add Variables按鈕。 oBC紅軟基地
 (5)切換到ClassWizard的Messsage Maps標(biāo)簽頁,為按鈕IDC_DATA_ADD添加BN_CLICKED的消息映射,增加代碼:oBC紅軟基地
 void CListBoxDlg::OnDataAdd() oBC紅軟基地
 { UpdateData(TRUE);oBC紅軟基地
  if (m_strName.IsEmpty())  // 判斷m_strName是否為空oBC紅軟基地
  { MessageBox("姓名不能為空!");  oBC紅軟基地
   return; }oBC紅軟基地
  m_strName.TrimLeft();  // 裁剪m_strName左邊的空格oBC紅軟基地
  m_strName.TrimRight();  // 裁剪m_strName右邊的空格oBC紅軟基地
  if ((m_List.FindString(-1,m_strName)) != LB_ERR)oBC紅軟基地
  { MessageBox("列表框中已有相同姓名,不能添加!");  oBC紅軟基地
   return; }oBC紅軟基地
  int nIndex = m_List.AddString(m_strName); // 向列表框添加學(xué)生姓名oBC紅軟基地
  // 將該學(xué)生成績與新增的列表項關(guān)聯(lián)起來 oBC紅軟基地
  SCORE data;oBC紅軟基地
  data.score1 = m_nScore1;oBC紅軟基地
  data.score2 = m_nScore2;oBC紅軟基地
  data.score3 = m_nScore3;oBC紅軟基地
  m_List.SetItemDataPtr(nIndex, new SCORE(data)); oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
 (6)用ClassWizard為按鈕IDC_DATA_DEL添加BN_CLICKED的消息映射,增加代碼:oBC紅軟基地
 void CListBoxDlg::OnDataDel() oBC紅軟基地
 { int nIndex = m_List.GetCurSel(); // 獲得當(dāng)前選擇項的索引oBC紅軟基地
  if (nIndex != LB_ERR)oBC紅軟基地
  { m_List.DeleteString(nIndex); // 刪除當(dāng)前選擇項oBC紅軟基地
   m_strName.Empty();oBC紅軟基地
   m_nScore1 = m_nScore2 = m_nScore3 = 0;oBC紅軟基地
   UpdateData(FALSE);oBC紅軟基地
  }oBC紅軟基地
  else  MessageBox("當(dāng)前沒有選擇項或列表框操作失敗!");oBC紅軟基地
 }oBC紅軟基地
 (7)用ClassWizard為按鈕IDC_LIST1添加LBN_SELCHANGE的消息映射,增加代碼:oBC紅軟基地
 void CListBoxDlg::OnSelchangeList1() oBC紅軟基地
 { int nIndex = m_List.GetCurSel();oBC紅軟基地
  if (nIndex != LB_ERR) oBC紅軟基地
  { m_List.GetText(nIndex, m_strName);  oBC紅軟基地
   SCORE *data=(SCORE *)m_List.GetItemDataPtr(nIndex);oBC紅軟基地
   m_nScore1 = data->score1;oBC紅軟基地
   m_nScore2 = data->score2;oBC紅軟基地
   m_nScore3 = data->score3;oBC紅軟基地
   UpdateData(FALSE);oBC紅軟基地
  }oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
(8)用ClassWizard為對話框添加WM_DESTROY的消息映射,增加代碼:oBC紅軟基地
 void CListBoxDlg::OnDestroy()  // 此消息是當(dāng)對話框關(guān)閉時發(fā)送的oBC紅軟基地
 { for (int nIndex = m_List.GetCount()-1; nIndex>=0; nIndex--)oBC紅軟基地
  {// 刪除所有與列表項相關(guān)聯(lián)的SCORE結(jié)構(gòu)數(shù)據(jù),并釋放內(nèi)存oBC紅軟基地
    delete (SCORE *)m_List.GetItemDataPtr(nIndex); oBC紅軟基地
  }oBC紅軟基地
  CDialog::OnDestroy(); // 關(guān)閉對話框oBC紅軟基地
 }oBC紅軟基地
 對話框被清除時發(fā)送WM_DESTROY消息。用戶在此消息的映射函數(shù)中添加一些對象刪除代碼,以便在對話框清除前有效地釋放內(nèi)存空間。 oBC紅軟基地
5.3常用控件oBC紅軟基地
 (9)打開ListBoxDlg.h源文件,在類CListBoxDlg定義的public處添加下列代碼:oBC紅軟基地
 public:oBC紅軟基地
 struct SCOREoBC紅軟基地
 { int score1;oBC紅軟基地
  int score2;oBC紅軟基地
  int score3;oBC紅軟基地
 };oBC紅軟基地
 (10) 定位到CEx_CommCtrlsDlg::OnButton1函數(shù)處,修改代碼如下:oBC紅軟基地
 if (nID == IDC_RADIO2)oBC紅軟基地
 { CListBoxDlg dlg;oBC紅軟基地
  dlg.DoModal();oBC紅軟基地
 }oBC紅軟基地
 (11)在Ex_CommCtrlsDlg.cpp文件的開始處,增加包含CListBoxDlg的頭文件。oBC紅軟基地
 #include  “ListBoxDlg.h”oBC紅軟基地
 (12) 編譯運(yùn)行并測試。 oBC紅軟基地
5.3常用控件oBC紅軟基地
5.3.4組合框 oBC紅軟基地
組合框的風(fēng)格及類型 oBC紅軟基地
5.3常用控件oBC紅軟基地
組合框常見操作 oBC紅軟基地
 組合框的操作大致分為兩類,一類是對組合框中的列表框進(jìn)行操作,另一類是對組合框中的編輯框進(jìn)行操作。這些操作都可以調(diào)用CComboBox成員函數(shù)來實現(xiàn)。oBC紅軟基地
組合框的通知消息 oBC紅軟基地
 繪圖時還需要下列一些技巧:oBC紅軟基地
需要更新或重新繪制窗口的外觀時,應(yīng)用程序就會發(fā)送WM_PAINT消息。用ClassWizard在對話框中映射WM_PAINT消息的目的是執(zhí)行繪圖代碼。oBC紅軟基地
防止用系統(tǒng)默認(rèn)的顏色向?qū)υ捒蜻M(jìn)行重復(fù)繪制,須調(diào)用UpdateWindow函數(shù)。UpdateWindow是CWnd的無參數(shù)的成員函數(shù),目的是繞過系統(tǒng)的消息列隊,直接發(fā)送或停止發(fā)送WM_PAINT消息。窗口沒有需要更新的區(qū)域時,就停止發(fā)送。繪制完圖形時,沒有WM_PAINT消息的發(fā)送,系統(tǒng)不會用默認(rèn)的顏色對窗口進(jìn)行重復(fù)繪制。oBC紅軟基地
如果對話框中的任何部分變?yōu)闊o效時,對話框的OnPaint函數(shù)都會自動調(diào)用。可以通過調(diào)用Invalidate函數(shù)來通知系統(tǒng)此時的窗口狀態(tài)已變?yōu)闊o效,強(qiáng)制系統(tǒng)調(diào)用WM_PAINT消息函數(shù)OnPaint重新繪制。  oBC紅軟基地
5.3常用控件oBC紅軟基地
 [例Ex_Ctrls4] 根據(jù)用戶從組合框中選擇的填充樣式,在對話框中繪制一個矩形區(qū)域,如圖。 oBC紅軟基地
 (1)打開前面創(chuàng)建的基于對話框應(yīng)用程序程序項目Ex_CommCtrls。oBC紅軟基地
 (2)向應(yīng)用程序中添加一個對話框資源IDD_COMBO,標(biāo)題定為“使用組合框”,用ClassWizard為此對話框類定義為CComboDlg。oBC紅軟基地
 (3) 刪除原來的Cancel按鈕,用編輯器為對話框添加控件。  oBC紅軟基地
5.3常用控件oBC紅軟基地
 (4)打開ClassWizard的Member Variables標(biāo)簽,為組合框IDC_PATTERN增加成員變量m_Pattern,其類型為Control類的CComboBox 。oBC紅軟基地
 (5)為CComboDlg類添加一個int類型的成員變量m_nDrawPattern。oBC紅軟基地
 (6)切換到ClassWizard的Messsage Maps標(biāo)簽頁,為組合框IDC_PATTERN添加CBN_SELCHANGE(組合框中的當(dāng)前選項發(fā)生改變)的消息映射,并增加下列代碼:oBC紅軟基地
 void CComboDlg::OnSelchangePattern() oBC紅軟基地
 { int nIndex = m_Pattern.GetCurSel();// 獲得當(dāng)前選項的索引oBC紅軟基地
  if (nIndex != CB_ERR)oBC紅軟基地
  { m_nDrawPattern = m_Pattern.GetItemData(nIndex); oBC紅軟基地
       // 獲得與當(dāng)前選項相關(guān)聯(lián)的數(shù)據(jù)oBC紅軟基地
   Invalidate(); // 強(qiáng)制系統(tǒng)調(diào)用OnPaint函數(shù)重新繪制oBC紅軟基地
  }oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
 (7)用ClassWizard為對話框添加WM_PAINT的消息映射,并增加下列代碼:oBC紅軟基地
 void CComboDlg::OnPaint() oBC紅軟基地
 { CPaintDC dc(this); // device context for painting(繪圖所必須的設(shè)備環(huán)境) oBC紅軟基地
  CWnd* pWnd = GetDlgItem(IDC_DRAW);// 獲得控件IDC_DRAW的窗口指針oBC紅軟基地
  pWnd->UpdateWindow();  // 避免系統(tǒng)自動重繪oBC紅軟基地
  CDC* pDC = pWnd->GetDC(); // 獲得所需要的繪圖設(shè)備環(huán)境oBC紅軟基地
  CBrush drawBrush;  // 定義一個畫刷oBC紅軟基地
  drawBrush.CreateHatchBrush(m_nDrawPattern,RGB(0,0,0));// 創(chuàng)建畫刷oBC紅軟基地
  CBrush* pOldBrush = pDC->SelectObject(&drawBrush);  oBC紅軟基地
      // 將畫刷選入當(dāng)前設(shè)備環(huán)境中oBC紅軟基地
  CRect rcClient;   // 定義一個CRect變量oBC紅軟基地
  pWnd->GetClientRect(rcClient);  // 獲得窗口客戶區(qū)大小oBC紅軟基地
  pDC->Rectangle(rcClient);  // 用當(dāng)前畫刷繪制一個矩形區(qū)域oBC紅軟基地
  pDC->SelectObject(pOldBrush); // 恢復(fù)設(shè)備環(huán)境原來的畫刷設(shè)置oBC紅軟基地
} oBC紅軟基地
5.3常用控件oBC紅軟基地
 (8)用ClassWizard為對話框添加WM_INITDIALOG的消息映射,增加代碼:oBC紅軟基地
 BOOL CComboDlg::OnInitDialog() oBC紅軟基地
 { CDialog::OnInitDialog();oBC紅軟基地
  CString str[6] = {"水平線","豎直線","向下斜線","向上斜線","十字線","交叉線"};oBC紅軟基地
  int nIndex;oBC紅軟基地
  for (int i=0; i<6; i++)oBC紅軟基地
  {oBC紅軟基地
   nIndex = m_Pattern.AddString(str[i]);oBC紅軟基地
   m_Pattern.SetItemData(nIndex,i);oBC紅軟基地
  }oBC紅軟基地
  m_Pattern.SetCurSel(0);oBC紅軟基地
  m_nDrawPattern = 0;oBC紅軟基地
  return TRUE;  oBC紅軟基地
 }oBC紅軟基地
5.3常用控件oBC紅軟基地
 (9)定位到CEx_CommCtrlsDlg::OnButton1函數(shù)處,修改代碼如下:oBC紅軟基地
 if (nID == IDC_RADIO3)oBC紅軟基地
 {oBC紅軟基地
  CComboDlg dlg;oBC紅軟基地
  dlg.DoModal();oBC紅軟基地
 }oBC紅軟基地
 (10)在Ex_CommCtrlsDlg.cpp文件的開始處,增加包含CComboDlg的頭文件。oBC紅軟基地
 #include  “ComboDlg.h”oBC紅軟基地
  (11)編譯運(yùn)行并測試。oBC紅軟基地
5.3常用控件oBC紅軟基地
5.3.5滾動條和進(jìn)展條 oBC紅軟基地
滾動條 oBC紅軟基地
(1)滾動條的基本操作 oBC紅軟基地
在MFC的CScrollBar類中,函數(shù)SetScrollRange是用來設(shè)置滾動條的滾動范圍的,其原型如下:oBC紅軟基地
 SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE ); oBC紅軟基地
在CScrollBar類中,設(shè)置滾動塊位置操作是由SetScrollPos函數(shù)來完成的,其原型如下:oBC紅軟基地
 int SetScrollPos( int nPos, BOOL bRedraw = TRUE ); oBC紅軟基地
與SetScrollRange 和SetScrollPos相對應(yīng)的兩個函數(shù)是分別用來獲取滾動條的當(dāng)前范圍以及當(dāng)前滾動位置:oBC紅軟基地
 void GetScrollRange( LPINT lpMinPos, LPINT lpMaxPos ) ;oBC紅軟基地
 int GetScrollPos(); oBC紅軟基地
需要說明的是:在CScrollBar類的成員函數(shù)中,還可以用SetScrollInfo和GetScrollInfo來代替上面提到的四個函數(shù)。與前面的函數(shù)相比,使用SetScrollInfo函數(shù)還能使?jié)L動塊的大小隨內(nèi)容的多少而改變。oBC紅軟基地
5.3常用控件oBC紅軟基地
(2) WM_HSCROLL或WM_VSCROLL消息 oBC紅軟基地
 滾動條進(jìn)行操作時,會向父窗口發(fā)送WM_HSCROLL或WM_VSCROLL消息。通過ClassWziard在其對話框中進(jìn)行映射,產(chǎn)生相應(yīng)的消息映射函數(shù)OnHScroll和OnVScroll,函數(shù)原型:oBC紅軟基地
 afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );oBC紅軟基地
 afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar ); oBC紅軟基地
5.3常用控件oBC紅軟基地
進(jìn)展條 oBC紅軟基地
 (1)進(jìn)展條的風(fēng)格oBC紅軟基地
 打開進(jìn)展條的屬性對話框。Border指定進(jìn)展條是否有邊框,Vertical指定進(jìn)展是水平還是垂直的。Smooth表示平滑地填充進(jìn)展條。 oBC紅軟基地
 (2)進(jìn)展條的基本操作oBC紅軟基地
 基本操作:設(shè)置范圍、當(dāng)前位置、增量等。通過相關(guān)的CProgressCtrl類成員函數(shù)實現(xiàn)。oBC紅軟基地
 int SetPos( int nPos );oBC紅軟基地
 int GetPos();oBC紅軟基地
 這兩個函數(shù)分別用來設(shè)置和獲取進(jìn)展條的當(dāng)前位置。 oBC紅軟基地
 void SetRange( short nLower, short nUpper );oBC紅軟基地
 void SetRange32(int nLower, int nUpper );oBC紅軟基地
 void GetRange( int & nLower, int& nUpper );oBC紅軟基地
 分別用來設(shè)置和獲取進(jìn)展條范圍的上限和下限值。oBC紅軟基地
 int SetStep( int nStep );oBC紅軟基地
 該函數(shù)用來設(shè)置進(jìn)展條的步長并返回原來的步長。oBC紅軟基地
 int StepIt();oBC紅軟基地
 該函數(shù)將當(dāng)前位置向前移動一個步長并重畫進(jìn)展條以反映新的位置。oBC紅軟基地
5.3常用控件oBC紅軟基地
5.3.6旋轉(zhuǎn)按鈕控件和滑動條 oBC紅軟基地
旋轉(zhuǎn)按鈕控件 oBC紅軟基地
 (1)旋轉(zhuǎn)按鈕控件常用的風(fēng)格 oBC紅軟基地
5.3常用控件oBC紅軟基地
(2)旋轉(zhuǎn)按鈕控件的基本操作 oBC紅軟基地
 成員函數(shù)SetBase是用來設(shè)置其基數(shù)的,函數(shù)的原型如下:oBC紅軟基地
 int SetBase( int nBase ); oBC紅軟基地
 成員函數(shù)SetPos和SetRange設(shè)置旋轉(zhuǎn)按鈕控件的當(dāng)前位置和范圍,它們的函數(shù)原型如下:oBC紅軟基地
 int SetPos( int nPos );oBC紅軟基地
 void SetRange( int nLower, int nUpper ); oBC紅軟基地
 成員函數(shù)SetAccel和GetAccel用來設(shè)置和獲取旋轉(zhuǎn)按鈕控件的加速度。其中函數(shù)SetAccel的原型如下:oBC紅軟基地
 BOOL SetAccel( int nAccel, UDACCEL* pAccel ); oBC紅軟基地
 參數(shù)nAccel表示由pAccel指定的UDACCEL結(jié)構(gòu)的數(shù)目。pAccel指向一個UDACCEL結(jié)構(gòu)數(shù)組的指針,該數(shù)組包含了加速信息,其結(jié)構(gòu)如下:oBC紅軟基地
 typedef struct { oBC紅軟基地
      UINT  nSec;  // 位置改變前所等待的秒數(shù)。oBC紅軟基地
     UINT nInc;  // 位置增量。oBC紅軟基地
 }UDACCEL, FAR *LPUDACCEL;oBC紅軟基地
(3)旋轉(zhuǎn)按鈕控件的通知消息oBC紅軟基地
 旋轉(zhuǎn)按鈕控件的通知消息只有一個:UDN_DELTAPOS,它是當(dāng)控件的當(dāng)前數(shù)值將要改變時向其父窗口發(fā)送的。 oBC紅軟基地
5.3常用控件oBC紅軟基地
滑動條 oBC紅軟基地
(1)滑動條的風(fēng)格 oBC紅軟基地
5.3常用控件oBC紅軟基地
(2)滑動條的基本操作oBC紅軟基地
成員函數(shù)SetPos和SetRange用來設(shè)置滑動條的位置和范圍,原型如下:oBC紅軟基地
 void SetPos( int nPos );oBC紅軟基地
 void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE ); oBC紅軟基地
成員函數(shù)SetTic用來設(shè)置滑動條控件中的一個刻度線的位置。函數(shù)成功調(diào)用后返回非零值;否則返回0。函數(shù)原型如下:oBC紅軟基地
 BOOL SetTic( int nTic ); oBC紅軟基地
成員函數(shù)SetTicFreq設(shè)置顯示在滑動條中的刻度線的疏密程度。原型如下:oBC紅軟基地
 void SetTicFreq( int nFreq );oBC紅軟基地
成員函數(shù)ClearTics用來從滑動條控件中刪除當(dāng)前的刻度線。函數(shù)原型如下:oBC紅軟基地
 void ClearTics( BOOL bRedraw = FALSE );oBC紅軟基地
成員函數(shù)SetSelection用來設(shè)置一個滑動條控件中當(dāng)前選擇的開始和結(jié)束位置。其函數(shù)原型如下:oBC紅軟基地
 void SetSelection( int nMin, int nMax );oBC紅軟基地
(3)滑動條的通知消息oBC紅軟基地
 消息代碼都來自于WM_HSCROLL或WM_VSCROLL消息。  oBC紅軟基地
5.3常用控件oBC紅軟基地
 [例Ex_Ctrls5]用滾動條、滑動條和旋轉(zhuǎn)按鈕控件分別來調(diào)整RGB的三個顏色分量,根據(jù)指定的顏色填充一個矩形區(qū)域。oBC紅軟基地
 (1)打開前面創(chuàng)建的基于對話框應(yīng)用程序程序項目Ex_CommCtrls。oBC紅軟基地
 (2)向應(yīng)用程序中添加一個對話框資源IDD_SCROLL,標(biāo)題定為“使用滾動條、旋轉(zhuǎn)按鈕控件和滑動條”,用ClassWizard為此對話框類定義為CScrollDlg。oBC紅軟基地
 (3)刪除原來的Cancel按鈕,用編輯器為對話框添加如下表所示的一些控件。oBC紅軟基地
5.3常用控件oBC紅軟基地
 (4)打開ClassWizard的Member Variables標(biāo)簽,在Class name中選擇CScrollDlg,選中所需的控件ID號,雙擊鼠標(biāo)或單擊Add Variables按鈕。依次為下列控件增加成員變量。oBC紅軟基地
 (5)切換到ClassWizard的Messsage Maps標(biāo)簽頁,為編輯框IDC_EDIT1、IDC_EDIT2和IDC_EDIT3添加EN_CHANGE的消息映射,使用它們的消息處理函數(shù)名都設(shè)為OnChangeEdit,并增加下列代碼:oBC紅軟基地
 void CScrollDlg::OnChangeEdit() oBC紅軟基地
 { if (!m_bEditOK) return;oBC紅軟基地
  UpdateData();oBC紅軟基地
  m_Scroll.SetScrollPos(m_RValue);oBC紅軟基地
  m_Slider.SetPos(m_GValue);oBC紅軟基地
  Draw();oBC紅軟基地
 }  oBC紅軟基地
5.3常用控件oBC紅軟基地
(6)用ClassWizard為對話框添加WM_PAINT的消息映射,增加代碼:oBC紅軟基地
 void CScrollDlg::OnPaint() oBC紅軟基地
 { CPaintDC dc(this); // device context for painting oBC紅軟基地
  CWnd* pWnd=GetDlgItem(IDC_DRAW);oBC紅軟基地
  pWnd->UpdateWindow();oBC紅軟基地
  Draw();oBC紅軟基地
 }oBC紅軟基地
(7)用ClassWizard為對話框添加WM_INITDIALOG的消息映射,增加代碼:oBC紅軟基地
 BOOL CScrollDlg::OnInitDialog() oBC紅軟基地
 { CDialog::OnInitDialog();oBC紅軟基地
  // 設(shè)置滾動條和滑動條的范圍和當(dāng)前位置oBC紅軟基地
  m_Scroll.SetScrollRange(0,255);oBC紅軟基地
  m_Scroll.SetScrollPos(m_RValue);oBC紅軟基地
  m_Slider.SetRange(0,255);oBC紅軟基地
  m_Slider.SetPos(m_GValue);oBC紅軟基地
  // 設(shè)置旋轉(zhuǎn)按鈕的范圍oBC紅軟基地
  m_Spin.SetRange(0,255);oBC紅軟基地
  UpdateData(FALSE); // 將數(shù)據(jù)傳給控件oBC紅軟基地
  m_bEditOK = TRUE;oBC紅軟基地
  return TRUE; oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
 (8)用ClassWizard為對話框添加WM_HSCROLL的消息映射,增加代碼:oBC紅軟基地
 void CScrollDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) oBC紅軟基地
 { int nID = pScrollBar->GetDlgCtrlID();oBC紅軟基地
  if (nID == IDC_SLIDER1)   // 是滑動條產(chǎn)生水平滾動消息oBC紅軟基地
  { m_GValue = m_Slider.GetPos();// 獲得滑動條當(dāng)前的位置 }oBC紅軟基地
  if (nID == IDC_SCROLLBAR1)  // 是滾動條產(chǎn)生水平滾動消息oBC紅軟基地
  { switch(nSBCode)oBC紅軟基地
   { case SB_LINELEFT:m_RValue--; break;oBC紅軟基地
    case SB_LINERIGHT:m_RValue++; break;oBC紅軟基地
    case SB_PAGELEFT: m_RValue -= 10; break;oBC紅軟基地
    case SB_PAGERIGHT:m_RValue += 10; break;oBC紅軟基地
    case SB_THUMBTRACK:m_RValue = nPos;break;oBC紅軟基地
   }oBC紅軟基地
   if (m_RValue<0) m_RValue = 0;oBC紅軟基地
   if (m_RValue>255) m_RValue = 255;oBC紅軟基地
   m_Scroll.SetScrollPos(m_RValue);oBC紅軟基地
  }oBC紅軟基地
 UpdateData(FALSE);oBC紅軟基地
 Draw();       oBC紅軟基地
 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
 (9)將項目工作區(qū)切換到ClassView頁面,用鼠標(biāo)右擊“CScrollDlg”項,在彈出的快捷菜單中選中“Add Member Function”,將要增加的函數(shù)名設(shè)為Draw,函數(shù)類型為void,并添加下列代碼:oBC紅軟基地
 void CScrollDlg::Draw()oBC紅軟基地
 { CWnd* pWnd = GetDlgItem(IDC_DRAW);oBC紅軟基地
  CDC* pDC = pWnd->GetDC(); // 獲得窗口當(dāng)前的設(shè)備環(huán)境指針oBC紅軟基地
  CBrush drawBrush;  // 定義畫刷變量oBC紅軟基地
  drawBrush.CreateSolidBrush(RGB(m_RValue,m_GValue,m_BValue));oBC紅軟基地
  // 創(chuàng)建一個填充色畫刷。oBC紅軟基地
  // 顏色分量轉(zhuǎn)換成一個32位的RGB顏色值oBC紅軟基地
  CBrush* pOldBrush = pDC->SelectObject(&drawBrush);oBC紅軟基地
  CRect rcClient;oBC紅軟基地
  pWnd->GetClientRect(rcClient);oBC紅軟基地
  pDC->Rectangle(rcClient);oBC紅軟基地
  pDC->SelectObject(pOldBrush);oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
 (10)為CScrollDlg類添加一個BOOL型成員變量m_bEditOK,并在其構(gòu)造函數(shù)中將其初值設(shè)為FALSE。oBC紅軟基地
 (11)定位到CEx_CommCtrlsDlg::OnButton1函數(shù)處,修改代碼如下:oBC紅軟基地
 if (nID == IDC_RADIO4) oBC紅軟基地
 { CScrollDlg dlg;oBC紅軟基地
  dlg.DoModal();oBC紅軟基地
 }oBC紅軟基地
 (12)在Ex_CommCtrlsDlg.cpp文件的開始處,增加包含CScrollDlg的頭文件。oBC紅軟基地
 #include  “ScrollDlg.h”oBC紅軟基地
 (13)編譯運(yùn)行并測試。oBC紅軟基地
 在同時使用編輯框和旋轉(zhuǎn)按鈕控件時,有時會出現(xiàn)運(yùn)行錯誤。為了解決這個問題,本例使用一個辦法,即使用一個BOOL型成員變量m_bEditOK作為控制條件,使得所有初始化代碼(包括設(shè)置旋轉(zhuǎn)控件范圍)執(zhí)行后,才允許編輯框工作。oBC紅軟基地
 由于滾動條和滑動條等許多控件都能產(chǎn)生WM_HSCROLL或WM_VSCROLL消息,因此當(dāng)它們是處在同一方向(水平或垂直)時,就需要添加相應(yīng)代碼判斷消息是誰產(chǎn)生的。oBC紅軟基地
 由于滾動條中間的滾動塊在默認(rèn)時是不會停止在用戶操作的位置處的,因此需要調(diào)用SetScrollPos函數(shù)來進(jìn)行相應(yīng)位置的設(shè)定。 oBC紅軟基地
5.3常用控件oBC紅軟基地
5.3.7圖像列表和標(biāo)簽控件 oBC紅軟基地
圖像列表控件 oBC紅軟基地
(1)圖像列表的創(chuàng)建oBC紅軟基地
 由于Create函數(shù)的重載很多,故這里給出最常用的一個原型:oBC紅軟基地
 BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow ); oBC紅軟基地
(2)圖像列表的基本操作oBC紅軟基地
 常見的圖像列表的基本操作有:增加、刪除和繪制等,成員函數(shù):oBC紅軟基地
 int Add( CBitmap* pbmImage, CBitmap* pbmMask );oBC紅軟基地
 int Add( CBitmap* pbmImage, COLORREF crMask );oBC紅軟基地
 int Add( HICON hIcon ); oBC紅軟基地
BOOL Remove( int nImage );oBC紅軟基地
 該函數(shù)用來從圖像列表中刪除一個由nImage指定的圖像,oBC紅軟基地
BOOL Draw( CDC* pdc, int nImage, POINT pt, UINT nStyle );oBC紅軟基地
 該函數(shù)用來在由pt指定的位置處繪制一個圖像。 oBC紅軟基地
HICON ExtractIcon( int nImage );oBC紅軟基地
 該函數(shù)用來將nImage指定的圖像擴(kuò)展為圖標(biāo)。oBC紅軟基地
COLORREF SetBkColor( COLORREF cr );oBC紅軟基地
 該函數(shù)用來設(shè)置圖像列表的背景色,    oBC紅軟基地
5.3常用控件oBC紅軟基地
標(biāo)簽控件 oBC紅軟基地
(1)標(biāo)簽控件的風(fēng)格oBC紅軟基地
5.3常用控件oBC紅軟基地
(2)標(biāo)簽控件的基本操作 oBC紅軟基地
GetItemRect是用來獲取標(biāo)簽的邊界大小,原型如下:oBC紅軟基地
 CSize SetItemSize( CSize size ); oBC紅軟基地
 void SetPadding( CSize size );//設(shè)置標(biāo)簽和標(biāo)簽周圍的間隔   oBC紅軟基地
 int SetMinTabWidth( int cx );  oBC紅軟基地
 BOOL GetItemRect( int nItem, LPRECT lpRect ) const; oBC紅軟基地
成員函數(shù)InsertItem、DeleteItem表示在一個標(biāo)簽控件中插入、刪除某一標(biāo)簽項,DeleteAllItems刪除所有的項。原型如下:oBC紅軟基地
 BOOL InsertItem( int nItem, LPCTSTR lpszItem );oBC紅軟基地
 BOOL InsertItem( int nItem, LPCTSTR lpszItem, int nImage);oBC紅軟基地
 BOOL DeleteItem( int nItem );oBC紅軟基地
 BOOL DeleteAllItems( ); oBC紅軟基地
標(biāo)簽控件中使用圖像列表時,必須調(diào)用CTabCtrl::SetImageList函數(shù)來指定一個已創(chuàng)建的圖像列表。函數(shù)原型如下:oBC紅軟基地
 CImageList * SetImageList( CImageList * pImageList ); oBC紅軟基地
成員函數(shù)SetCurSel和GetCurSel用來設(shè)置和獲取當(dāng)前選擇的標(biāo)簽項,原型如下:oBC紅軟基地
 int SetCurSel( int nItem ); oBC紅軟基地
 int GetCurSel( ) const; oBC紅軟基地
成員函數(shù)DeselectAll用來重新設(shè)置一個標(biāo)簽控件中的項,清除任何被按下的項,函數(shù)HighlightItem是使某一個標(biāo)簽項處于高亮狀態(tài)。原型如下:oBC紅軟基地
 void DeselectAll( BOOL fExcludeFocus );oBC紅軟基地
 BOOL HighlightItem( int idItem, BOOL fHighlight = TRUE );oBC紅軟基地
(3)標(biāo)簽控件的通知消息oBC紅軟基地
5.3常用控件oBC紅軟基地
 [例Ex_Ctrls6] 使用無模式對話框來構(gòu)造某個標(biāo)簽頁面,一開始將所有的標(biāo)簽頁面創(chuàng)建好,然后根據(jù)所選擇的當(dāng)前標(biāo)簽選項決定哪個頁面需要顯示,哪個頁面需要隱藏和禁用。oBC紅軟基地
 (1)用MFC AppWizard(exe)創(chuàng)建一個基于對話框的應(yīng)用程序項目Ex_TabCtrl。oBC紅軟基地
 (2)打開屬性對話框?qū)υ捒驑?biāo)題改為“使用標(biāo)簽控件”。oBC紅軟基地
 (3) 添加一個默認(rèn)標(biāo)簽控件IDC_TAB1,調(diào)整其大小和布局。oBC紅軟基地
 (4)按Ctrl+W,打開ClassWizard對話框,切換到Member Variables頁面,在Class name中選擇CEx_TabCtrlDlg,選中標(biāo)簽控件ID號IDC_TAB1,雙擊鼠標(biāo)或單擊Add Variables按鈕,為其添加一個CTabCtrl類型的成員變量m_Tab。oBC紅軟基地
 (5)添加三個對話框資源IDD_DIALOG1、IDD_DIALOG2和IDD_DIALOG3,并用ClassWizard依次為此三個對話框類定義為CTab1Dlg、CTab2Dlg和CTab3Dlg。 oBC紅軟基地
5.3常用控件oBC紅軟基地
 (6)將上述三個對話框的屬性設(shè)為Child Style和None Border(其他默認(rèn)),且將對話框盡量縮小,如圖。 oBC紅軟基地
5.3常用控件oBC紅軟基地
 (7) 為三個對話框添加如下表所示的一些控件。oBC紅軟基地
5.3常用控件oBC紅軟基地
 (8)在ClassView中的CEx_TabCtrlDlg類名處右擊鼠鍵,從彈出的快捷菜單中選擇Add Member Variables,添加下列數(shù)據(jù)成員:oBC紅軟基地
 public:oBC紅軟基地
 CTab1Dlg   *m_pTab1Dlg;oBC紅軟基地
 CTab2Dlg  *m_pTab2Dlg;oBC紅軟基地
 CTab3Dlg   *m_pTab3Dlg;oBC紅軟基地
 CImageList    m_ImageList;oBC紅軟基地
 (9)打開Ex_TabCtrlDlg.h文件,在class CEx_TabCtrlDlg前添加下列頭文件:oBC紅軟基地
 #include "Tab1Dlg.h"oBC紅軟基地
 #include "Tab2Dlg.h"oBC紅軟基地
 #include "Tab3Dlg.h" oBC紅軟基地
5.3常用控件oBC紅軟基地
(10)在ClassView中的CEx_TabCtrlDlg類名處右擊鼠鍵,選擇Add Member Function,添加成員函數(shù)SetDlgState和DoTab,并增加下列代碼:oBC紅軟基地
 void CEx_TabCtrlDlg::SetDlgState(CWnd *pWnd, BOOL bShow)oBC紅軟基地
 { pWnd->EnableWindow(bShow); oBC紅軟基地
  if (bShow) oBC紅軟基地
  { pWnd->ShowWindow(SW_SHOW);oBC紅軟基地
   pWnd->CenterWindow(); // 居中顯示oBC紅軟基地
  }oBC紅軟基地
  else pWnd->ShowWindow(SW_HIDE);oBC紅軟基地
 }oBC紅軟基地
 void CEx_TabCtrlDlg::DoTab(int nTab)oBC紅軟基地
 { if (nTab>2) nTab = 2;  // 確定nTab值不能超過范圍oBC紅軟基地
  if (nTab<0) nTab = 0;oBC紅軟基地
  BOOL bTab[3];oBC紅軟基地
  bTab[0] = bTab[1] = bTab[2] = FALSE;oBC紅軟基地
  bTab[nTab] = TRUE;   oBC紅軟基地
  // 切換對話框的顯示和隱藏oBC紅軟基地
  SetDlgState(m_pTab1Dlg, bTab[0]);oBC紅軟基地
  SetDlgState(m_pTab2Dlg, bTab[1]);oBC紅軟基地
  SetDlgState(m_pTab3Dlg, bTab[2]);oBC紅軟基地
 } oBC紅軟基地
5.3常用控件oBC紅軟基地
 (11)用ClassWizard為IDC_TAB1映射TCN_SELCHANGE消息,添加代碼:oBC紅軟基地
 void CEx_TabCtrlDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) oBC紅軟基地
 { int nSelect = m_Tab.GetCurSel();oBC紅軟基地
  if (nSelect >= 0)oBC紅軟基地
   DoTab(nSelect);oBC紅軟基地
  *pResult = 0;oBC紅軟基地
 }oBC紅軟基地
  (12)按下Ctrl+R快捷鍵,單擊Import按鈕,從外部磁盤中調(diào)入三個圖標(biāo)文件,并取默認(rèn)的圖標(biāo)ID號IDI_ICON1、IDI_ICON2和IDI_ICON3。 oBC紅軟基地
5.3常用控件oBC紅軟基地
(13)在CEx_TabCtrlDlg::OnInitDialog中添加下列代碼:oBC紅軟基地
 BOOL CEx_TabCtrlDlg::OnInitDialog()oBC紅軟基地
 { CDialog::OnInitDialog();oBC紅軟基地
  ……oBC紅軟基地
  m_pTab1Dlg = new CTab1Dlg(); // 為無模式對話框分配空間oBC紅軟基地
  m_pTab2Dlg = new CTab2Dlg();oBC紅軟基地
  m_pTab3Dlg = new CTab3Dlg();oBC紅軟基地
  m_pTab1Dlg->Create(IDD_DIALOG1,&m_Tab); oBC紅軟基地
  m_pTab2Dlg->Create(IDD_DIALOG2,&m_Tab);oBC紅軟基地
  m_pTab3Dlg->Create(IDD_DIALOG3,&m_Tab);oBC紅軟基地
  m_ImageList.Create(16, 16, ILC_COLOR|ILC_MASK, 3, 0); // 創(chuàng)建圖像列表oBC紅軟基地
  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));oBC紅軟基地
  m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));oBC紅軟基地
  m_Tab.SetImageList(&m_ImageList); // 設(shè)置TAB控件所使用的圖像列表oBC紅軟基地
  m_Tab.InsertItem(0, "基本信息", 0);oBC紅軟基地
  m_Tab.InsertItem(1, "成績", 1);oBC紅軟基地
  m_Tab.InsertItem(2, "備注", 2);oBC紅軟基地
  m_Tab.SetMinTabWidth(80);  // 設(shè)置標(biāo)簽項的最小寬度oBC紅軟基地
  m_Tab.SetPadding(CSize(12,3)); // 設(shè)置標(biāo)簽項和圖標(biāo)周圍的間隔oBC紅軟基地
  m_Tab.SetCurSel(0);oBC紅軟基地
  DoTab(0);oBC紅軟基地
  return TRUE; } oBC紅軟基地
5.3常用控件oBC紅軟基地
  (14)用ClassWizard為CEx_TabCtrlDlg類添加WM_DESTROY的消息映射,CEx_TabCtrlDlg對話框退出時,刪除分配給無模式對話框的內(nèi)存。代碼:oBC紅軟基地
 void CEx_TabCtrlDlg::OnDestroy() oBC紅軟基地
 { CDialog::OnDestroy();oBC紅軟基地
  if (m_pTab1Dlg) delete m_pTab1Dlg;oBC紅軟基地
  if (m_pTab2Dlg) delete m_pTab2Dlg;oBC紅軟基地
  if (m_pTab3Dlg) delete m_pTab3Dlg; oBC紅軟基地
 }oBC紅軟基地
  (15)用ClassWizard為CTab1lDlg類添加WM_INITDIALOG消息的映射,增加下列代碼:oBC紅軟基地
 BOOL CTab1Dlg::OnInitDialog() oBC紅軟基地
 { CDialog::OnInitDialog();oBC紅軟基地
  CheckRadioButton(IDC_RADIO_MAN_1,IDC_RADIO_WOMAN_1,IDC_RADIO_MAN_1);oBC紅軟基地
  return TRUE;  // return TRUE unless you set the focus to a controloBC紅軟基地
               // EXCEPTION: OCX Property Pages should return FALSEoBC紅軟基地
 }oBC紅軟基地
 (16) 編譯并運(yùn)行。oBC紅軟基地
5.3常用控件oBC紅軟基地
 需要說明的是:oBC紅軟基地
標(biāo)簽頁面的切換可能還不止一種方法。例如,可以先將各個頁面的控件與標(biāo)簽控件一起事先全部地添加到對話框模板中,然后再根據(jù)標(biāo)簽控件的當(dāng)前選項確定控件的顯示和隱藏,從而達(dá)到切換的效果。oBC紅軟基地
在標(biāo)簽頁面控件操作過程中,當(dāng)按Enter鍵或Esc鍵,該頁面的對話框就會退出,標(biāo)簽頁面變成了一個空白,影響交互效果。解決這個問題的一個辦法是在各頁面的對話框中屏蔽掉Enter鍵和Esc鍵的按鍵消息,它是通過添加PreTranslateMessage函數(shù)的重載來實現(xiàn)的,如下面的代碼:oBC紅軟基地
 BOOL CTab1Dlg::PreTranslateMessage(MSG* pMsg) oBC紅軟基地
 { if (pMsg->message == WM_KEYDOWN)oBC紅軟基地
  { if (pMsg->wParam == VK_RETURN)  return TRUE;  if (pMsg->wParam == VK_ESCAPE)                return TRUE; } oBC紅軟基地
  return CDialog::PreTranslateMessage(pMsg);oBC紅軟基地
 }oBC紅軟基地
5.4通用對話框和消息對話框 oBC紅軟基地
5.4.1通用對話框 oBC紅軟基地
 Windows提供了一組標(biāo)準(zhǔn)用戶界面對話框,它們都有相應(yīng)的MFC庫中的類來支持。所有這些通用對話框類都是從一個公共的基類CCommonDialog派生而來。表列出了這些通用對話框。 oBC紅軟基地
5.4通用對話框和消息對話框oBC紅軟基地
5.4.2消息對話框 oBC紅軟基地
 是最簡單的一類對話框,只是用來顯示信息的。MFC類庫中提供相應(yīng)的函數(shù)實現(xiàn)這樣的功能,只要在程序任何地方調(diào)用它們。函數(shù)原型:oBC紅軟基地
 int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );oBC紅軟基地
 int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ); oBC紅軟基地
作業(yè)oBC紅軟基地
1.P375:12oBC紅軟基地
2.P420:實驗10oBC紅軟基地

mfc教程ppt:這是mfc教程ppt,包括了數(shù)據(jù)庫編程,MFC ODBC數(shù)據(jù)庫概述,MFC ODBC編程,MFC ODBC向?qū)н^程,ODBC應(yīng)用編程等內(nèi)容,歡迎點擊下載。

mfc編程ppt:這是mfc編程ppt,包括了MFC ODBC數(shù)據(jù)庫概述,MFC ODBC編程,MFC ODBC向?qū)н^程,ODBC應(yīng)用編程等內(nèi)容,歡迎點擊下載。

PPT分類Classification

Copyright:2009-2024 紅軟網(wǎng) rsdown.cn 聯(lián)系郵箱:rsdown@163.com

黑ICP備2025041396號-1