VS2010-MFC(常用控件:按鈕控件Button、Radio Button和Check Box)
轉自:http://www.jizhuomi.com/software/182.html
按鈕控件簡介
按鈕控件包括命令按鈕(Button)、單選按鈕(Radio Button)和復選框(Check Box)等。命令按鈕就是我們前面多次提到的狹義的按鈕控件,用來響應用戶的鼠標單擊操作,進行相應的處理,它可以顯示文本也可以嵌入位圖。單選按鈕使用時,一般是多個組成一組,組中每個單選按鈕的選中狀態具有互斥關系,即同組的單選按鈕只能有一個被選中。
命令按鈕是我們最熟悉也是最常用的一種按鈕控件,而單選按鈕和復選框都是一種比較特殊的按鈕控件。單選按鈕有選中和未選中兩種狀態
按鈕控件會向父窗口發送通知消息,最常用的通知消息莫過於BN_CLICKED和BN_DOUBLECLICKED了。用戶在按鈕上單擊鼠標時會向父窗口發送BN_CLICKED消息,雙擊鼠標時發送BN_DOUBLECLICKED消息。
按鈕控件的創建
MFC提供了CButton類封裝按鈕控件的所有操作。
之前的教程中,我們是在對話框模板上直接添加的按鈕控件資源,但某些特殊情況下需要我們動態創建按鈕控件,即通過CButton類的成員函數Create來創建按鈕。下面是Create函數的原型:
virtual BOOL Create(
LPCTSTR lpszCaption,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
參數說明:
lpszCaption:指定按鈕控件顯示的文本。
dwStyle:指定按鈕控件的風格,可以設置為以下按鈕風格的任意組合。
BS_AUTOCHECKBOX :同BS_CHECKBOX,不過單擊鼠標時按鈕會自動反轉
BS_AUTORADIOBUTTON: 同BS_RADIOBUTTON,不過單擊鼠標時按鈕會自動反轉
BS_AUTO3STATE :同BS_3STATE,不過單擊按鈕時會改變狀態
BS_CHECKBOX:指定在矩形按鈕右側帶有標題的選擇框
BS_DEFPUSHBUTTON:指定默認的命令按鈕,這種按鈕的周圍有一個黑框,用戶可以按回車鍵來快速選擇該按鈕
BS_GROUPBOX:指定一個組框
BS_LEFTTEXT:使控件的標題顯示在按鈕的左邊
BS_OWNERDRAW:指定一個自繪式按鈕
BS_PUSHBUTTON:指定一個命令按鈕
BS_RADIOBUTTON:指定一個單選按鈕,在圓按鈕的右邊顯示正文
BS_3STATE:同BS_CHECKBOX,不過控件有3 種狀態—選擇、未選擇和變灰
當然,除了以上列出的風格,一般還會為按鈕設置WS_CHILD、WS_VISIBLE和WS_TABSTOP等風格,WS_TABSTOP風格使按鈕控件具有tab停止屬性,即按tab鍵切換焦點控件時能夠將焦點停在按鈕控件上。創建一組單選按鈕時,第一個按鈕的風格應設置為WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON,其他單選按鈕的風格應為WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,不包含WS_TABSTOP和WS_GROUP。
在對話框模板上直接添加按鈕控件時,它的屬性中包含了上述風格,例如,復選框的Tri_state屬性實際上代表的就是BS_3STATE風格。
剩下的三個參數與靜態文本框的Create函數中的相應參數類似,大家可以參考前面靜態文本框的講解,也可以查閱MSDN。
CButton類的主要成員函數
下面是CButton類的一些主要的成員函數,至於其他的函數大家可以在MSDN中查看。
HBITMAP SetBitmap(HBITMAP hBitmap);
設置要在按鈕中顯示的位圖。參數hBitmap為位圖的句柄。返回值為按鈕原來位圖的句柄。
HBITMAP GetBitmap( ) const;
獲取之前由SetBitmap函數設置的按鈕位圖的句柄。
void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);
設置按鈕的風格。參數nStyle指定按鈕的風格,bRedraw指定按鈕是否重繪,為TRUE則重繪,否則不重繪,默認為重繪。
UINT GetButtonStyle( ) const;
獲取按鈕控件的風格。
void SetCheck(int nCheck);
設置按鈕的選擇狀態。參數nCheck為0表示未選中狀態,1表示選中狀態,2表示不確定狀態(僅用於復選框)。
int GetCheck( ) const;
獲取按鈕的選擇狀態。返回值的意義同SetCheck函數的nCheck參數。
HCURSOR SetCursor(HCURSOR hCursor);
設置要顯示到按鈕上的光標圖。參數hCursor指定了光標的句柄。返回值為按鈕原來光標的句柄。
HCURSOR GetCursor( );
獲取之前由SetCursor設置的光標的句柄。
HICON SetIcon(HICON hIcon);
設置要在按鈕上顯示的圖標。參數hIcon指定了圖標的句柄。返回值為按鈕原來圖標的句柄。
HICON GetIcon( ) const;
獲取之前由SetIcon設置的圖標的句柄。
void SetState(BOOL bHighlight);
設置按鈕的高亮狀態。參數bHighlight指定按鈕是否高亮顯示,非0則高亮顯示,否則取消高亮顯示狀態。
UINT GetState( ) const;
獲取按鈕控件的選擇狀態、高亮狀態和焦點狀態。我們可以通過將返回值與各個掩碼相與來獲得各種狀態值,掩碼與對應的相與結果說明如下:
掩碼0x0003:用來獲取單選按鈕或復選框的狀態。相與結果為0表示未選中,1表示被選中,2表示不確定狀態(僅用於復選框)。
掩碼0x0004:用來判斷按鈕是否是高亮顯示。相與結果為非0值表示按鈕是高亮顯示的。當單擊按鈕並按住鼠標左鍵時,按鈕會呈高亮顯示。
掩碼0x0008:相與結果為非零值表示按鈕擁有輸入焦點。
下面再列出幾個繼承自CWnd類的成員函數,通過它們獲取或設置按鈕控件的狀態非常方便,只需要知道按鈕的ID。
void CheckDlgButton(int nIDButton,UINT nCheck);
用來設置按鈕的選擇狀態。參數nIDButton指定了按鈕的ID。nCheck的值為0表示按鈕未被選擇,為1表示按鈕被選擇,為2表示按鈕處於不確定狀態(僅用於復選框)。
UINT IsDlgButtonChecked(int nIDButton) const;
返回復選框或單選按鈕的選擇狀態。返回值為0表示按鈕未被選擇,為1表示按鈕被選擇,為2表示按鈕處於不確定狀態(僅用於復選框)。
void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);
用來選擇組中的一個單選按鈕。參數nIDFirstButton指定了組中第一個按鈕的ID,nIDLastButton指定了組中最後一個按鈕的ID,nIDCheckButton指定了要選擇的按鈕的ID。
int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
用來獲得一組單選按鈕中被選中按鈕的ID。參數nIDFirstButton 說明了組中第一個按鈕的ID,nIDLastButton 說明了組中最後一個按鈕的ID。
另外,CWnd類的成員函數GetWindowText()、SetWindowText()等也可以用來獲取或設置按鈕中顯示的文本。
關於按鈕控件Button、Radio Button和Check Box的使用基礎就介紹到此,下一節將舉實例演示各種按鈕控件的使用方法。
VS2010-MFC(常用控件:按鈕控件Button、Radio Button和Check Box)