我有一个功能,只要我点击按钮复选框就会检查
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
答案 0 :(得分:1)
尝试使用调试器,看看你是否进入了OnBnClickedCheck1函数
答案 1 :(得分:1)
GetState
会返回状态的组合。由于用户按下按钮,除BST_PUSHED
外,您还会BST_FOCUS
和BST_CHECKED
。如果您只是测试了单个位,它会起作用:
if ((m_CheckBox1.GetState() & BST_CHECKED) == BST_CHECKED)
可以简化,因为任何非零值都是真的:
if (m_CheckBox1.GetState() & BST_CHECKED)