虚心请教.急!

liuniu 2000-08-30 10:53:00
我用VC6.0编写的一个程序中用了如下语句:
pDC->SelectObject(pNewFont);
来选择一个新字体(pNewFont预先已经创建好),程序开始运行正常,但经过一段时间
后就会有问题,发现是因为SelectObject()函数的返回值为NULL,pNewFont所指向的
字体已经创建好,经Build/start debug/go调试已经堵上了内存泄露。请教各位高
手,什么原因会导致SelectObject()函数失败?小弟在此先谢过。
...全文
261 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Holly 2000-09-05
  • 打赏
  • 举报
回复
Sorry!这么久才看到这个帖子!
你的:
选择新字体 pDC->SelectObject(pNewFont); pCurrentFont=pNewFont;
这一句没有对pDC->SelectObject(pNewFont);函数的返回值进行保存,不是你自己创建的pCurrentFont;
写一个规范的流程:
{
CFont fontNew;
fontNew.CreateFontIndirect(...);//创建新字体
CFont* pOldFont = (CFont*)(pDC->SelectObject(&fontNew));//选择新字体
...

pDC->SelectObject(pOldFont);//恢复旧字体
fontNew.DelectObject();//删除新字体
}
你的错误不是压入堆栈错,是没有保存应当保存的原有字体!
我的代码只是流程,有关字体变量的声明可以是成员变量,也可以是new出来的但有注释的四行的先后顺序不能错!
Holly 2000-08-30
  • 打赏
  • 举报
回复
肯定是你的SelectObject和DeleteObject的使用有问题,凭现象只能猜测!把代码贴出来诊断一下!
Holly 2000-08-30
  • 打赏
  • 举报
回复
肯定是你的SelectObject和DeleteObject的使用有问题,凭现象只能猜测!把代码贴出来诊断一下!
dark 2000-08-30
  • 打赏
  • 举报
回复
创建的每个新字体在使用完后一定要显示删除,不然它所占用的资源不被释放,在每次使用完pNewFont后,用pNewFont->DeleteObject()显示删除创建的字体对象。ok!
元明 2000-08-30
  • 打赏
  • 举报
回复
attention
melice 2000-08-30
  • 打赏
  • 举报
回复
为什么不能压入堆栈?
AP 2000-08-30
  • 打赏
  • 举报
回复
请不要压入堆栈
liuniu 2000-08-30
  • 打赏
  • 举报
回复
但是我确实用DeleteObject()删除了字体对象的呀,源程序思想大致如下:
为新字体申请内存 pNewFont=new CFont;
创建新字体 pNewFont->CreateFontIndirect(&logfont);
原来字体压入堆栈 PushFont(pCurrentFont);
选择新字体 pDC->SelectObject(pNewFont); pCurrentFont=pNewFont;
重新选择老字体
删除当前字体 pCurrentFont->DeleteObject();delete pCurrentFont;
从堆栈中弹出原字体 pCurrent=PopFont();pDC->SelectObject(pCurrentFont);
以上代码是简写。
当出现问题时发现pDC->SelectObject(pNewFont);的返回值为NULL,why?

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧