久久无码高潮喷水抽搐,极品馒头泬19p,久久人人爽精品玩人妻av,精品国产成人国产在线视,精品视频一区二区三区在线观看

最新更新最新專題

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

mfc按鈕控件ppt下載

素材大。
880.5 KB
素材授權(quán):
免費(fèi)下載
素材格式:
.ppt
素材上傳:
chenrong
上傳時(shí)間:
2018-04-13
素材編號(hào):
190743
素材類別:
課件PPT

素材預(yù)覽

mfc按鈕控件ppt

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

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

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

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

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

PPT分類Classification

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

黑ICP備2025041396號(hào)-1