Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 30.05.2019, 08:24   #1
taras-proger77
Форумчанин
 
Регистрация: 17.12.2018
Сообщений: 419
По умолчанию Вертикальный TextOut

Код:
HFONT CreateEasyFont  (HDC DeviceContext,const std::wstring &FontName,                                                                                                                                                                                                                                  double Size, bool Vertical)
{
 /// Size задаётся в текущих единицах контекса
 /// Освобождать шрифт функцией DeleteObject
 HFONT   Result=NULL;
 LOGFONT AboutFont;
 if (DeviceContext!=NULL)
 {
  AboutFont.lfHeight        =((int)(-abs(Size)));
  AboutFont.lfWidth         =0;
  AboutFont.lfOrientation=0;
  AboutFont.lfEscapement    =0;
  AboutFont.lfEscapement    =0;
  AboutFont.lfWeight        =0;
  AboutFont.lfItalic        =0;
  AboutFont.lfUnderline     =0;
  AboutFont.lfStrikeOut     =0;
  AboutFont.lfCharSet       =0;
  AboutFont.lfOutPrecision  =0;
  AboutFont.lfClipPrecision =0;
  AboutFont.lfQuality       =0;
  AboutFont.lfPitchAndFamily=0;
  if (Vertical)
  {
   AboutFont.lfEscapement=-900;
  }
  else
  {
   AboutFont.lfEscapement=0;
  }
  wcscpy(AboutFont.lfFaceName, FontName.c_str());
  Result=CreateFontIndirect(&AboutFont);
 }
 return Result;
}
Эта функция вызвана дважды c Vertical, равным false и с Vertical, равным true, потом TextOut вывел текст обоими созданными шрифтами:
Код:
TextOut(DeviceContext, 200, 200, L"Горизонтальный", 14);
и
Код:
TextOut(DeviceContext, 400, 200, L"Вертикальный", 12);
. Size в обоих случаях одинаковый, в тексте было 20.0 в режиме MM_TEXT, реально будет 700.0 в режиме MM_HIMETRIC. От точек: x=200, y=200; x=200, y=220; x=400, y=200; x=380, y=200 проведены линии. По тесту видно, что в горизонтальном тексте засечка вертикальной «палки» буквы р легла на линию с ординатой 220, но у вертикального текста на линии с абссысой 380 оказался низ букв, не имеющих выступов вниз, а палка буквы р оказалась пересечена этой линией. Как вычислить требуемое смещение, чтоб и у вертикального текста на линию с отступом на высоту текста лёг низ выступающих частей букв?
Изображения
Тип файла: jpg 2019-05-30_11-20-28.jpg (73.1 Кб, 141 просмотров)

Последний раз редактировалось taras-proger77; 30.05.2019 в 08:42.
taras-proger77 вне форума Ответить с цитированием
Старый 01.06.2019, 15:57   #2
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 359
По умолчанию

А не проще ли использовать Coordinate Spaces and Transformations?
ResourceSpace вне форума Ответить с цитированием
Старый 01.06.2019, 18:41   #3
taras-proger77
Форумчанин
 
Регистрация: 17.12.2018
Сообщений: 419
По умолчанию

А что это?
taras-proger77 вне форума Ответить с цитированием
Старый 03.06.2019, 15:15   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 5,970
По умолчанию

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
А что это?
Это ссылка.
По ней можно пройти и прочитать что это и с чем это едят.
waleri вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вертикальный слайдер или ..? Jonny316 PHP 3 22.10.2014 12:56
удаление TextOut ? Tenebor Компоненты Delphi 5 04.05.2011 22:00
Вертикальный текст. tema654 Паскаль, Turbo Pascal, PascalABC.NET 1 31.03.2011 10:30
TextOut и шрифт Lemon2009 Общие вопросы Delphi 10 01.09.2010 12:41
TextOut xzDelphi Помощь студентам 9 23.10.2007 12:29