Вы можете вращать масштабируемые (TrueType) шрифты под любым углом. Это используется для надписей диаграмм и других иллюстраций. Нижеследующий пример вращает, строку с шагом 10 градусов вокруг центра рабочей области, изменяя значения членов lfEscapement и lfOrientation структуры LOGFONT, использованной для создания шрифта:
RECT rc;
int angle;
HFONT hfnt, hfntPrev;
LPSTR lpszRotate = "String to be rotated.";
// Выделяем память для структуры LOGFONT.
PLOGFONT plf = (PLOGFONT) LocalAlloc(LPTR, sizeof(LOGFONT));
// Задаем имя и толщину гарнитуры шрифта.
lstrcpy(plf->lfFaceName, "Arial");
plf->lfWeight = FW_NORMAL;
// Извлекаем размеры рабочего прямоугольника.
GetClientRect(hwnd, &rc);
// Устанавливаем режим фона, который прозрачный для операции вывода текста.
SetBkMode(hdc, TRANSPARENT);
// Рисуем строку 36 раз, вращая ее на 10 градусов
// против часовой стрелки каждый раз.
for (angle = 0; angle < 3600; angle += 100)
{
plf->lfEscapement = angle;
hfnt = CreateFontIndirect(plf);
hfntPrev = SelectObject(hdc, hfnt);
TextOut(hdc, rc.right / 2, rc.bottom / 2,
lpszRotate, lstrlen(lpszRotate));
SelectObject(hdc, hfntPrev);
DeleteObject(hfnt);
}
// Переустанавливаем режим фона в его состояние по умолчанию.
SetBkMode(hdc, OPAQUE);
// Освобождаем память распределенную для структуры LOGFONT.
LocalFree((LOCALHANDLE) plf);
|