0

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

4

2 回答 2

1

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

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

虽然这回答了第二次呼叫的“为什么”,这就是您所问的,但我不知道执行完整呼叫序列的意义是什么。ResetDefaultFont我在 MSDN Library 和本地 Visual Studio 2012 帮助中都找不到 的文档结果。为了彻底,我在 VS 2012 中创建了一个新的默认 MFC 项目,并ResetDefaultFont在派生自CEditView. 它没有编译:没有。

所以,

你从哪里得到这个ResetDefaultFont功能的?

于 2012-12-24T07:16:20.817 回答
-2

答案很简单。此代码仅用于获取 DC 的当前字体。如果他们将代码放在这些语句之后,那将是显而易见的。

于 2015-07-15T08:59:35.357 回答