刚开始写WINCE应用程序的时候,遇到了一个比较头疼的问题,那就是使用CButton类来做位图按钮时,点击按钮的时候会闪一下。
于是上网查了下,发现了很多人都遇到过这种问题,不过貌似都是不了了之。当然有人说这是没用双缓冲的缘故,不过我测试后发现用了双缓冲后问题并没有得到解决,只好接着找问题的原因。后来我发现只点击一个按钮的时候不会闪,但是几乎每次点击不同的按钮的时候就会闪,再进一步测试后我总算是发现了问题的原因:每次在点击不同按钮的时候,应用程序总是会把上一次点击过的按钮的背景给刷成白色,然后再用位图来填充的。既然找到了问题的原因,那解决问题就容易了。
为什么按钮的背景会被刷成白色呢?那是因为系统默认的画刷是白色的。所以只要把系统画刷设置成空画刷,就不会有出现这样的问题,解决方案如下:
响应WM_CTLCOLOR消息:
HBRUSH CXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_BTN)
{
hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
}
return hbr;
}
这样问题就得到了解决~~~