Почему SelectObject вызывается дважды?

Я прочитал код в 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?

0

Решение

Первый SelectObject вызов меняет шрифт, выбранный в контексте устройства.

Второй SelectObject Вызов сбрасывает шрифт до того, что было до первого вызова.

Хотя это отвечает на вопрос «почему» для второго вызова, о чем вы спрашиваете, я не имею ни малейшего представления, в чем смысл выполнения полной последовательности вызовов. Я не нашел результатов документации для ResetDefaultFont, ни онлайн в библиотеке MSDN, ни в локальной справке Visual Studio 2012. Просто для тщательности я создал новый проект MFC по умолчанию в VS 2012 и использовал идентификатор ResetDefaultFont в конструкторе класса, полученного из CEditView, Он не компилируется: нет такого.

Так,

где ты это достал ResetDefaultFont функция от?

1

Другие решения

Ответ довольно прост.
Этот код только для получения текущего шрифта DC.
Если бы они поместили код после этих утверждений, это было бы очевидно.

-2