最近在学mfc,对于其中的绘图深不以为然,合上书一试。呵呵,写了几行就有了内存泄露(应该是),真是要命
源码如下(mfc的OnPaint函数)
void CChildView::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
// TODO: 在此处添加消息处理程序代码 CPen *pPen=NULL;
CPen *pPen_old=NULL;
pPen_old=new CPen();
pPen=new CPen();
pPen->CreatePen(PS_SOLID,2,RGB(0,0,255));
//----------------------------------------------------------------------------------------------------
pPen_old=dc.SelectObject(pPen);
dc.SelectObject(pPen_old);
//------------------------------------------------------------------------------------------------------------------------------------
pPen->DeleteObject();
pPen_old->DeleteObject();
if(pPen_old!=NULL)
{
delete pPen_old;
pPen_old=NULL;
} if(pPen!=NULL)
{
delete pPen;
pPen=NULL;
}
// 不要为绘制消息而调用 CWnd::OnPaint()
}
不知道为什么,注释掉delete pPen_old;就好了。开始以为是cpen析构函数过于严格,就在delete之前将pPen_old成员m_hObject置为空,呵呵,还是不行、、、、、到底为什么呢,zhe
源码如下(mfc的OnPaint函数)
void CChildView::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
// TODO: 在此处添加消息处理程序代码 CPen *pPen=NULL;
CPen *pPen_old=NULL;
pPen_old=new CPen();
pPen=new CPen();
pPen->CreatePen(PS_SOLID,2,RGB(0,0,255));
//----------------------------------------------------------------------------------------------------
pPen_old=dc.SelectObject(pPen);
dc.SelectObject(pPen_old);
//------------------------------------------------------------------------------------------------------------------------------------
pPen->DeleteObject();
pPen_old->DeleteObject();
if(pPen_old!=NULL)
{
delete pPen_old;
pPen_old=NULL;
} if(pPen!=NULL)
{
delete pPen;
pPen=NULL;
}
// 不要为绘制消息而调用 CWnd::OnPaint()
}
不知道为什么,注释掉delete pPen_old;就好了。开始以为是cpen析构函数过于严格,就在delete之前将pPen_old成员m_hObject置为空,呵呵,还是不行、、、、、到底为什么呢,zhe
解决方案 »
- m_ctrlComm.SetInputModel(1); 发生的错误
- 关于vc对话框背景图片的加载。。。
- 求救!我在程序中开了一个线程,里面用gdiflush()刷新界面,当程序运行的时候,运行其它程序,切换了焦点,我的程序中线程的显示就不正常
- 我这个链表怎么了????郁闷
- 请教:如何改变属性页的颜色
- 大送分:关于字符串处理的菜鸟级问题(2)
- 100分!!!!一个程序,在W2k下能运行,可在W98下不能运行??!!
- 请问OpenGL中什么时候使用的是齐次坐标,什么时候不是?
- 怎么理解“该函数必须是线程安全的”?
- 问一个和计算机没有一点关系的问题?
- HOOK钩子问题
- invalidate位置不同为什么效果不一样
CPen *pPen_old=NULL;
pPen_old=new CPen();
pPen=new CPen();
不要用 *
CPen Pen;
CPen Pen_old;
//pPen_old=new CPen();
//pPen=new CPen();
Pen.CreatePen(PS_SOLID,2,RGB(0,0,255));
...
通常 在 不知道 大小时, 才 用 new 。