为什么SelectObject被调用两次?

时间:2012-12-24 06:52:49

标签: c++ windows mfc cdc

我在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?

2 个答案:

答案 0 :(得分:1)

第一个SelectObject调用会更改在设备上下文中选择的字体。

第二次SelectObject调用将字体重置为第一次调用之前的字体。

虽然这回答了第二次通话的“原因”,这就是你所要求的,但我不知道完成通话序列的重点是什么。我找不到ResetDefaultFont的文档结果,既没有在MSDN Library中在线,也没有在本地Visual Studio 2012帮助中。为了彻底,我在VS 2012中创建了一个新的默认MFC项目,并在从ResetDefaultFont派生的类的构造函数中使用了标识符CEditView。它没有编译:没有这样的。

所以,

你从哪里获得ResetDefaultFont函数?

答案 1 :(得分:-2)

答案很简单。 此代码仅用于获取DC的当前字体。 如果他们按照这些陈述放置了代码,那就很明显了。