이탤릭체 텍스트를 출력하려면
물론 가능합니다. 어떤 하드웨어 장치는 회전하는 래스터 글꼴을 지원하기도 합니다.
하드웨어가 추가적인 문자 회전 기능을 지원하는지 확인하려면 TEXTCAP 파라미터를 전달해
CDC::GetDeviceCaps를 호출하면 됩니다. 단, 트루타입이나 GDI 출력 글꼴을 사용중이라면
GetDeviceCaps를 호출할 필요가 없습니다.
LOGFONT 구조체의 ifEscapement 멤버로 텍스트의 기준선과 x축의 각을 결정할 수 있는데 이때
주의해야 할 점은 실제 숫자보다,정확히 10배를 크게 지정해야 한다는 것입니다. 가령 45도만큼 회전한
글꼴을 생성하려면 ifEscapement를 450으로 설정하면 됩니다.
그리고 모든 글꼴이 현재 좌표 체계를 기준으로 같은 방향으로 기울이려면 ifClipPrecision 멤버의
CLIP_LH_ANGLES 비트를 설정해야 합니다. 이렇게 하지 않으면 부분적으로 글꼴이 반대 방향으로
회전할 것입니다.
다음 코드는 15도로 기울어진 문자열을 출력하기 위해 14포인트의 Arial 글꼴을 사용한 예입니다.
void CSampleleView::OnDraw(CDC* pDC) {
// 창의 크기를 결정한다.
CRect rcClient;
GetClientRect(rcClient);
// 문자열을 생성한다.
CString str(_T("마소가 14주년을 맞이 합니다!"));
//빨간색 텍스트를 출력한다.
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255, 0, 0));
CFont font; //글꼴 객체
LONGFONT stFont; //글꼴 정의
//변경되지 않을 글꼴 속성을 설정한다.
memset(&stFont, 0, sizeof(LONFONT));
stFont.lfHeight=MulPiv(14, -pDC->GetDeviceCaps(LOGPIXELSY), 72);
stFont.lfWeight=FW_NORMAL;
stFont.lfClipPrecision=CLIP_LH_ANGLES;
strcpy(stFont.lfFaceName, "Arial");
//15 회전한 텍스트를 출력한다.
for(int nAngle=0; nAngle<3600; nAngle +=150) {//새로운 각을 지정한다.stFont.lfEscapement=nAngle;//글꼴을 생성하고 장치 컨텍스트로 선택한다.font.CreatFontIndirect(&stFont);CFont* pOldFont=pDC->SelectObject(&font);
//텍스트를 출력한다.
pDC->SelectObject(pOldFont);
font.DeletObject();