Поделиться через


Класс CFont

Инкапсулирует шрифт интерфейса графических устройств Windows (GDI) и предоставляет функции-члены для манипулирования этим шрифтом.

Синтаксис

class CFont : public CGdiObject

Участники

Открытые конструкторы

Имя Описание
CFont::CFont Формирует объект CFont.

Открытые методы

Имя Описание
CFont::CreateFont Инициализирует объект CFont с указанными характеристиками.
CFont::CreateFontIndirect Инициализирует CFont объект с характеристиками, заданными в LOGFONT структуре.
CFont::CreatePointFont Инициализирует CFont объект с указанной высотой, измеряемой в десятых точках и шрифтом.
CFont::CreatePointFontIndirect CreateFontIndirect Аналогично тому, что высота шрифта измеряется в десятых точках, а не логических единиц.
CFont::FromHandle Возвращает указатель на CFont объект при указании Windows HFONT.
CFont::GetLogFont Заполняет LOGFONT сведения о логическом шрифте, присоединенном к объекту CFont .

Открытые операторы

Имя Описание
CFont::operator HFONT Возвращает дескриптор шрифта Windows GDI, подключенный к объекту CFont .

Замечания

Чтобы использовать CFont объект, создайте CFont объект и прикрепите к нему шрифт Windows с CreateFontпомощью , CreateFontIndirectCreatePointFontилиCreatePointFontIndirect, а затем используйте функции-члены объекта для управления шрифтом.

CreatePointFontIndirect Функции CreatePointFont часто проще использовать, чем CreateFont или CreateFontIndirect так как они выполняют преобразование для высоты шрифта из размера точки в логические единицы автоматически.

Дополнительные сведения см. в CFontразделе "Графические объекты".

Иерархия наследования

CObject

CGdiObject

CFont

Требования

Заголовок.afxwin.h

CFont::CFont

Формирует объект CFont.

CFont();

Замечания

Результирующий объект должен быть инициализирован с CreateFontпомощью , CreateFontIndirectCreatePointFontили CreatePointFontIndirect перед его использованием.

Пример

CFont font;

CFont::CreateFont

Инициализирует CFont объект с указанными характеристиками.

BOOL CreateFont(
    int nHeight,
    int nWidth,
    int nEscapement,
    int nOrientation,
    int nWeight,
    BYTE bItalic,
    BYTE bUnderline,
    BYTE cStrikeOut,
    BYTE nCharSet,
    BYTE nOutPrecision,
    BYTE nClipPrecision,
    BYTE nQuality,
    BYTE nPitchAndFamily,
    LPCTSTR lpszFacename);

Параметры

nHeight
Указывает нужную высоту (в логических единицах) шрифта. lfHeight Дополнительные сведения см. в элементе LOGFONTструктуры в пакете SDK для Windows. Абсолютное значение nHeight не должно превышать 16 384 единиц устройства после преобразования. Для всех сравнений высот в схеме шрифтов выполняется поиск самого большого шрифта, который не превышает запрошенный размер или наименьший шрифт, если все шрифты превышают запрошенный размер.

nWidth
Задает среднюю ширину (в логических единицах) символов в шрифте. Если nWidth значение равно 0, пропорции устройства будут совпадать с пропорциями цифры доступных шрифтов, чтобы найти ближайшее совпадение, которое определяется абсолютным значением разницы.

nEscapement
Задает угол (в единицах 0,1 градуса) между вектором escapeмента и осью x поверхности отображения. Вектор escapement — это линия через источники первых и последних символов в строке. Угол измеряется по счетчику с оси x. lfEscapement Дополнительные сведения см. в LOGFONT структуре пакета SDK для Windows.

nOrientation
Задает угол (в единицах 0,1 градуса) между базовым планом символа и осью x. Угол измеряется по счетчику с оси x для систем координат, в которых направление y вниз и по часовой стрелке от оси x для систем координат, в которых y-направление вверх.

nWeight
Задает вес шрифта (в рукописных пикселях на 1000). lfWeight Дополнительные сведения см. в LOGFONT структуре пакета SDK для Windows. Описанные значения являются приблизительными; фактический внешний вид зависит от шрифта. Некоторые шрифты имеют только FW_NORMALFW_REGULAR, и FW_BOLD весовые значения. Если FW_DONTCARE задано, используется вес по умолчанию.

bItalic
Указывает, является ли шрифт курсивом.

bUnderline
Указывает, подчеркнут ли шрифт.

cStrikeOut
Указывает, вычеркиваются ли символы в шрифте. Указывает шрифт забастовки, если задано значение ненулевого значения.

nCharSet
Задает набор lfCharSet символов шрифта, который входит в LOGFONT структуру в пакете SDK для Windows для списка значений.

Набор символов OEM зависит от системы.

Шрифты с другими наборами символов могут существовать в системе. Приложение, использующее шрифт с неизвестным набором символов, не должно пытаться переводить или интерпретировать строки, которые должны отображаться с помощью этого шрифта. Вместо этого строки должны передаваться непосредственно драйверу выходного устройства.

Сопоставление шрифтов не использует DEFAULT_CHARSET значение. Приложение может использовать это значение, чтобы разрешить имя и размер шрифта полностью описать логический шрифт. Если шрифт с указанным именем не существует, шрифт из любого набора символов можно заменить на указанный шрифт. Чтобы избежать непредвиденных результатов, приложения должны использовать значение с разреженным способом DEFAULT_CHARSET .

nOutPrecision
Указывает требуемую точность выходных данных. Точность выходных данных определяет, насколько близко выходные данные должны соответствовать высоте запрошенного шрифта, ширине, ориентации символов, escapement и шагу. Дополнительные сведения см. lfOutPrecision в структуре пакета LOGFONT SDK для Windows.

nClipPrecision
Указывает требуемую точность вырезки. Точность вырезки определяет, как вырезать символы, которые частично находятся за пределами области вырезки. lfClipPrecision Список значений см. в структуре в LOGFONT пакете SDK для Windows.

Чтобы использовать внедренный шрифт только для чтения, необходимо указать CLIP_ENCAPSULATEприложение.

Чтобы добиться согласованного поворота шрифтов устройства, TrueType и векторов, приложение может использовать побитовый оператор OR (|) для объединения CLIP_LH_ANGLES значения с любым из других nClipPrecision значений. CLIP_LH_ANGLES Если бит задан, поворот для всех шрифтов зависит от того, является ли ориентация системы координат левой или правой рукой. (Дополнительные сведения о ориентации систем координат см. в описании nOrientation параметра.) Если CLIP_LH_ANGLES не задано, шрифты устройств всегда поворачиваются по счетчику, но поворот других шрифтов зависит от ориентации системы координат.

nQuality
Указывает качество выходных данных шрифта, определяющее, насколько тщательно GDI должен пытаться сопоставить атрибуты логического шрифта с фактическим физическим шрифтом. lfQuality Список значений см. в структуре в LOGFONT пакете SDK для Windows.

nPitchAndFamily
Задает поле и семейство шрифта. Дополнительные сведения см. lfPitchAndFamily в структуре пакета LOGFONT SDK для Windows.

lpszFacename
Указатель CString на строку, завершающуюся значением NULL, которая указывает имя шрифта. Длина этой строки не должна превышать 30 символов. Функцию Windows EnumFontFamilies можно использовать для перечисления всех доступных в настоящее время шрифтов. Если lpszFacename это NULLтак, GDI использует не зависящий от устройства шрифт.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Затем шрифт можно выбрать в качестве шрифта для любого контекста устройства.

Функция CreateFont не создает новый шрифт GDI Для Windows. Он просто выбирает ближайшее совпадение из физических шрифтов, доступных для GDI.

Приложения могут использовать параметры по умолчанию для большинства параметров при создании логического шрифта. Параметры, которые всегда должны быть заданы определенными значениями, и nHeightlpszFacename. Если nHeight и lpszFacename не заданы приложением, созданный логический шрифт зависит от устройства.

Завершив работу с CFont объектом, созданным CreateFont функцией, используйте CDC::SelectObject для выбора другого шрифта в контексте устройства, а затем удалите CFont объект, который больше не нужен.

Пример

// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.

// Initializes a CFont object with the specified characteristics.
CFont font;
VERIFY(font.CreateFont(
    12,                       // nHeight
    0,                        // nWidth
    0,                        // nEscapement
    0,                        // nOrientation
    FW_NORMAL,                // nWeight
    FALSE,                    // bItalic
    FALSE,                    // bUnderline
    0,                        // cStrikeOut
    ANSI_CHARSET,             // nCharSet
    OUT_DEFAULT_PRECIS,       // nOutPrecision
    CLIP_DEFAULT_PRECIS,      // nClipPrecision
    DEFAULT_QUALITY,          // nQuality
    DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
    _T("Arial")));            // lpszFacename

// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font.  Delete the font object.
font.DeleteObject();

CFont::CreateFontIndirect

Инициализирует CFont объект с характеристиками, заданными в LOGFONTструктуре.

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

Параметры

lpLogFont
Указывает на LOGFONT структуру, которая определяет характеристики логического шрифта.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Затем шрифт можно выбрать в качестве текущего шрифта для любого устройства.

Этот шрифт имеет характеристики, указанные LOGFONT в структуре. При выборе шрифта с помощью CDC::SelectObject функции-члена приложение GDI пытается сопоставить логический шрифт с существующим физическим шрифтом. Если сопоставителя шрифтов не удается найти точное совпадение для логического шрифта, он предоставляет альтернативный шрифт, характеристики которого соответствуют максимальному набору запрошенных характеристик.

Если объект, созданный CreateFontIndirect функцией, больше не нуженCFont, используйте CDC::SelectObject для выбора другого шрифта в контексте устройства, а затем удалите CFont объект, который больше не нужен.

Пример

// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.

// Initializes a CFont object with the characteristics given
// in a LOGFONT structure.
CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT)); // zero out structure
lf.lfHeight = 12;                // request a 12-pixel-height font
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE,
           _T("Arial"), 7);           // request a face name "Arial"
VERIFY(font.CreateFontIndirect(&lf)); // create the font

// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
font.DeleteObject();

CFont::CreatePointFont

Эта функция предоставляет простой способ создания шрифта указанного шрифта и размера точки.

BOOL CreatePointFont(
    int nPointSize,
    LPCTSTR lpszFaceName,
    CDC* pDC = NULL);

Параметры

nPointSize
Запрошенная высота шрифта в десятых точках. (Например, передайте 120, чтобы запросить 12-точечный шрифт.)

lpszFaceName
Указатель CString на строку, завершающуюся значением NULL, которая указывает имя шрифта. Длина этой строки не должна превышать 30 символов. Функцию Windows EnumFontFamilies можно использовать для перечисления всех доступных в настоящее время шрифтов. Если lpszFaceName это NULLтак, GDI использует не зависящий от устройства шрифт.

pDC
Указатель на объект, используемый CDC для преобразования высоты в nPointSize логические единицы. Если NULLдля преобразования используется контекст устройства с экрана.

Возвращаемое значение

Ненулевое значение, если выполнено успешно, в противном случае — значение 0.

Замечания

Он автоматически преобразует высоту в nPointSize логические единицы с помощью объекта CDC, на который указывает pDC.

Завершив работу с CFont объектом, созданным CreatePointFont функцией, сначала выберите шрифт из контекста устройства, а затем удалите CFont объект.

Пример

// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.

CClientDC dc(this);

CFont font;
VERIFY(font.CreatePointFont(120, _T("Arial"), &dc));

// Do something with the font just created...
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
font.DeleteObject();

CFont::CreatePointFontIndirect

Эта функция совпадает с тем, что CreateFontIndirectlfHeight член элемента LOGFONT интерпретируется в десятых точках, а не единиц устройства.

BOOL CreatePointFontIndirect(
    const LOGFONT* lpLogFont,
    CDC* pDC = NULL);

Параметры

lpLogFont
Указывает на LOGFONT структуру, которая определяет характеристики логического шрифта. Член lfHeightLOGFONT структуры измеряется в десятых точках, а не логических единиц. (Например, задайте lfHeight значение 120, чтобы запросить 12-точечный шрифт.)

pDC
Указатель на объект, используемый CDC для преобразования высоты в lfHeight логические единицы. Если NULLдля преобразования используется контекст устройства с экрана.

Возвращаемое значение

Ненулевое значение, если выполнено успешно, в противном случае — значение 0.

Замечания

Эта функция автоматически преобразует высоту в lfHeight логические единицы с помощью CDC объекта, на который указывает pDC перед передачей LOGFONT структуры в Windows.

Завершив работу с CFont объектом, созданным CreatePointFontIndirect функцией, сначала выберите шрифт из контекста устройства, а затем удалите CFont объект.

Пример

// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
LOGFONT lf;

// clear out structure.
memset(&lf, 0, sizeof(LOGFONT));

// request a 12-pixel-height font
lf.lfHeight = 120;

// request a face name "Arial".
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);

CClientDC dc(this);

CFont font;
VERIFY(font.CreatePointFontIndirect(&lf, &dc));

// Do something with the font just created...
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
font.DeleteObject();

CFont::FromHandle

Возвращает указатель на CFont объект при присвоении дескриптора HFONT объекту шрифта Windows GDI.

static CFont* PASCAL FromHandle(HFONT hFont);

Параметры

hFont
Дескриптор HFONT шрифта Windows.

Возвращаемое значение

Указатель на объект в случае успешного CFont выполнения; в противном случае NULL.

Замечания

CFont Если объект еще не присоединен к дескрипторуCFont, создается и присоединяется временный объект. Этот временный объект действителен только в следующий раз, когда приложение имеет время простоя CFont в цикле событий, в то время как все временные графические объекты удаляются. Другой способ сказать, что временный объект действителен только во время обработки одного сообщения окна.

Пример

// The code fragment shows how to create a font object using
// Windows API CreateFontIndirect(), convert the HFONT to a
// CFont* before selecting the font object into a DC (device
// context) for text drawing, and finally delete the font object.

// Initialize a CFont object with the characteristics given
// in a LOGFONT structure.
LOGFONT lf;

// clear out structure
memset(&lf, 0, sizeof(LOGFONT));
// request a 12-pixel-height font
lf.lfHeight = 12;
// request a face name "Arial"
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);
// create the font
HFONT hfont = ::CreateFontIndirect(&lf);

// Convert the HFONT to CFont*.
CFont *pfont = CFont::FromHandle(hfont);

// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(pfont);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
::DeleteObject(hfont);

CFont::GetLogFont

Вызовите эту функцию, чтобы получить копию LOGFONT структуры для CFont.

int GetLogFont(LOGFONT* pLogFont);

Параметры

pLogFont
Указатель на структуру для получения сведений LOGFONT о шрифте.

Возвращаемое значение

Ненулевое значение, если функция завершается успешно, в противном случае — значение 0.

Пример

// The code fragment shows how to retrieve a copy of the
// LOGFONT structure for a currently selected font of a window.

CFont *pFont = pWnd->GetFont();
if (NULL != pFont)
{
   LOGFONT lf;
   pFont->GetLogFont(&lf);
   TRACE(_T("Typeface name of font = %s\n"), lf.lfFaceName);
}

CFont::operator HFONT

Используйте этот оператор, чтобы получить дескриптор GDI Windows шрифта, присоединенного к объекту CFont .

operator HFONT() const;

Возвращаемое значение

Дескриптор объекта шрифта Windows GDI, присоединенного к CFont успешному выполнению; в противном случае NULL.

Замечания

Так как этот оператор автоматически используется для преобразования из CFontшрифта и текста, можно передать CFont объекты в функции, ожидающие HFONT.

Дополнительные сведения об использовании графических объектов см. в статье "Графические объекты " в пакете SDK для Windows.

Пример

// The code fragment shows the usage of CFont::operator HFONT.

// Initialize a CFont object with the characteristics given
// in a LOGFONT structure.
LOGFONT lf;

// clear out structure
memset(&lf, 0, sizeof(LOGFONT));

// request a 12-pixel-height font
lf.lfHeight = 12;

// request a face name "Arial"
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);

CFont font1;
font1.CreateFontIndirect(&lf); // create the font

// CFont::operator HFONT automatically converts font1 from
// CFont* to HFONT.
CFont *font2 = CFont::FromHandle(font1);

// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(font2);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
font1.DeleteObject();

См. также

Пример MFC HIERSVR
CGdiObject Класса
Диаграмма иерархии