这个代码是我实现输入背景填充代码.
HBRUSH CTab4::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()== IDC_EDIT1 )
{
pDC->SetBkColor(d_bkColor);
m_brush.CreateSolidBrush(d_bkColor);
hbr= m_brush;
}
DeleteObject(m_brush) ; //这里不删除引起GDI增加的.但是删除了就实现不了背景填充的
pDC->DeleteDC();
return hbr;
}我改如何修改才能解决?
DeleteObject(m_brush),//如果不删除m_brush很快就引起内存泄漏关闭软件的.
HBRUSH CTab4::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()== IDC_EDIT1 )
{
pDC->SetBkColor(d_bkColor);
m_brush.CreateSolidBrush(d_bkColor);
hbr= m_brush;
}
DeleteObject(m_brush) ; //这里不删除引起GDI增加的.但是删除了就实现不了背景填充的
pDC->DeleteDC();
return hbr;
}我改如何修改才能解决?
DeleteObject(m_brush),//如果不删除m_brush很快就引起内存泄漏关闭软件的.
解决方案 »
- 如何获得当前系统设置的窗体的颜色?
- VC Studio 使用技巧大全
- 一个多线程的程序看不明白,想请教一下
- 关于消息循环而突然想到的问题。。。
- 求助:关于在按钮上显示位图!!!
- 请问VC的开发环境中,为了便于查找,能不能为一行代码设置一个书签啊
- MFC框架下,如何加自己的C++ 的.h 和.cpp文件?
- 是中国人都应该看一看这个网页!!11!!!
- 软件框架选择问题
- 初级问题:有关文件检测的问题,请各位高手指点!
- 多线程程序一个线程push_back,另一线程用循环查找了符合条件的pos并vector.erase(pos)使程序崩溃,在循环中发现pos无效为什么?
- 还是访问本进程中所有handle的问题, 我使用NtQuerySystemInformation得到的进程id好像都不对阿,和EnumProcesses得到的进程id不一样,进程名字也不一样。
{
HBRUSH hbr;
if(pWnd-> GetDlgCtrlID()== IDC_EDIT1)
{
pDC->SetBkColor(d_bkColor);
if (!m_brush.GetSafeHandle())
m_brush.CreateSolidBrush(d_bkColor);
hbr = m_brush;
}
else
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); return hbr;
} //m_brush应该是CTab4的一个类变量,记得在CTab4的OnDestroy里面对m_brush进行清理。
if (!m_brush.GetSafeHandle())
我加了这个判断.跟这个就可以
void CTab4::OnDestroy()
{
CDialog::OnDestroy();
DeleteObject(m_brush);
// TODO: Add your message handler code here
}
保证m_brush只创建一次,注意,如果d_bkColor更改后,要记得m_brush.DeleteObject();这样,当再次运行到OnCtlColor时,会再次创建m_brush。
HBRUSH CTab4::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
if(pWnd-> GetDlgCtrlID()== IDC_EDIT1)
{
pDC-> SetBkColor(d_bkColor);
if (!m_brush.GetSafeHandle())
m_brush.CreateSolidBrush(d_bkColor);
hbr = m_brush;
}
else
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
//pDC->DeleteDC(); //加入这个没显示背景跳动
return hbr;
}