用SendMessage设置控件字体后产生的内存泄漏问题

来源:互联网  时间:2016/7/15 14:25:48

关于网友提出的“ 用SendMessage设置控件字体后产生的内存泄漏问题”问题疑问,本网通过在网上对“ 用SendMessage设置控件字体后产生的内存泄漏问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 用SendMessage设置控件字体后产生的内存泄漏问题
描述:

使用语言:VC6/SDK
出现问题:使用CreateFont创建了一个全局的HFONT,然后用Send了个WM_SETFONT的Message给一个有自己信息循环的Edit控件。然后在程序结束时候,由于HFONT被Select了,所以不能用DeleteObject删除(我在主窗口的WM_DESTROY里面进行删除),产生错误(BoundsChecker7报告)。
我的解决:已经在CSDN、MSDN、YAHOO、BAIDU都找过,但还是不知道怎么解决。一般都会有SelectObject个原来的Font或者SelectObject个GetSockObject(NULL_BRUSH),但是我不知道我用SendMessage后应该怎样处理,试过SelectObject(GetDC(MyEdit), GetSockObject(NULL_BRUSH))都不行。或者如果不用SendMessage,还有什么方法可以设置字体?
可能我的描述不是很清楚,各位多多见谅。
请各位高手给个具体的解决的方法,谢谢!!!


解决方案1:

上面的程序有问题吗?我的是VC6+sp6 boundcheck7 结果描述为No events

解决方案2:

在用SendMessage(hEdit, WM_SETFONT, (WPARAM)hFontEdit, MAKELPARAM(TRUE,0));设置字体后会返回一个HFONT的句柄
可改成
HFONT hOldFont = (HFONT)SendMessage(hEdit, WM_SETFONT, (WPARAM)hFontEdit, MAKELPARAM(TRUE,0));

解决方案3:

在WM_NCDESTROY 消息处理过程中删除这个Font对象即可,此时所有的控件都已经被销毁

解决方案4:

我的也是 VC6+SP6。也有可能是误报,尽信书则不如无书。上面我也说过,其实这个问题既然出现在进程结束时,大可不必去理会。测试太累了,我估计不能再陪你了。:-)

解决方案5:

结束之前再Send个WM_SETFONT的Message给一个有自己信息循环的Edit控件,将font句柄设为NULL或
GetStockObject(DEFAULT_GUI_FONT)

解决方案6:

先选进设备字体
然后再恢复以前的字体
最后再del了字体
如果有handle没有closehandle()也不可以
看看对你是不是有所帮助

解决方案7:

GetErrorMessage

上一篇急!请教高手:切分窗口弹出对话框后焦点的处理流程
下一篇?????????关于自绘listBox的MeasureItem问题(急!!!!)
明星图片
相关文章
《 用SendMessage设置控件字体后产生的内存泄漏问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)