Я хочу нарисовать текст на поверхность GDI и повернуть этот текст на 90 градусов против часовой стрелки. Я бы предпочел использовать DrawText для рисования текста, потому что он поддерживает возврат каретки. Я попытался использовать шрифт с lfEscapement (см. Код ниже), но линия не вращается - одна строка получается над другой. Есть ли возможность повернуть текст? Или визуализировать без вращения и вращать весь контекст устройства?Поверните текст на 90 градусов с помощью GDI
Нормальный макет текста:
повернутого (желаемый результат):
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
LOGFONT lf = {0};
HANDLE hFont;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfWeight = FW_NORMAL;
lstrcpy(lf.lfFaceName, _T("Tahoma"));
lf.lfEscapement = 90;
lf.lfHeight = 30;
hFont = CreateFontIndirect (&lf);
hFont = (HFONT)SelectObject (ps.hdc, hFont);
RECT RectBody = {10,lf.lfHeight+10,::GetSystemMetrics(SM_CXSCREEN)-10,::GetSystemMetrics(SM_CYSCREEN)-lf.lfHeight-20};
{
ScopedLock lock(me->m_mutex);
DrawText (ps.hdc, me->GetMessageString().c_str(), (int)me->GetMessageString().length(), &RectBody, 0);
}
hFont = (HFONT)SelectObject (ps.hdc, hFont);
DeleteObject (hFont);
EndPaint(hWnd, &ps);
break;
}
Спасибо за ваш ответ, я попробовал TA_BASELINE с очень странными результатами (текст отображается в верхней части экрана). Я видел артикул на кодепроекте. Единственная проблема, которую я вижу, это то, что мне нужно самостоятельно обрабатывать возврат каретки/длину строки. –
Еще одно предложение, по этой ссылке на codeguru, есть примеры для поворота растровых изображений. Вы можете нарисовать текст горизонтально в растровом формате совместимого DC на вашем основном контроллере постоянного тока, а затем использовать его в главном DC. http://www.codeguru.com/cpp/g-m/bitmap/specialeffects/article.php/c1743 –