在CDialog上放一个CStatic控件,重载OnCtlColor函数修改其颜色;HBRUSH CRadarNew::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(160,180,220));
HBRUSH b=CreateSolidBrush(RGB(160,180,220));
return b;
}
return hbr;
}
然后不断的更改静态文本内容
如:
SetDlgItemText(IDC_STATIC_1,"123");
为什么会有内存泄漏?导致死机。
急求高手解答,谢谢!

解决方案 »

  1.   

    HBRUSH b=CreateSolidBrush(RGB(160,180,220));
    不停的制造GDI对象但是没有释放,GDI泄漏。把HBRUSH b声明为全局或者成员变量,每次使用前先DeleteObject
      

  2.   

    HBRUSH CViewMapDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    DeleteObject(b);
    if(nCtlColor==CTLCOLOR_STATIC)
    {
    pDC->SetTextColor(RGB(0,0,0));
    pDC->SetBkColor(RGB(160,180,220));
    b=CreateSolidBrush(RGB(160,180,220));
    return b;
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
    是这个意思吗?谢谢
      

  3.   

    DeleteObject(b);前先检查下b是否空。