Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2014, 13:11   #1
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию Вывод текста на экран в вертикальном направлении

Прошу помощи: не работает поворот строки. Изменение ширины шрифта, например, работает.
Вот текст обработчика нажатия кнопки:
Код:
void CButtonTest::OnGreenButton() 
{
	// TODO: Add your control notification handler code here
	RECT MyRect;
	CDC *MyDC;
	CFont VertFont, *SysFont;
	LOGFONT VertLogFont, SysLogFont;
	GetWindowRect(&MyRect);
	ScreenToClient(&MyRect);
	SysFont=GetFont();
	SysFont->GetLogFont(&SysLogFont);
	VertLogFont=SysLogFont;
	VertLogFont.lfEscapement=VertLogFont.lfOrientation=9;
	VertLogFont.lfWidth=15;
	VertLogFont.lfWeight=1;
	VertFont.CreateFontIndirect(& VertLogFont);
	MyDC=GetDC();
	SysFont=MyDC->SelectObject(&VertFont);
	MyDC->ExtTextOut(40,40,ETO_OPAQUE,&MyRect,_T("Vert string"),NULL);
	MyDC->SelectObject(SysFont);
	VertFont.DeleteObject();
}
Dmitry_B вне форума Ответить с цитированием
Старый 07.12.2014, 13:41   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Прочитайте *внимательно* в каких единицах задаются lfEscapement и lfOrientation.
Если надо, воспользуйтесь словарем.
waleri вне форума Ответить с цитированием
Старый 07.12.2014, 13:54   #3
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Прочитайте *внимательно* в каких единицах задаются lfEscapement и lfOrientation.
Если надо, воспользуйтесь словарем.
Десятые доли градуса? Пробовал менять значение 9 на 90, 900 и 9000- результат тот же.
Dmitry_B вне форума Ответить с цитированием
Старый 07.12.2014, 19:03   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Явно не все фонты поддерживают ротацию.
Стандартно у меня выдает MS Sans Serif и с ним не работает.
Если задать lfFaceName "Courier New" то все работает.
waleri вне форума Ответить с цитированием
Старый 07.12.2014, 20:29   #5
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию Выяснил. В который раз убедился, что MSDN - дерьмо.

Код:
void CButtonTest::OnGreenButton() 
{
	// TODO: Add your control notification handler code here
	RECT MyRect;
	CDC *MyDC;
	CFont VertFont, *SysFont;
	LOGFONT VertLogFont, SysLogFont;
	GetWindowRect(&MyRect);
	ScreenToClient(&MyRect);
	MyDC=GetDC();
	SetGraphicsMode(MyDC->m_hDC, GM_ADVANCED);	// М-ть пере-ть! Почему это в хелпе ExtTextOut было не написать?!
	SysFont=GetFont();
	SysFont->GetLogFont(&SysLogFont);
	VertLogFont=SysLogFont;
	VertLogFont.lfEscapement=VertLogFont.lfOrientation=90;
	VertLogFont.lfWidth=15;
	VertLogFont.lfWeight=1;
	VertFont.CreateFontIndirect(& VertLogFont);
	SysFont=MyDC->SelectObject(&VertFont);
	MyDC->ExtTextOut(40,40,ETO_OPAQUE,&MyRect,_T("Vert string"),NULL);
	MyDC->SelectObject(SysFont);
	VertFont.DeleteObject();
}

Последний раз редактировалось Dmitry_B; 07.12.2014 в 20:30. Причина: Для ясности
Dmitry_B вне форума Ответить с цитированием
Старый 07.12.2014, 20:29   #6
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию

Так работает.
Dmitry_B вне форума Ответить с цитированием
Старый 08.12.2014, 00:50   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
В который раз убедился, что MSDN - дерьмо.
Может научится читать для начала...

Цитата:
/ М-ть пере-ть! Почему это в хелпе ExtTextOut было не написать?!
А на кой она там?
p51x вне форума Ответить с цитированием
Старый 08.12.2014, 21:48   #8
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А на кой она там?
А на кой нужна функция, которая не работает описанным образом, без вызова другой функции? А если она работать самостоятельно не может, то почему это явно не указано в ее описании?
Dmitry_B вне форума Ответить с цитированием
Старый 08.12.2014, 22:38   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А вас не смущает, что, например, большая часть директх или опенгл функции не работает без их инициализации и в каждой из этих функции в описании не указано это...
p51x вне форума Ответить с цитированием
Старый 08.12.2014, 22:44   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Dmitry_B Посмотреть сообщение
А на кой нужна функция, которая не работает описанным образом, без вызова другой функции? А если она работать самостоятельно не может, то почему это явно не указано в ее описании?
Функции, рисующих текст - вагон и маленькая тележка. По вашей логике все это надо будет описывать в каждой из них.

С другой стороны как использовать lfEscapment / lfOrientation описано в документации LOGFONT.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод цветного текста на экран dima-intro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 16.10.2011 22:44
Вывод на экран текста из файла Snegovic Помощь студентам 4 16.09.2010 08:08
Вывод русского текста на экран Ildarets Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 25.01.2009 18:08
си++ вывод текста на экран Sjava Помощь студентам 1 25.12.2008 20:03