因為私人問題,雞啄米暫停更新了幾天,首先向關注雞啄米動態的朋友說一聲抱歉。

       言歸正傳,雞啄米上一節中講了編輯框的用法,本節繼續講解常用控件--按鈕控件的使用。

       按鈕控件簡介

       按鈕控件包括命令按鈕(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。

 VS2010/MFC編程入門之二十二(常用控件:按鈕控件Button、Radio Button和Check Box)

       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的使用基礎就介紹到此,下一節中雞啄米將舉實例為大家演示各種按鈕控件的使用方法,希望大家能繼續關注。

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.9385095.live/software/182.html
2012年6月2日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:14