![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
Выбрать шрифт у меня вроде получилось, правда не уверен, что это был самый простой способ: с помощью EnumFontFamilies нашел параметры нужного шрифта (LOGFONT), создал объект шрифта (CreateFont) и с помощью SelectObject сделал шрифт текущим. А вот не пойму как указать размер шрифта (в pointах)
|
|||
|
||||
| Vex |
|
|||
![]() кацапосрачмученiкъ ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3103 Регистрация: 28.3.2002 Где: strawberry fields Репутация: нет Всего: 88 |
-------------------- Слава Україні. |
|||
|
||||
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
А как добится того же средствами WinAPI? Кстати, fontText - это что за объект?
|
|||
|
||||
| Vex |
|
||||||
![]() кацапосрачмученiкъ ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3103 Регистрация: 28.3.2002 Где: strawberry fields Репутация: нет Всего: 88 |
Сорри, не обратил внимание, что надо на АПИ.
CFont; -------------------- Слава Україні. |
||||||
|
|||||||
| Масяня |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Вы упустили из виду один важный момент!!!
Да шрифт будет в точках, но только если текущий режим будет MM_TEXT |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: нет Всего: 232 |
...поэтому пользуйтесь CFont::CreatePointFont / CFont::CreatePointFontIndirect...
-------------------- ![]() |
|||
|
||||
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
Люди, а вы ничего не перепутали. Я тут получше почитал help.
lf.lfHeight - размер в пикселах, а если нужен размер в поинтах -
|
|||
|
||||
| Масяня |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
А вот что в MSDN пишут:
Это сообщение отредактировал(а) Масяня - 9.6.2004, 09:51 |
||||
|
|||||
| youri |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
Масяня, ты все правильно написал
А теперь, если посмотреть описание функции SetMapMode, то там (Win32 Programmer's Reference) написано
А дальше там (Win32 Programmer's Reference, CreateFont) написано
|
||||||
|
|||||||
| Масяня |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
youri, это подойдет для экрана, а для принтера - там уже должно быть не 72, а 300 или более... а можно установить какой-нибудь MapMode, например, HIMETRIC 500 = 5 мм. перевести их с помощью LPtoDP() в ед. уст-ва, а затем установить другой режим и затем DPtoLP() и получишь нужные лог. единицы!
А самое главное это то, что когда будешь выводить текст этим шрифтом, то надо восстанавливать "родной" MapMode для вывода текста!!! Поэтому лучше всего для печати и отображения подходит MM_TWIPS т.к. можно один раз сделать фонт и потом его выводить в контекст окна или в контекст принтера (по умолчанию он в твипах!) и не надо будет думать о масштабе. Ну, а если же хочешь работать в MM_TEXT, то прийдется каждый раз пересчитывать высоту текста для печати и вывода в окно Это сообщение отредактировал(а) Масяня - 10.6.2004, 00:45 |
|||
|
||||
| Oleg IT |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 6.7.2004 Репутация: нет Всего: нет |
Хотел бы продолжить тему.
Проблема такая, (я её уже выносил на обсуждение, но ответов 0). Работаю с ::SetMapMode(m_DC,MM_TWIPS); Размер шрифта задаю в миллиметрах и перевожу их в девайсные точки так int D = MM_to_LP(Hf); где Hf высота шрифта в миллиметрах. int MM_to_LP(float mm) { ::GetViewportExtEx(DC,&m_sizeVpExt); ::GetWindowExtEx(DC,&m_sizeWinExt); float x = mm/25.4f*(float)GetDeviceCaps(DC,LOGPIXELSX); return (int)MulDiv(x, abs(m_sizeWinExt.cx), abs(m_sizeVpExt.cx)); } Но размер текста на экране не совподает с размерами на притере. В чем дело? |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Вроде бы уже разобрались, но можно и без Indirect:
, потом выбрать старый и удалить новый. Это сообщение отредактировал(а) Hroft - 4.12.2004, 11:13 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |