Навигация
Категории
C++,C#,C [19]
Уроки по средам разработки приложений с использованием C,C++,C#, а также .Net, DirectX, OpenGL и других
Delphi [14]
Уроки работы в среде программирования Delphi
Basic [13]
Уроки разработки приложений в среде Basic
DirectX [8]
Уроки по работе с DirectX, включая Direct3D и другие инструменты
Web [7]
Уроки по "Веб-программированию"
JavaScript [12]
Уроки по кодингу в Java и JavaScript
XNA [9]
Статьи и уроки программирование в среде XNA C++&C#
Профиль
Статистика
Rambler's Top100

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Locations of visitors to this page
Главная » Статьи » Программирование » C++,C#,C

Вращение текста
Как-то раз мне понадобилась функция, которая могла бы вращать текст внутри прямоугольника. Проблема состоит в том, что Windows позволяет вращать текст вокруг левого нижнего угла указанного текста. Здесь приводится решение данной проблемы.

Совместимость: VC 4-6, Win95-98, NT4, W2K, MFC

Сперва создайте CFont с углом вращения, указанным в nEscapement. Укажите Вашему DC на этот фонт и вызовите следующую функцию:

#include <cmath>
 
// pDC : указатель на контекст устройства
// str : сам текст
// rect: собственно квадрат
// nOptions: может быть комбинацией ETO_CLIPPED и ETO_OPAQUE (см. функцию ExtTextOut)
void DrawRotatedText(CDC* pDC, const CString str, CRect rect,
                     double angle, UINT nOptions = 0)
{
   // преобразуем угол в радианы
   double pi = 3.141592654;
   double radian = pi * 2 / 360 * angle;
 
   // получаем центр невращаемого текста
   CSize TextSize = pDC->GetTextExtent(str);
   CPoint center;
   center.x = TextSize.cx / 2;
   center.y = TextSize.cy / 2;
 
   // теперь вычисляем центр вращаемого текста
   CPoint rcenter;
   rcenter.x = long(cos(radian) * center.x - sin(radian) * center.y);
   rcenter.y = long(sin(radian) * center.x + cos(radian) * center.y);
 
   // в заключении рисуем текст и перемещаем его в заданном квадрате
   pDC->SetTextAlign(TA_BASELINE);
   pDC->SetBkMode(TRANSPARENT);
   pDC->ExtTextOut(rect.left + rect.Width() / 2 - rcenter.x,
                   rect.top + rect.Height() / 2 + rcenter.y,
                   nOptions, rect, str, NULL);



Источник: http://www.cyberguru.ru/cpp-sources/ui/prostoe-vraschenie-teksta.html
Категория: C++,C#,C | Добавил: gforcer (16.11.2009) | Автор: Админ
Просмотров: 733 | Комментарии: 1 | Рейтинг: 1.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Друзья сайта
Демотиваторы
Copyright Зямаев Денис © 2017