Invalidate() 函数不起作用



>我有一个函数,每当我点击按钮复选框时都会检查

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 方法的事件,如果选中该框,它将绘制必须绘制的内容。

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

有什么建议吗?

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

if(m_CheckBox1.GetState() ==1 )

.part。

编辑2:没错,问题出在提到的if语句中。这修复了它,不知道为什么。希望得到进一步的解释。

m_CheckBox1.GetCheck() ==1

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

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

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

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

if (m_CheckBox1.GetState() & BST_CHECKED)

最新更新