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

How to see if an MFC checkbox is selected

本文关键字:MFC 复选框 何查看 是否      更新时间:2023-10-16

我已经在很多地方找到了答案,他们推荐了我的方法,但这似乎对我不起作用,所以非常感谢任何帮助。

我有一个复选框,我希望它在选中时启用编辑框,在取消选中时禁用它。

以下代码是我创建的:

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);
    }

当我在调试中运行它时,Check是520,所以直接转到else选项。

非常感谢

如果您阅读GetState上的手册页面,您会看到它返回一个位掩码。

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

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

但是,GetCheck可能更适合您的情况。

CButton的GetState获取对话框对象的当前状态。您想要使用的是CButton的GetCheck。

或者,如MSDN上所示,您可以对返回值进行逐位掩码,以获得当前的Check状态,但GetCheck就在那里,所以您也可以使用它。

来自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"));

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

bool IsCheck1Checked;

使用以下代码:

CButton *m_ctlCheck1 = (CButton*)GetDlgItem(IDC_CHECK1);
IsCheck1Checked = (m_ctlCheck1->GetCheck() == 1) ? true : false;