Вы можете вращать масштабируемые (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); |