Rotating Lines of Text

You can rotate TrueType fonts at any angle. This is useful for labeling charts and other illustrations. The following example rotates a string in 10-degree increments around the center of the client area by changing the value of the lfEscapement and lfOrientation members of the LOGFONT structure used to create the font.

RECT rc;

int angle;

HFONT hfnt, hfntPrev;

LPSTR lpszRotate = "String to be rotated.";

/* Allocate memory for a LOGFONT structure. */

PLOGFONT plf = (PLOGFONT) LocalAlloc(LPTR, sizeof(LOGFONT));

/* Specify a font typeface name and weight. */

lstrcpy(plf->lfFaceName, "Arial");

plf->lfWeight = FW_NORMAL;

/* Retrieve the client-rectangle dimensions. */

GetClientRect(hwnd, &rc);

/*

* Set the background mode to transparent for the

* text-output operation.

*/

SetBkMode(hdc, TRANSPARENT);

/*

* Draw the string 36 times, rotating 10 degrees

* counter-clockwise each time.

*/

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);

}

/* Reset the background mode to its default. */

SetBkMode(hdc, OPAQUE);

/* Free the memory allocated for the LOGFONT structure. */

LocalFree((LOCALHANDLE) plf);