Я прочитал код в 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. Просто для тщательности я создал новый проект MFC по умолчанию в VS 2012 и использовал идентификатор ResetDefaultFont
в конструкторе класса, полученного из CEditView
, Он не компилируется: нет такого.
Так,
где ты это достал ResetDefaultFont
функция от?
Ответ довольно прост.
Этот код только для получения текущего шрифта DC.
Если бы они поместили код после этих утверждений, это было бы очевидно.