Учебное пособие: Вывод текста
Остальные параметры этой функции:
hDC - контекст-приемник изображения;
lpfnDraw - функция, осуществляющая вывод текста в промежуточный контекст устройства. Если этот параметр NULL, то используется TextOut(), иначе Вы должны передать адрес связанной с вашим приложением функции (см. процедуру MakeProcInstance() ), имеющей следующий вид:
BOOL CALLBACK GrayStringProc( hDC, lpParam, cChars ) {
// drawing text
return 1;}
параметры lParam и cChars передаютсяизфункции GrayString(); hDC указываетпромежуточныйконтекстустройства. Вывод надо осуществлять начиная с позиции 0,0;
Функция должна вернуть не 0, если все в порядке. Значение 0 указывает на ошибку и приводит к завершению работы функции GrayString().
lParam - если параметр lpfnDraw равен NULL, то lParam является дальним указателем на выводимую строку символов, иначе это может быть любое значение, используемое функцией GrayStringProc();
cChars - число символов в выводимой строке;
nX и nY - позиция для вывода
nWidth - размеры создаваемого промежуточного битмапа, который будет nHeight - принимать строку.
Некоторые особенности применения функции GrayString():
контекст-приемник изображения должен использовать координаты MM_TEXT
атрибуты контекста–приемника НЕ копируются в промежуточный контекст устройства, он использует значения атрибутов по умолчанию;
если cChars равно 0, то GrayString() предполагает, что lParam является указателем на asciiz строку (оканчивающаяся нулевым байтом) и вычисляет ее длину
если nWidth и nHeight равны 0, то GrayString() будет сам вычислять размеры битмапа для строки, указанной параметрами lParam и cChars
большинство современных адаптеров позволяют отображать достаточное число оттенков серого для вывода серых строк. Вы можете проверить, какой метод надо использовать (GrayString() или TextOut() с серым цветом текста), воспользовавшись функцией
rgbGrayText= GetSysColor( COLOR_GRAYTEXT );
если rgbGrayText равно 0 (черный цвет), то Вы должны использовать функцию GrayString(), иначе Вы можете установить серый цвет и воспользоваться функцией TextOut():
SetTextColor( hDC, rgbGrayText ); ...
Шрифты
После изучения основных средств работы с текстом мы перейдем к изучению шрифтов. Для того, что бы дальнейший материал был более понятным, нам надо разобраться с основами классификации шрифтов в Windows. При рассмотрении данной классификации следует иметь в виду ее условность и неизбежное применение типографических терминов. В настоящее время не существует общепринятой системы классификации шрифтов, более того многие термины трактуются совершенно различным образом в разных системах классификации. (Так, например, italic может обозначать наклонный шрифт, наклонный курсив или узкий шрифт, у которого горизонтальные штрихи толще вертикальных).
Все шрифты в Windows могут быть разделены на две группы:
шрифты устройства
шрифты GDI
Со шрифтами устройств мы разбираться не будем, так как это очень специфичные шрифты и их свойства жестко определены возможностями аппаратуры. Основное внимание мы сосредоточим на шрифтах GDI.
Классификация шрифтов GDI
Для шрифтов GDI может быть выделено несколько классифицирующих признаков, определяющих особенности шрифта.