1. 程式人生 > >VS2010-MFC(常用控件:按鈕控件Button、Radio Button和Check Box)

VS2010-MFC(常用控件:按鈕控件Button、Radio Button和Check Box)

back Owner 獲得 gets 兩種 說明 edraw 標題 操作

轉自:http://www.jizhuomi.com/software/182.html

按鈕控件簡介

按鈕控件包括命令按鈕(Button)、單選按鈕(Radio Button)和復選框(Check Box)等。命令按鈕就是我們前面多次提到的狹義的按鈕控件,用來響應用戶的鼠標單擊操作,進行相應的處理,它可以顯示文本也可以嵌入位圖。單選按鈕使用時,一般是多個組成一組,組中每個單選按鈕的選中狀態具有互斥關系,即同組的單選按鈕只能有一個被選中。

命令按鈕是我們最熟悉也是最常用的一種按鈕控件,而單選按鈕和復選框都是一種比較特殊的按鈕控件。單選按鈕有選中和未選中兩種狀態

,為選中狀態時單選按鈕中心會出現一個藍點,以標識選中狀態。一般的復選框也是有選中和未選中兩種狀態,選中時復選框內會增加一個“√”,而三態復選框(設置了BS_3STATE風格)有選中、未選中和不確定三種狀態,不確定狀態時復選框內出現一個灰色“√”。

按鈕控件會向父窗口發送通知消息,最常用的通知消息莫過於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)