Класс 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
помощью , CreateFontIndirect
CreatePointFont
илиCreatePointFontIndirect
, а затем используйте функции-члены объекта для управления шрифтом.
CreatePointFontIndirect
Функции CreatePointFont
часто проще использовать, чем CreateFont
или CreateFontIndirect
так как они выполняют преобразование для высоты шрифта из размера точки в логические единицы автоматически.
Дополнительные сведения см. в CFont
разделе "Графические объекты".
Иерархия наследования
CFont
Требования
Заголовок: afxwin.h
CFont::CFont
Формирует объект CFont
.
CFont();
Замечания
Результирующий объект должен быть инициализирован с CreateFont
помощью , CreateFontIndirect
CreatePointFont
или 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_NORMAL
FW_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.
Приложения могут использовать параметры по умолчанию для большинства параметров при создании логического шрифта. Параметры, которые всегда должны быть заданы определенными значениями, и nHeight
lpszFacename
. Если 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
Эта функция совпадает с тем, что CreateFontIndirect
lfHeight
член элемента LOGFONT
интерпретируется в десятых точках, а не единиц устройства.
BOOL CreatePointFontIndirect(
const LOGFONT* lpLogFont,
CDC* pDC = NULL);
Параметры
lpLogFont
Указывает на LOGFONT
структуру, которая определяет характеристики логического шрифта. Член lfHeight
LOGFONT
структуры измеряется в десятых точках, а не логических единиц. (Например, задайте 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();