Выравнивание вертикального текста

Тема в разделе "WASM.WIN32", создана пользователем IceStudent, 6 май 2006.

  1. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Приветствую. Бьюсь часа три, не могу понять, как выравнивать текст по вертикали в GDI.



    Вообще, нужно нарисовать текст вертикально снизу вверх с выравниванием по верху (то есть, по последнему символу).



    Создал шрифт с lfEscapement = 900. Текст отрисовываю с помощью DrawText. Но он виден, только если uFormat = DT_BOTTOM, при остальных флагах его не видно. Вопрос, почему?



    Далее, пытаюсь выравнять по правому краю окна, получается. Но по верхнему краю не выходит. Во-первых, снизу получается какой-то отступ (почему?), а во-вторых, верхняя граница строки обрезается. Что делаю не так?



    И ещё: что означают поля SIZE в GetTextExtentPoint32, когда текст вертикален? То же, что и для горизонтального (cx - длина текста (от 1 до последнего символа), cy- высота), только cx становится вертикалью?



    Код:
    Код (Text):
    1. SIZE off;
    2. GetTextExtentPoint32(dc,szText,nSize,&off);
    3.  
    4. RECT rect;
    5. GetClientRect(&rect);
    6.  
    7. // горизонтальное выравнивание по правому краю
    8. rect.left = rect.right - off.cy;
    9.  
    10. // вертикальное выравнивание по верхнему краю
    11. rect.bottom = rect.top + off.cx;
    12.  
    13. // смотрим границы
    14. Rectangle(dc,rect.left,rect.top,rect.right,rect.bottom);
    15. // собственно текст
    16. DrawText(dc,szText,nSize,&rect,DT_BOTTOM|DT_SINGLELINE);




    [​IMG] _1774988718__vtext.png