Invalidate()函数不起作用

时间:2012-10-11 12:04:53

标签: c++ mfc

我有一个功能,只要我点击按钮复选框就会检查

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

GetState会返回状态的组合。由于用户按下按钮,除BST_PUSHED外,您还会BST_FOCUSBST_CHECKED。如果您只是测试了单个位,它会起作用:

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

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

if (m_CheckBox1.GetState() & BST_CHECKED)