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

asg*_*das 3 c++ checkbox mfc

我已经检查了许多地方的答案,他们推荐我这样做的方式,但它似乎不适合我,所以任何帮助将不胜感激.

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

以下代码是我创建的:

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);
    }
Run Code Online (Sandbox Code Playgroud)

当我在调试中运行它时,nCheck是520,所以直接进入else选项.

非常感谢

Som*_*ude 8

如果您阅读手册页,GetState您将看到它返回一个位掩码.

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

if ((nCheck & BST_CHECKED) != 0)
{
    // Button is checked
}
else
{
    // Button is unchecked
}
Run Code Online (Sandbox Code Playgroud)

但是,GetCheck在您的情况下可能更合适.


The*_*ees 7

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

或者,您可以,如MSDN所示,在返回值上执行按位掩码以获取当前的Check状态 - 但GetCheck就在那里,所以您也可以使用它.