久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++中單選與復(fù)選按鈕的使用

 浮 生 2009-01-10

C++中單選與復(fù)選按鈕的使用

單選鈕用來表示一系列的互斥選項,這些互斥項常常被分成若干個組,,每組僅允許用戶選擇一個選項,;復(fù)選框與單選按鈕相象,不同之處是復(fù)選框代表多重選擇,,用戶可以選擇一個或多個選項,。

對話框編輯器中各組控件的對齊


按下Ctrl鍵并單擊要對齊的各個控件,同時選中,。最后選中的控件是對齊的基準(zhǔn),,仔細(xì)觀察,它周圍的8個小方框是實(shí)心的,,而其它被選控件周圍的小方框是空心的,。

在Layout菜單中選擇Make Same Size的Both,可以統(tǒng)一控件尺寸,,所選控件尺寸與基準(zhǔn)控件相同,。在Layout菜單中選擇Align的Left,可以使所有被選控件的左邊與基準(zhǔn)控件對齊,。選擇Layout菜單中Align的Space Evenly的Down,,可以使被選控件垂直間距相等,。

單選按鈕和復(fù)選框的使用
為了方便說明,我們假定創(chuàng)建了基于對話框的MFC應(yīng)用程序,,工程名為RadioAndCheckButton,。對話框資源加入兩個組框 ,第一個組框‘性別’,,內(nèi)有‘男’,,‘女’兩個單選鈕;第二個組框是‘愛好’,,內(nèi)有‘足球’‘排球’‘藍(lán)球’三個復(fù)選框,,如下表:

控件類型 ID 標(biāo)題(Caption) 其它屬性 
組框 缺省 性別 缺省 
單選鈕 IDC_SEX1 男 Group 
單選鈕 IDC_SEX2 女 缺省 
組框 缺省 愛好 缺省 
復(fù)選框 IDC_HOBBY1 足球 缺省 
復(fù)選框 IDC_HOBBY2 排球 缺省 
復(fù)選框 IDC_HOBBY3 藍(lán)球 缺省


設(shè)置控件的Tab Order

單擊Layout菜單下的Tab Order命令,設(shè)置控件的TAB鍵順序(Tab Order),,保證單選鈕的Tab Order連續(xù),。

以Tab Order為序,從Group屬性為真的控件開始(包括該控件),,到下一個Group屬性為真的控件結(jié)束(不包括該控件),所有的這些控件將組成一個組,。對于單選鈕,,同一組內(nèi)同時只能有一個處于被選中狀態(tài)。對于由資源編輯器生成的單選按鈕控件,,在默認(rèn)情況由Windows自動處理同組控件之間的互斥關(guān)系,。

具體使用單選鈕和復(fù)選框

1、調(diào)用 CButton的成員函數(shù)SetCheck設(shè)置單選鈕和復(fù)選框的選中狀態(tài),。該成員函數(shù)帶有一個類型為整形的參數(shù),,該參數(shù)為0表示清除選中按鈕的選中狀態(tài),參數(shù)為1表示設(shè)置選中按鈕的選中狀態(tài),。參數(shù)為2表示把三態(tài)復(fù)選框設(shè)為不確定狀態(tài),。

復(fù)選框的Tristate屬性:創(chuàng)建三態(tài)復(fù)選框。除了處于“選中”和“不選中”狀態(tài)外,,三態(tài)復(fù)選框還可以處于變灰狀態(tài),。通常,復(fù)選框的變灰狀態(tài)表示其選中狀態(tài)不確定,。在很多軟件的安裝程序中,,變灰往往表示僅選中該組件的一部分。

注意,,如果我們在程序中調(diào)用SetCheck設(shè)置同一組中某一單選鈕為選中狀態(tài),,并不意味著同時清除同一組中其它單選鈕的選中狀態(tài)。否則,,將導(dǎo)致同一組中的兩個按鈕同時處于選中狀態(tài),。這是應(yīng)該避免的。因此,如果我們通過代碼改變了單選鈕的選中狀態(tài),,一定要記得同時清除同組的其它單選鈕的選中狀態(tài),。

2、調(diào)用 CButton的成員函數(shù)GetCheck返回單選鈕的選中狀態(tài),。該函數(shù)的函數(shù)原型是

int GetCheck( ) const;

返回值可以是0,、1、2,,分別代表按鈕處于未選中狀態(tài),、選中狀態(tài)或中間狀態(tài)(對三態(tài)復(fù)選框而言)。

3,、調(diào)用類CWnd的成員函數(shù)GetCheckedRadioButton返回同一組單選鈕中哪一個被選中,。該成員函數(shù)原型如下:

int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);

第一個參數(shù)nIDFirstButton是同一組中的第一個單選鈕控件的ID,nIDLastButton是同一組中最后一個單選鈕控件的ID,。成員函數(shù)GetCheckedRadioButton返回指定組中所選中的單選鈕的ID,,如果沒有按扭被選中,則返回0,。

注意,,若干個單選鈕是否屬于同一組是以其Tab順序來排定的,而GetCheckedRadioButton函數(shù)是以ID順序來檢查按鈕的選定狀態(tài)的,。因此,,如果傳遞給函數(shù)GetCheckedRadioButton的第一個參數(shù)的值大于第二個參數(shù)的值時,其返回值總是為0,,而事實(shí)上由這兩個參數(shù)指定的單選鈕的Tab順序可能恰恰相反,。因此,一般情況下我們應(yīng)該盡量保證同一組單選鈕的資源ID是連續(xù)遞增的,。通常這些資源ID是在頭文件Resource.h中定義的,。如果你同一組的單選鈕不是一次創(chuàng)建的,那么它們的資源ID可能不是連續(xù)遞增的,,甚至可能是相反的,。我們可以手動的修改資源頭文件中的宏定義,以保證GetCheckedRadioButton函數(shù)得到正確的結(jié)果,。

例:
UINT nSex=GetCheckedRadioButton(IDC_SEX1,IDC_SEX2);
Switch(nSex)
{
Case IDC_SEX1:
;
……
4,、使用ClassWizard為單選鈕或復(fù)選框添加變量,來使用單選鈕或復(fù)選框

一般,,一組單選按鈕的第一個屬性選中Group,,注意,只有選中Group屬性的單選鈕的ID 才能在ClassWizard中添加變量,。

在對話框類給一組單選鈕加入一個成員變量,,單選鈕(組中的第一個按鈕)的數(shù)據(jù)變量類型是int,,0表示選擇了組中的第一個單選鈕,1表示選擇了第二個,,-1表示沒有一個被選中,。例如:給單選鈕IDC_SEX1添加int型變量m_nSex,并在執(zhí)行文件中加入如下代碼:

……
UpdateData(TRUE);
if(m_nSex==0) //選中‘男’
;
else if(m_nSex==1) //選中‘女’
;
else
;
……
復(fù)選框的數(shù)據(jù)變量類型是BOOL,,TRUE表示選中,,F(xiàn)ALSE表示未選中。例如:給復(fù)選框IDC_HOBBY1添加BOOL型變量m_hobby1,,并在執(zhí)行文件中加入如下代碼:

……
m_hobby1=TRUE;
UpdateData(FALSE);
……
5,、使用消息映射宏ON_CONTROL_RANGE

單選鈕和復(fù)選框都可以響應(yīng)BN_CLICKED消息,如果一組中有多個單選鈕,,分別創(chuàng)建消息處理函數(shù)就比較麻煩了,,利用MFC的消息映射宏ON_CONTROL_RANGE可以避免這種麻煩,該映射宏把多個ID連續(xù)的控件發(fā)出的消息映射到同一個處理函數(shù)上,,這樣,,我們只要編寫一個消息處理函數(shù)就可以對一組單選鈕的BN_CLICKED消息作出響應(yīng),ClassWizard不支持該宏,,必須手工創(chuàng)建,。

ON_CONTROL_RANGE消息映射宏的第一個參數(shù)是控件消息碼,第二和第三個參數(shù)分別指明了一組連續(xù)的控件ID中的頭一個和最后一個ID,,最后一個參數(shù)是消息處理函數(shù)名。注意,,起始,、 終止ID號必須是連續(xù)的,如果不能確定該組控件的ID是否是連續(xù),,請用View->Resource Symbols…命令檢查控件的ID值,,如果發(fā)現(xiàn)兩個ID是不連續(xù)的,讀者可以改變對ID的定義值使之連續(xù),,但要注意改動后的值不要與別的ID值發(fā)生沖突,。

在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP之間 //}}AFX_MSG_MAP之后加入

ON_CONTROL_RANGE(BN_CLICKED,IDC_SEX1,IDC_SEX2,OnSexClicked)
然后在對話框類的頭文件的AFX_MSG 塊中聲明消息處理函數(shù),

……
//{{AFX_MSG(CMyView)
……
//}}AFX_MSG
 afx_msg void OnSexClicked (UINT nCmdID); 
DECLARE_MESSAGE_MAP()
……
最后,,在對話框類所在CPP文件的最后插入消息處理函數(shù),,如下所示:


CRadioAndCheckButtonDialog:: OnSexClicked,
 void CRadioAndCheckButtonDialog:: OnSexClicked (UINT nCmdID)  
 { 
……
switch(nID)
{
    case IDC_SEX1:
     AfxMessageBox("IDC_SEX1");
        break;
       case IDC_SEX2:
         AfxMessageBox("IDC_SEX2");
         break;
……
}          
6,、使用IsDlgButtonChecked 函數(shù)判斷單選鈕或復(fù)選框是否被選中

CWnd::IsDlgButtonChecked函數(shù),,用來判斷單選按鈕或檢查框是否被選擇,該函數(shù)的聲明為

UINT IsDlgButtonChecked(int nIDButton) const;
參數(shù)nIDButton為按鈕的ID,。若按鈕被選擇,,則函數(shù)返回1,,否則返回0,若按鈕處于不確定狀態(tài),,則返回值為2,。

……
 if(IsDlgButtonChecked(IDC_SEX1)) 
……
以上是使用單選鈕和復(fù)選框最常用的幾種方法。

----------------------------------------------------------------------------------------------------------------------------------

MFC的話,假設(shè)你有幾個單選按鈕,ID分別是Radio_1 Radio_2: 
CButton* theradio = (CButton*) GetDlgItem(Radio_1); 
bool checked 1 = theradio -> GetCheck(); 
theradio = (CButton*) GetDlgItem(Radio_2); 
bool checked 2 = theradio -> GetCheck(); 

這2個布爾值就表示Radio_1和Radio_2是否被選擇. 
如果有大量單選按鈕,不必一個一個檢查,用下面這個static函數(shù) 
int buffer; 
CButton::CheckRadioButtons( radio_1, radio_10, buffer) 
buffer就會獲得這10個按鈕中被選中的那個的ID.

VC中Radio控件的用法
2007-10-25 09:25

關(guān)鍵詞: VC    Radio                                           

先為對話框加上2個radio button,,分別是Radio1和Radio2,。

問題1:如何讓Radio1或者Radio2默認(rèn)選上?如何知道哪個被選上了,?

關(guān)鍵是選上,,“默認(rèn)”只要放在OnInitDialog()即可。三種方法可以讓它選上,,
第一種:
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//選上
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不選上
((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck();返回1表示選上,,0表示沒選上
第二種:
關(guān)聯(lián)一個congtrol型變量(子類化),好ctrl+W(即打開classwizard),點(diǎn)開 Member Variables,,咦,?怎么沒有IDC_RADIO1這個ID?原來是沒有分組,。因為radio button通常都是成組使用的,,在一組里面是互斥的。取消,,回到對話框資源面板,,右鍵Radio1查看屬性把Group選上,那么,,Radio1和Radio2就是一組了(怎么知道他們是一組的,?后面說)。此時,,就可以為Radio1增加一congtrol型變量m_ctrlRadio1了,。如下:
m_ctrlRadio1.SetCheck(TRUE);
同樣可以使用GetCheck()獲取狀態(tài)。

第三種:
關(guān)聯(lián)一個int型變量(同樣需要先分組)m_nRadio1,,打開對話框構(gòu)造函數(shù),,你會發(fā)現(xiàn)有:
m_nRadio1 = -1;m_nRadio1別賦值-1表示哪個都沒有選上。如果你把-1改成0,,就會發(fā)現(xiàn)Radio1默認(rèn)被選上了,,依此類推,m_nRadio1的值為1就是第二個被選上了(這里同樣有問題,,哪個是第一個,?哪個是第二個?),。獲取狀態(tài)很簡單,,UpdateData(TRUE)后判斷m_nRadio1的值即可,。

問題2:如何使用多組?

多組和一組是一樣的使用,,只要搞清楚哪個是哪一組的就行了,。再為對話框添加Radio3和Radio4。很簡單,,先為這些Radio Button排個順序,,就是排列他們的TAB ORDER。在對話框資源面板上Ctrl+D,,然后按你自己的理想順序用鼠標(biāo)逐個點(diǎn)擊就可以了,。不妨假設(shè)Radio1、Radio2,、Radio3,、Radio4分別是1、2,、3,、4。Radio1和Radio3都選上Group屬性,,那么,,1、2是一組,,3,、4是另外一組,因為分組的原則是在選上Group屬性的這一個開始直到碰到下一個選上Group屬性的,。你不妨再Ctrl+D,,令Radio1、Radio2,、Radio3、Radio4分別是1,、3,、2、4,,那么Radio1和Radio3是一組,,如果m_nRadio1=1,此時是Radio3被選上而不是Radio2被選上。分好了組就分別使用它們吧,。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多