【问题标题】:How to see if an MFC checkbox is selected如何查看是否选中了 MFC 复选框
【发布时间】:2012-08-23 12:44:35
【问题描述】:

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

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

以下代码是我创建的:

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 选项。

非常感谢

【问题讨论】:

    标签: c++ mfc checkbox


    【解决方案1】:

    如果您阅读GetState 上的manual page,您会看到它返回一个位掩码。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        来自MSDN Forum

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

        【讨论】:

          【解决方案4】:

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

          bool IsCheck1Checked;
          

          使用以下代码:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-04
            • 1970-01-01
            • 2014-09-14
            • 2013-12-25
            • 2011-01-17
            • 1970-01-01
            • 2019-11-19
            • 1970-01-01
            相关资源
            最近更新 更多