Проблема с вертикально ориентированным шрифтом.
От: Juri Россия  
Дата: 09.11.05 07:57
Оценка:
Шрифт создается функцией — CreateFontIndirect(&LFont)
Указано направление вывода — LFont.lfEscapement = 900
И все нормально работает... до поры, до времени.

При некоторых размерах шрифта происходит сбой.
А именно:
Никаких ошибок не возникает.
Шрифт создан.
Все рисуется.
Однако направление вывода — остается ГОРИЗОНТАЛЬНЫМ.

Подробности:

Вот при таких параметрах — шрифт остается горизонтальным.

LFont.lfHeight = 10;
LFont.lfWidth = 5 ;

LFont.lfWeight = 400;

LFont.lfItalic = 0;
LFont.lfUnderline = 0;
LFont.lfStrikeOut = 0;

LFont.lfEscapement = 900;
LFont.lfOrientation = 0;

LFont.lfCharSet = RUSSIAN_CHARSET;
LFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
LFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
LFont.lfQuality = PROOF_QUALITY;
LFont.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;

LFont.lfFaceName ... = ... "Small"


А если изменить всего лишь ширину LFont.lfWidth = 4; или LFont.lfWidth = 6;
То шрифт становится вертикальным.

Аналогичный сбой происходит при размерах
LFont.lfHeight = 3;
LFont.lfWidth = 1;
Но если заменить LFont.lfWidth = 2 — то опять все работает нормально.


В чем дело?
И как с этим бороться?


PS.
Пробовал выставлять SetGraphicsMode(hdc, GM_ADVANCED);
Но
Во-первых — это не будет работать в Win98.
Во-вторых — при этом требуется менять и поле LFont.lfOrientation.
А дополнительная проверка на каждом символе — это тормоза. (текст детализирован посимвольно)
Во-третьих — меняется режим расчета параметров все того же вертикального текста,
в том числе координаты размеры и прочее
и весь вертикальныйтекст улетает... (таблица отдельно — вертикальный текст отдельно)
т.е. придется писать второй комплект всех функций.
И возникает еще одна дополнительная проверка.

PPS.
Зачем мне такие мелкие шрифты?
Для организации режимов масштабируемого просмотра технической документации
( 10%, 25% ... 200% ).
Простое масштабирование битмапы, созданной при 100% не катит.
Возникают искажения, связанные с тупым масштабированием.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.