0

我有一个功能可以检查我单击的按钮复选框

void CRisanjeDlg::OnBnClickedCheck1()
{
    Invalidate(1);
}

在 OnPaint 方法中,我有以下代码:

    if(m_CheckBox1.GetState() ==1 )
{
    CBrush brush;
    CRect rect;
    GetClientRect(rect);
    brush.CreateSolidBrush(RGB(255,200,255));
    rect.DeflateRect(0,0,500,0);
    dc.Rectangle(rect);
    dc.FillRect(rect, &brush);
}

我有几个其他事件触发 OnPaint 方法,如果选中该框,它会绘制它必须绘制的内容。

当我单击复选框时它不起作用。事件被识别,只是 Invalidate(1) 不起作用......

有什么建议么?

编辑:当我取消选中该框时,该功能工作正常。看来问题应该出在

if(m_CheckBox1.GetState() ==1 )

部分。

EDIT2:没错,问题出在提到的 if 语句中。这解决了它,不知道为什么。将不胜感激进一步的解释。

m_CheckBox1.GetCheck() ==1
4

2 回答 2

1

尝试使用调试器,看看你是否进入了 OnBnClickedCheck1 函数

于 2012-10-11T12:08:58.510 回答
1

GetState返回状态的组合。由于用户正在按下按钮,因此您将拥有BST_PUSHEDBST_FOCUS除了BST_CHECKED. 如果您只测试单个位,它会起作用:

if ((m_CheckBox1.GetState() & BST_CHECKED) == BST_CHECKED)

这可以简化,因为任何非零值都是真的:

if (m_CheckBox1.GetState() & BST_CHECKED)
于 2012-10-11T14:36:07.613 回答