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

最新更新最新專題

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

mfc按鈕控件ppt下載

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

素材預覽

mfc按鈕控件ppt

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

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

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

mfc教程ppt:這是mfc教程ppt,包括了數(shù)據(jù)庫編程,MFC ODBC數(shù)據(jù)庫概述,MFC ODBC編程,MFC ODBC向導過程,ODBC應用編程等內容,歡迎點擊下載。

mfc編程ppt:這是mfc編程ppt,包括了MFC ODBC數(shù)據(jù)庫概述,MFC ODBC編程,MFC ODBC向導過程,ODBC應用編程等內容,歡迎點擊下載。

PPT分類Classification

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

湘ICP備2024053236號-1