• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            VC++6.0中使用復(fù)選框和單選鈕

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

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

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

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

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

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

              設(shè)置控件的Tab Order

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

              以Tab Order為序,從Group屬性為真的控件開始(包括該控件),到下一個Group屬性為真的控件結(jié)束(不包括該控件),所有的這些控件將組成一個組。對于單選鈕,同一組內(nèi)同時只能有一個處于被選中狀態(tài)。對于由資源編輯器生成的單選按鈕控件,在默認情況由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ù)指定的單選鈕的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ù)選框最常用的幾種方法。

            posted on 2008-04-12 19:23 wrh 閱讀(634) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            <2009年5月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統(tǒng)計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品成人国产午夜| 国产午夜精品理论片久久| 理论片午午伦夜理片久久| 日批日出水久久亚洲精品tv| 一本色道久久88—综合亚洲精品| 国内精品伊人久久久久av一坑 | 久久夜色精品国产噜噜亚洲AV | 久久综合色老色| 国产亚洲欧美精品久久久 | 久久久无码精品亚洲日韩软件| 久久免费99精品国产自在现线| 久久久久久精品无码人妻| 久久er国产精品免费观看8| 欧美亚洲国产精品久久高清| 欧美久久综合九色综合| 国产精品久久波多野结衣| 亚洲中文精品久久久久久不卡| 久久免费精品视频| 国产成人精品久久一区二区三区 | 99久久精品毛片免费播放| 人人狠狠综合88综合久久| 久久精品国产亚洲AV无码娇色| 婷婷久久久亚洲欧洲日产国码AV| 国产欧美久久久精品影院| 91精品久久久久久无码| 2021国产成人精品久久| 亚洲综合日韩久久成人AV| 亚洲国产成人久久综合区| 99热热久久这里只有精品68| 色综合久久久久| 久久国产精品久久| 蜜臀久久99精品久久久久久小说| 亚洲精品国产自在久久| 久久久久99精品成人片三人毛片| 亚洲日本va午夜中文字幕久久 | 久久久久AV综合网成人| 久久久亚洲AV波多野结衣| 7777精品伊人久久久大香线蕉 | 一级女性全黄久久生活片免费| 91秦先生久久久久久久| 国产高潮国产高潮久久久91 |