为什么SelectObject被称为两次
Why SelectObject is called twice?
我在MFC中读取代码,但与下面的代码相混淆:
void EditView::ResetDefaultFont()
{
HFONT hFont = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
CDC* pDC = GetDC();
CFont* pFont = pDC->SelectObject(CFont::FromHandle(hFont));
pDC->SelectObject(pFont);
::DeleteObject(hFont);
}
为什么CDC首先选择默认字体(CFont* pFont = pDC->SelectObject(CFont::FromHandle(hFont));
),但请再次选择Pfont?
第一个SelectObject
调用更改设备上下文中选择的字体。
第二个SelectObject
调用将字体重置为第一个呼叫之前的任何内容。
当您问的是第二个通话的"为什么"时,我不知道做完整的呼叫序列是什么意义。我没有发现ResetDefaultFont
的文档结果,在MSDN库中均未在线或本地Visual Studio 2012帮助。只是要彻底地,我在VS 2012中创建了一个新的默认MFC项目,并在CEditView
派生的类的构造函数中使用了标识符ResetDefaultFont
。它没有编译:没有这样的。
so,
您从哪里获得ResetDefaultFont
功能?
答案很简单。此代码仅用于获取DC的当前字体。如果他们在这些语句之后放置了代码,那将是显而易见的。
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++析构函数调用两次,堆栈分配的复合对象
- 为什么参数在构造 std::thread 时移动两次
- Qt插槽调用了两次
- 做 std::用相同的unique_ptr移动两次
- C++两次定义相同的函数会导致错误
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 对于优化级别为 0 的 std::vector,析构函数被调用两次
- 使用柯南打包时如何避免列出两次依赖?
- 为什么要执行两次位移((x >> 4)<< 4)?
- 对结构向量进行两次排序
- 如果我使用同一个密钥推送用户数据两次,会发生什么
- 为什么SelectObject被称为两次