>我有一个函数,每当我点击按钮复选框时都会检查
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_PUSHED
和BST_FOCUS
。如果您只测试单个位,它会起作用:
if ((m_CheckBox1.GetState() & BST_CHECKED) == BST_CHECKED)
这可以简化,因为任何非零值都是真的:
if (m_CheckBox1.GetState() & BST_CHECKED)