Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > GDI+. Как нарисовать строку повертикали?


Автор: voov 21.5.2008, 14:33
Нужно нарисовать строку по вертикали (повернутую на 90 градусов против часовой стрелки), используя библиотеку GDI+. Какими способами можно это сделать?

Автор: voov 5.6.2008, 14:16
Неужели совсем нет вариантов?

Я нашел следующий способ.
Код

    Graphics g(cdc);   // контекст для рисования, где нужно нарисовать строку повертикали.
    wideString = L"some text";   // строка
    Bitmap stringBuffer(100, 20);  // создаем временный буфер, куда будем рисовать строку
    Graphics stringGr(&stringBuffer);  // и контекст для него
    stringGr.DrawString(wideString, -1, pFont, PointF(0, 0), pFormat, pBrush);  // рисуем строку
    stringBuffer.RotateFlip(Rotate270FlipNone);  // поварачиваем буфер как нам нужно
    g.DrawImage(&stringBuffer, x, y);  // и рисуем содержимое буфера в наш контекст для рисования в том месте, где нам нужно

Но я не уверен, что этот способ оптимальный. Может кто сможет предложить способ получше?

Автор: Earnest 5.6.2008, 18:55
Насчет GDI+ не скажу, а через "чистый" GDI делается так: создаешь фонт с "повернутыми" символами (просто угол наклона символа в структуре LOGFONT ставишь) и рисуешь через DrawText, указывая, конечно, соответствующий RECT.
Наверняка в GDI+ можно найти аналоги.

Автор: Rapalex 6.6.2008, 12:01
Самое простое повернуть систему координат, и да и всё.

Автор: voov 6.6.2008, 15:45
Цитата

Насчет GDI+ не скажу, а через "чистый" GDI делается так: создаешь фонт с "повернутыми" символами (просто угол наклона символа в структуре LOGFONT ставишь) и рисуешь через DrawText, указывая, конечно, соответствующий RECT.
Наверняка в GDI+ можно найти аналоги.

Пробовал. Брал рабочий пример на Делфи с таким способом. Делал аналогично - Не получилось. Может есть пример на С с GDI, о котором ты говоришь?

Цитата

Самое простое повернуть систему координат, и да и всё.

Это как?

Автор: Earnest 7.6.2008, 08:02
Примера под рукой нет -давно когда-то делала, так что точно работает, но вполне могут быть какие-то тонкости...
Попробуй пошарить на codeproject

Автор: voov 9.6.2008, 11:21
Нашел еще такую штуку как StringFormatFlags. Если ему установить StringFormatFlagsDirectionVertical, то строка рисуется вертикально, но повернутая на 90 градусов по часовой стрелке. 
А чтобы строка была повернута на 90 градусов против часовой, используется TranslateTransform и RotateTransform из класса Graphics вкупе с StringFormatFlags - это на codeproject.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)