今天編了一個小程序,內存消耗卻很大,隨著時間用的越來越久,內存消耗越來越大。研究了一下,原來CBRUSH對象沒有釋放。
原來程序如下:
HBRUSH CPORTSetting::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr ;
COLORREF backColor =(COLORREF) GetSysColor(COLOR_CAPTIONTEXT); //Office 2003背景色
//return CreateSolidBrush(backColor); //創建背景刷子
return hbr;
}
只需要將hbr聲明為成員變量,在CPORTSetting的構造函數中初始化,在析構函數中使用DeleteObject釋放hbr對象即可。
修改後代碼如下:
CPORTSetting::CPORTSetting()
{
COLORREF backColor =(COLORREF) GetSysColor(COLOR_CAPTIONTEXT); //Office 2003背景
hbr=::CreateSolidBrush(backColor); //創建背景刷子 }
///////////////////////////////////////////////////////////////////////////
CPORTSetting::~CPORTSetting()
{
DeleteObject(hbr);
}
//////////////////////////////////////////////////////////////////////
HBRUSH CPORTSetting::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
return hbr;
}