Вращение строк текста

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

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz