如何查看是否选择了MFC复选框

9
我已经查阅了许多资料寻找答案,它们推荐的方法我已经尝试过,但对我并没有用,如果有任何帮助将不胜感激。
我有一个复选框,当选中时,我想要启用编辑框;当未选中时,我想要禁用它。
以下是我编写的代码:
void CMFCApplication1Dlg::OnBnClickedCheck1()
{
    UINT nCheck = CheckBox.GetState();
    if (nCheck == BST_CHECKED)
    {
        EditBox.EnableWindow(TRUE);
    }
    else if (nCheck == BST_UNCHECKED)
    {
        EditBox.EnableWindow(FALSE);
    }
    else
    {
        EditBox.EnableWindow(TRUE);
    }

当我以调试模式运行nCheck时,它的值为520,因此直接进入else选项。
非常感谢。
4个回答

12

如果你阅读了 GetState的手册页面,你会发现它返回一个位掩码。

这意味着你不能直接在比较中使用它,你必须像使用掩码一样进行检查:

if ((nCheck & BST_CHECKED) != 0)
{
    // Button is checked
}
else
{
    // Button is unchecked
}

然而,在您的情况下,GetCheck可能更合适。


9

CButton的GetState方法获取对话框对象的当前状态。你应该使用的是CButton的GetCheck方法。

或者,正如MSDN所示, 你可以对返回值进行按位掩码操作以获取当前的选中状态 - 但既然有GetCheck方法,那么最好直接使用它。


3

来自MSDN论坛

CButton *m_ctlCheck = (CButton*) GetDlgItem(IDC_CHECKBOX);
int ChkBox = m_ctlCheck->GetCheck();
CString str;

if(ChkBox == BST_UNCHECKED)
  str.Format(_T("Un Checked"));
else if(ChkBox == BST_CHECKED)
  str.Format(_T("Checked"));

0

将名为IDC_CHECK1的复选框的状态读入变量中:

bool IsCheck1Checked;

请使用以下代码:
CButton *m_ctlCheck1 = (CButton*)GetDlgItem(IDC_CHECK1);
IsCheck1Checked = (m_ctlCheck1->GetCheck() == 1) ? true : false;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接