windows - CFont::FromHandle(HFONT) 是否承担 HFONT 的所有权?
问题描述
CFont::FromHandle(HFONT)
返回一个CFont*
包装HFONT
. MFC 文档指出:
如果
CFont
对象尚未附加到句柄,CFont
则创建并附加一个临时对象。此临时CFont
对象仅在应用程序在其事件循环中具有空闲时间之前有效,此时所有临时图形对象都将被删除。另一种说法是临时对象仅在处理一个窗口消息期间有效。
但它没有说明临时CFont
对象是否会DeleteObject()
在HFONT
删除时调用。
是否CFont::FromHandle(HFONT)
承担HFONT
?
如果是这样,如果它HFONT
已经被不同的CFont
实例包装了会发生什么?
在上下文中:我正在使用具有“字体管理器”对象的遗留代码,我要求适当的字体。我知道字体管理器在内部将字体存储为CFont
实例,但它的方法只是将它们作为HFONT
.
所以我有这样的代码:
{
CDC* pDC = GetDC();
HFONT fontH = myFontManager->GetTheRightFont(state);
CFont* newFont = CFont::FromHandle(fontH);
CFont* oldFont = pDC->SelectObject(newFont);
..
// draw some stuff
..
pDC->SelectObject(oldFont);
ReleaseDC(pDC);
}
我担心的是,当临时newFont
对象被删除时,它可能会调用DeleteObject()
一个fontH
包含不再有效的字体句柄myFontManager
的成员实例。CFont
注意:我已阅读https://www.codeproject.com/Articles/535/Attaching-and-Detaching-Objects但我不清楚这如何适用于FromHandle
.
解决方案
推荐阅读
- java - 休眠查询给出一个错误的结果列表
- javascript - 快递请求没有结束
- python - How can i clean my dataset from outliers as it includes numerical and categorical variables in Python?
- swift - 验证与关联类型协议的一致性对象
- python - 不明白 错误:绑定参数 0 - 可能是不受支持的类型
- javascript - 使用Angular 6中的momentJS从特定日期获取月份的所有日期
- python-3.x - 如何将一个句子分成一个列表?
- mysql - 如何在 MySQL 中搜索和替换 base64 子字符串?
- javascript - 获取输入属性并在jquery中创建一个带索引的多维数组
- android - 数字选择器中的跨区文本