有关MFC中使用CButton类后位图按钮闪烁的问题

来源:互联网 发布:算法大数阶乘问题 编辑:程序博客网 时间:2024/05/22 06:15

     刚开始写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;
}

 

这样问题就得到了解决~~~