如何查看是不是选中了 MFC 复选框
Posted
技术标签:
【中文标题】如何查看是不是选中了 MFC 复选框【英文标题】: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 选项。
非常感谢
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于如何查看是不是选中了 MFC 复选框的主要内容,如果未能解决你的问题,请参考以下文章