轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-03-01 11:41:15.180|閱讀 995 次
概述:上一節(jié)中講了編輯框的用法,本節(jié)繼續(xù)講解常用控件--按鈕控件的使用。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Xtreme Toolkit Pro是MFC開發(fā)中最全面界面控件套包,它提供了Windows開發(fā)所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
點(diǎn)擊下載最新版Xtreme Toolkit Pro
上一節(jié)中講了編輯框的用法,本節(jié)繼續(xù)講解常用控件--按鈕控件的使用。
按鈕控件簡(jiǎn)介
按鈕控件包括命令按鈕(Button)、單選按鈕(Radio Button)和復(fù)選框(Check Box)等。命令按鈕就是我們前面多次提到的狹義的按鈕控件,用來響應(yīng)用戶的鼠標(biāo)單擊操作,進(jìn)行相應(yīng)的處理,它可以顯示文本也可以嵌入位圖。單選按鈕使用時(shí),一般是多個(gè)組成一組,組中每個(gè)單選按鈕的選中狀態(tài)具有互斥關(guān)系,即同組的單選按鈕只能有一個(gè)被選中。
命令按鈕是我們最熟悉也是最常用的一種按鈕控件,而單選按鈕和復(fù)選框都是一種比較特殊的按鈕控件。單選按鈕有選中和未選中兩種狀態(tài),為選中狀態(tài)時(shí)單選按鈕中心會(huì)出現(xiàn)一個(gè)藍(lán)點(diǎn),以標(biāo)識(shí)選中狀態(tài)。一般的復(fù)選框也是有選中和未選中兩種狀態(tài),選中時(shí)復(fù)選框內(nèi)會(huì)增加一個(gè)“√”,而三態(tài)復(fù)選框(設(shè)置了BS_3STATE風(fēng)格)有選中、未選中和不確定三種狀態(tài),不確定狀態(tài)時(shí)復(fù)選框內(nèi)出現(xiàn)一個(gè)灰色“√”。
按鈕控件會(huì)向父窗口發(fā)送通知消息,最常用的通知消息莫過于BN_CLICKED和BN_DOUBLECLICKED了。用戶在按鈕上單擊鼠標(biāo)時(shí)會(huì)向父窗口發(fā)送BN_CLICKED消息,雙擊鼠標(biāo)時(shí)發(fā)送BN_DOUBLECLICKED消息。
按鈕控件的創(chuàng)建
MFC提供了CButton類封裝按鈕控件的所有操作。
之前的教程中,我們是在對(duì)話框模板上直接添加的按鈕控件資源,但某些特殊情況下需要我們動(dòng)態(tài)創(chuàng)建按鈕控件,即通過CButton類的成員函數(shù)Create來創(chuàng)建按鈕。下面是Create函數(shù)的原型:
virtual BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
參數(shù)說明:
lpszCaption:指定按鈕控件顯示的文本。
dwStyle:指定按鈕控件的風(fēng)格,可以設(shè)置為以下按鈕風(fēng)格的任意組合。
BS_AUTOCHECKBOX :同BS_CHECKBOX,不過單擊鼠標(biāo)時(shí)按鈕會(huì)自動(dòng)反轉(zhuǎn)
BS_AUTORADIOBUTTON: 同BS_RADIOBUTTON,不過單擊鼠標(biāo)時(shí)按鈕會(huì)自動(dòng)反轉(zhuǎn)
BS_AUTO3STATE :同BS_3STATE,不過單擊按鈕時(shí)會(huì)改變狀態(tài)
BS_CHECKBOX:指定在矩形按鈕右側(cè)帶有標(biāo)題的選擇框
BS_DEFPUSHBUTTON:指定默認(rèn)的命令按鈕,這種按鈕的周圍有一個(gè)黑框,用戶可以按回車鍵來快速選擇該按鈕
BS_GROUPBOX:指定一個(gè)組框
BS_LEFTTEXT:使控件的標(biāo)題顯示在按鈕的左邊
BS_OWNERDRAW:指定一個(gè)自繪式按鈕
BS_PUSHBUTTON:指定一個(gè)命令按鈕
BS_RADIOBUTTON:指定一個(gè)單選按鈕,在圓按鈕的右邊顯示正文
BS_3STATE:同BS_CHECKBOX,不過控件有3 種狀態(tài)—選擇、未選擇和變灰
當(dāng)然,除了以上列出的風(fēng)格,一般還會(huì)為按鈕設(shè)置WS_CHILD、WS_VISIBLE和WS_TABSTOP等風(fēng)格,WS_TABSTOP風(fēng)格使按鈕控件具有tab停止屬性,即按tab鍵切換焦點(diǎn)控件時(shí)能夠?qū)⒔裹c(diǎn)停在按鈕控件上。創(chuàng)建一組單選按鈕時(shí),第一個(gè)按鈕的風(fēng)格應(yīng)設(shè)置為WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON,其他單選按鈕的風(fēng)格應(yīng)為WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,不包含WS_TABSTOP和WS_GROUP。
在對(duì)話框模板上直接添加按鈕控件時(shí),它的屬性中包含了上述風(fēng)格,例如,復(fù)選框的Tri_state屬性實(shí)際上代表的就是BS_3STATE風(fēng)格。
剩下的三個(gè)參數(shù)與靜態(tài)文本框的Create函數(shù)中的相應(yīng)參數(shù)類似。
CButton類的主要成員函數(shù)
下面是CButton類的一些主要的成員函數(shù),至于其他的函數(shù)大家可以在MSDN中查看。
HBITMAP SetBitmap(HBITMAP hBitmap);
設(shè)置要在按鈕中顯示的位圖。參數(shù)hBitmap為位圖的句柄。返回值為按鈕原來位圖的句柄。
HBITMAP GetBitmap( ) const;
獲取之前由SetBitmap函數(shù)設(shè)置的按鈕位圖的句柄。
void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);
設(shè)置按鈕的風(fēng)格。參數(shù)nStyle指定按鈕的風(fēng)格,bRedraw指定按鈕是否重繪,為TRUE則重繪,否則不重繪,默認(rèn)為重繪。
UINT GetButtonStyle( ) const;
獲取按鈕控件的風(fēng)格。
void SetCheck(int nCheck);
設(shè)置按鈕的選擇狀態(tài)。參數(shù)nCheck為0表示未選中狀態(tài),1表示選中狀態(tài),2表示不確定狀態(tài)(僅用于復(fù)選框)。
int GetCheck( ) const;
獲取按鈕的選擇狀態(tài)。返回值的意義同SetCheck函數(shù)的nCheck參數(shù)。
HCURSOR SetCursor(HCURSOR hCursor);
設(shè)置要顯示到按鈕上的光標(biāo)圖。參數(shù)hCursor指定了光標(biāo)的句柄。返回值為按鈕原來光標(biāo)的句柄。
HCURSOR GetCursor( );
獲取之前由SetCursor設(shè)置的光標(biāo)的句柄。
HICON SetIcon(HICON hIcon);
設(shè)置要在按鈕上顯示的圖標(biāo)。參數(shù)hIcon指定了圖標(biāo)的句柄。返回值為按鈕原來圖標(biāo)的句柄。
HICON GetIcon( ) const;
獲取之前由SetIcon設(shè)置的圖標(biāo)的句柄。
void SetState(BOOL bHighlight);
設(shè)置按鈕的高亮狀態(tài)。參數(shù)bHighlight指定按鈕是否高亮顯示,非0則高亮顯示,否則取消高亮顯示狀態(tài)。
UINT GetState( ) const;
獲取按鈕控件的選擇狀態(tài)、高亮狀態(tài)和焦點(diǎn)狀態(tài)。我們可以通過將返回值與各個(gè)掩碼相與來獲得各種狀態(tài)值,掩碼與對(duì)應(yīng)的相與結(jié)果說明如下:
掩碼0x0003:用來獲取單選按鈕或復(fù)選框的狀態(tài)。相與結(jié)果為0表示未選中,1表示被選中,2表示不確定狀態(tài)(僅用于復(fù)選框)。
掩碼0x0004:用來判斷按鈕是否是高亮顯示。相與結(jié)果為非0值表示按鈕是高亮顯示的。當(dāng)單擊按鈕并按住鼠標(biāo)左鍵時(shí),按鈕會(huì)呈高亮顯示。
掩碼0x0008:相與結(jié)果為非零值表示按鈕擁有輸入焦點(diǎn)。
下面再列出幾個(gè)繼承自CWnd類的成員函數(shù),通過它們獲取或設(shè)置按鈕控件的狀態(tài)非常方便,只需要知道按鈕的ID。
void CheckDlgButton(int nIDButton,UINT nCheck);
用來設(shè)置按鈕的選擇狀態(tài)。參數(shù)nIDButton指定了按鈕的ID。nCheck的值為0表示按鈕未被選擇,為1表示按鈕被選擇,為2表示按鈕處于不確定狀態(tài)(僅用于復(fù)選框)。
UINT IsDlgButtonChecked(int nIDButton) const;
返回復(fù)選框或單選按鈕的選擇狀態(tài)。返回值為0表示按鈕未被選擇,為1表示按鈕被選擇,為2表示按鈕處于不確定狀態(tài)(僅用于復(fù)選框)。
void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);
用來選擇組中的一個(gè)單選按鈕。參數(shù)nIDFirstButton指定了組中第一個(gè)按鈕的ID,nIDLastButton指定了組中最后一個(gè)按鈕的ID,nIDCheckButton指定了要選擇的按鈕的ID。
int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
用來獲得一組單選按鈕中被選中按鈕的ID。參數(shù)nIDFirstButton 說明了組中第一個(gè)按鈕的ID,nIDLastButton 說明了組中最后一個(gè)按鈕的ID。
另外,CWnd類的成員函數(shù)GetWindowText()、SetWindowText()等也可以用來獲取或設(shè)置按鈕中顯示的文本。
關(guān)于按鈕控件Button、Radio Button和Check Box的使用基礎(chǔ)就介紹到此,下一節(jié)中雞啄米將舉實(shí)例為大家演示各種按鈕控件的使用方法,希望大家能繼續(xù)關(guān)注。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn