• <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中使用復選框和單選鈕

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

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

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

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

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

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

              設置控件的Tab Order

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

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

              具體使用單選鈕和復選框

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

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

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

              2、調用 CButton的成員函數GetCheck返回單選鈕的選中狀態。該函數的函數原型是

            int GetCheck( ) const;

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

              3、調用類CWnd的成員函數GetCheckedRadioButton返回同一組單選鈕中哪一個被選中。該成員函數原型如下:

            int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);

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

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

              例:
            UINT nSex=GetCheckedRadioButton(IDC_SEX1,IDC_SEX2); Switch(nSex) { Case IDC_SEX1: ; ……

              4、使用ClassWizard為單選鈕或復選框添加變量,來使用單選鈕或復選框

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

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

            ……
            UpdateData(TRUE);
            if(m_nSex==0) //選中‘男’
            ;
            else if(m_nSex==1) //選中‘女’
            ;
            else
            ;
            ……

              復選框的數據變量類型是BOOL,TRUE表示選中,FALSE表示未選中。例如:給復選框IDC_HOBBY1添加BOOL型變量m_hobby1,并在執行文件中加入如下代碼:

            ……
            m_hobby1=TRUE;
            UpdateData(FALSE);
            ……

              5、使用消息映射宏ON_CONTROL_RANGE

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

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

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

            ON_CONTROL_RANGE(BN_CLICKED,IDC_SEX1,IDC_SEX2,OnSexClicked)

              然后在對話框類的頭文件的AFX_MSG 塊中聲明消息處理函數,

            ……
            //{{AFX_MSG(CMyView)
            ……
            //}}AFX_MSG
             afx_msg void OnSexClicked (UINT nCmdID); 
            DECLARE_MESSAGE_MAP()
            ……
              最后,在對話框類所在CPP文件的最后插入消息處理函數,如下所示:
            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 函數判斷單選鈕或復選框是否被選中

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

              參數nIDButton為按鈕的ID。若按鈕被選擇,則函數返回1,否則返回0,若按鈕處于不確定狀態,則返回值為2。

            ……
             if(IsDlgButtonChecked(IDC_SEX1)) 
            ……

              以上是使用單選鈕和復選框最常用的幾種方法。

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

            導航

            <2011年2月>
            303112345
            6789101112
            13141516171819
            20212223242526
            272812345
            6789101112

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久亚洲精品成人av无码网站| 久久露脸国产精品| 99久久免费国产特黄| 国产精品青草久久久久福利99| 久久e热在这里只有国产中文精品99| 久久乐国产精品亚洲综合| 久久久久久伊人高潮影院| 久久久久久狠狠丁香| 99久久这里只精品国产免费| 激情伊人五月天久久综合| 日本久久中文字幕| 97精品国产97久久久久久免费| 精品国产乱码久久久久久呢| 91秦先生久久久久久久| 久久精品国产网红主播| 亚洲国产成人精品91久久久 | 99久久国产热无码精品免费 | 国产99久久久国产精品小说| 国产99久久精品一区二区| 亚洲国产成人久久一区久久| 波多野结衣中文字幕久久| 国产亚洲精久久久久久无码77777| 狠狠色噜噜狠狠狠狠狠色综合久久| 亚洲国产成人久久笫一页| 国产成人AV综合久久| 97久久久久人妻精品专区| 久久水蜜桃亚洲av无码精品麻豆| 四虎久久影院| 久久亚洲国产成人影院| 亚洲а∨天堂久久精品9966| 九九热久久免费视频| 国内精品久久久久影院网站| 亚洲狠狠综合久久| 精品国产91久久久久久久a| 久久成人国产精品二三区| 996久久国产精品线观看| 国产成人精品久久一区二区三区 | 亚洲αv久久久噜噜噜噜噜| 一本一道久久a久久精品综合| 久久综合伊人77777麻豆| 欧美日韩成人精品久久久免费看|