为什么SelectObject被称为两次

Why SelectObject is called twice?

本文关键字:两次 SelectObject 被称为 为什么      更新时间:2023-10-16

我在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的当前字体。如果他们在这些语句之后放置了代码,那将是显而易见的。