我已经检查了许多地方的答案,他们推荐我这样做的方式,但它似乎对我不起作用,所以任何帮助都会非常感激。
我有一个复选框,我希望它在检查时启用编辑框,并在未选中时禁用它。
以下代码是我创建的:
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选项。
非常感谢
答案 0 :(得分:8)
如果您阅读GetState
上的manual page,您会看到它返回一个位掩码。
这意味着您不能直接在比较中使用它,您必须像面具一样检查它:
if ((nCheck & BST_CHECKED) != 0)
{
// Button is checked
}
else
{
// Button is unchecked
}
但是,GetCheck
可能更适合您。
答案 1 :(得分:7)
CButton的GetState获取对话框对象的当前状态。你想要使用的是CButton的GetCheck。
或者,您可以as indicated on MSDN对返回值执行按位掩码以获取当前的Check状态 - 但GetCheck就在那里,所以您也可以使用它。
答案 2 :(得分:0)
来自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"));
答案 3 :(得分:0)
将名为IDC_CHECK1的复选框的状态读入变量:
bool IsCheck1Checked;
使用以下代码:
CButton *m_ctlCheck1 = (CButton*)GetDlgItem(IDC_CHECK1);
IsCheck1Checked = (m_ctlCheck1->GetCheck() == 1) ? true : false;