7

我已经检查了很多地方的答案,他们推荐了我这样做的方式,但它似乎对我不起作用,所以任何帮助将不胜感激。

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

以下代码是我创建的:

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

4 回答 4

11

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

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

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

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

于 2012-08-23T12:51:06.227 回答
10

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

或者,您可以按照 MSDN 上的说明,对返回值进行按位掩码以获取当前的 Check 状态 - 但 GetCheck 就在那里,所以您不妨使用它。

于 2012-08-23T12:50:57.787 回答
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"));
于 2016-12-06T11:21:36.300 回答
0

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

bool IsCheck1Checked;

使用以下代码:

CButton *m_ctlCheck1 = (CButton*)GetDlgItem(IDC_CHECK1);
IsCheck1Checked = (m_ctlCheck1->GetCheck() == 1) ? true : false;
于 2017-01-29T17:59:28.453 回答