编程环境 VS2013,MFC
MFC中复选框checkbox控件,至少有三种方法对其进行操作,他们是利用Cbutton成员函数GetCheck和SetCheck,第二种是利用CWnd成员函数IsDlgButtonChecked,最后就是把checkbox复选框控件与BOOL型变量相关联。
一、用CButton成员函数
MFC中复选框CheckBox的基类是CButton。那么就可以用GetDlgItem来获取复选框的指针,再用Cbutton成员函数GetCheck和SetCheck来获取和设置选中状态。
获取复选框状态:
CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK_MIXI);
BOOL state = pBtn->GetCheck();
当state == FALSE时表示该复选框没有被选中;
当state == TRUE时表示该复选框被选中;
设置复选框状态:
一般复选框是通过鼠标勾选的,也可以通过函数设置其状态。
CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK1);
pBtn->SetCheck(1);
二、用CWnd成员函数
CButton是从CWnd继承来,那么就可以用IsDlgButtonChecked来获取和设置check box的状态。另外MSDN上海说明IsDlgButtonChecked还可以用于单选框Radio button。
UINT IsDlgButtonChecked( int nIDButton ) const;
nIDButton为控件ID
函数功能:
该函数可以确定某个按钮控制是否有选中标志,或者三态按钮控制是否为灰色的、选中的、或两者都不是。
返回值:
使用BS_AUTOCHECKBOX、BS_AUTORADIOBUTTON、BS_AUTO3STATE、BS_CHECKBOX、BS_RADIOBUTION或BS_3STATE样式创建的按钮的返回值可以是如下值之一:
BST_CHECKED:表示按钮被选中。
BST_INDETERMINATE:表示按钮是灰色的,即为不确定状态(只有具有BS_3STATE或BS_AUTO3STATE样式的按钮才使用该值)。
BST_UNCHECKED:表示该按钮未选中(unckecked)。如果该按钮用其他任何样式,那么返回值为零。
if ( BST_CHECKED == IsDlgButtonChecked( IDC_CHECK1 ) )
{
//IDC_CHECK1是CheckBox控件。
//check box 被选中执行相关动作
}
三、关联CButton型成员变量
复选框CheckBox控件添加一个Control类型的控件变量如:CButton m_check;
void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHECK1, m_check);
}
使能复选框:
m_check.EnableWindow(TRUE);
设置复选框状态:
m_check.SetCheck(0);//方法1
SetCheck(BST_CHECKED)效果相同
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(0);//方法2
其中IDC_CHECK1为控件ID
SetCheck(1)表示设置复选框为“选中”状态;
SetCheck(0)表示设置复选框为“未选中”状态;
SetCheck(2)设置复选框为不确定状态(This value can be used only if the button has the BS_3STATE or BS_AUTO3STATE style.);
获取复选框状态:
int value= m_check.GetCheck();
返回1表示选中,返回0表示未选中。
用参数判断选中与否:
变量 | 状态 |
BST_UNCHECKED | 未选中 |
BST_CHECKED | 选中 |
四、关联int型、BOOL型成员变量
复选框CheckBox控件添加一个Value类型的控件变量如:BOOL m_check;或者int m_check;
void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Check(pDX, IDC_CHECK1, m_check);
//DDX_Control(pDX, IDC_CHECK1, m_check1);
}
注意:使用Value类型的变量时,要加Updatedata();
实例
int nState = m_check.GetCheck();
if (nState == BST_CHECKED)
{
//选中
}
else
{
//未选中
}