文章目錄
- check box一般是綁定到一個布爾變數.
- 通過函數直接來操作
- 訊息處理
- 未分組的使用
- 分組的使用
使用圖形介面時我們經常會碰到一些選項,如果是多選就是Check Box可以同時選多個內容,單選的話就是Radio Button.
Check Box用法簡介check box一般是綁定到一個布爾變數.
BOOL m_bShowAll;
DDX_Check(pDX,IDC_CHECK_SHOW_ALL,m_bShowAll);
m_bShowAll = FALSE; //表示沒選
m_bShowAll = TRUE;//表示選擇
UpdateData(FALSE); //更改了m_bShowAll的值後記得調用下這函數來更新頁面上的顯示.反過來如果更改了頁面上的check box選項要通過UpdateData();來更新m_bShowAll的值.
通過函數直接來操作
設定是checkbox狀態
((CButton*)GetDlgItem(IDC_CHECK_SHOW_ALL))->SetCheck(BST_CHECKED);//設定為選擇上,如果不選則是BST_UNCHECKED,要是還設為Tri_state設為未這狀態就是BST_INDETERMINATE
擷取checkbox狀態
方法1
int ret = ((CButton*)GetDlgItem(IDC_CHECK_SHOW_ALL))->GetCheck(); //0為沒選上,1為選上.未這狀態為2.在者對應的宏分別是
BST_CHECKED, BST_UNCHECKED, BST_INDETERMINATE (未定狀態只有在checkbox屬性Tri_state設為true時才有
方法2
int ret = IsDlgButtonChecked(IDC_CHECK_SHOW_ALL); //選上返回1,未選返回0,未定狀態返回2
訊息處理
當然了有時如果在選上了check box後要做些啥操作的話一般要寫下它對應的訊息處理函數.
afx_msg void OnBnClickedCheckShowAll();
ON_BN_CLICKED(IDC_CHECK_SHOW_ALL, OnBnClickedCheckShowAll)
void CCheckTest::OnBnClickedCheckShowAll(){
//添加要處理的相應操作
}
Radio Buton綁定變數時用DDX_Radio
它跟check box類似,只不過它表示單選.一次只能選一個.當其中一個選上時會自動讓其他的不選上.
Radio Button的使用中最令人迷糊的就是分組的使用.
未分組的使用
如果所有radio button的屬性設定中group都是False,這種情況是最簡單.
如果你在頁面中直接選的話,選上一個後另外的會自動變為未選.但是radio button如果像上面check box一樣使用SetCheck來設定.那可能會出現兩個同時選上的情況.所以得顯式的去讓其他的變為未選.
當然如果只是兩三個選項你手動寫代碼實現也沒啥,但如果來個幾十個,那就會讓你頭暈的.
分組的使用
先來說下Tab順序
一般的如果頁面上有很多控制項,我們最好給它們排個序,按下Ctrl + D,每個控制項上會顯示一個數字出來.你可以改變那些數字順序.確定了這些順序後.你以後可以通過Tab鍵來按順序切換到不同的控制項以獲得焦點.
分成一組
假如有4個radio button,把tab順序排一位的(假設是IDC_RADIO_SEL屬性設:groupt為True,Auto為True,TabStop為True.然後後面三個radio button的group全設為False.
IDC_RADIO_SEL綁定一個int類型變數,m_nSelection,一般在建構函式中把它初始化為0,表示分組中的第一個button選上.m_nSelection如果為1,2,3則代表後面三個button哪一個被選上.
分成多組
分組是這樣分的,從第一個radio button的group設為True的開始按Tab順序往後找,再次碰到group為True就是表示一組的結束,另外一組的開始.所以假如有R1,R2,R3,R4這4個radio button的話.想把R1,R2分一組,另兩個一組則可以這樣
先排好Tab順序,然後把R1的group設為True,R2的為False
R3的group設為True,R4的為False.
然後把R1綁定變數m_nOne;
R2綁定變數m_nTwo
訊息處理
跟check box一樣,都是ON_BN_CLICKED(ID_XXXX,FunXXX)這樣指定一個回呼函數.跟Button的訊息處理也完全一樣.