DrawText и масштабирование с сохранением переноса слов

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 15 янв 2010.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Обнаружилась такая проблема. Если рисовать текст с параметром DT_WORDBREAK, то пропорциональное масштабирование RECT-а и размера шрифта не сохраняет места переноса слов. Вот пример:

    [​IMG]

    Как это можно побороть? Хочется масшабировать так, чтобы росло разрешение, но перенос слов не менялся.
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а если Rect 300x150 и фонт 30х15, масштабировать
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    max7C4

    Не понял? Я ж вроде бы и масштабирую - уможил все размерности на 2.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Надо динамически получать размер ректа. Соответсвующие функи имеются.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Что значит динамически? Ты про DT_CALCRECT чтоли? Да и как тут поможет знание размера?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Тогда напиши как масштабируешь.
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Блин, ну вроде ж все из рисунка должно быть ясно :)

    1. Создаю фонт размером 30х10. Создаю окно 300х150, рисую DrawText в рект 300х150.
    2. Создаю фонт размером 60х20. Создаю окно 600х300, рисую DrawText в рект 600х300.

    Как можно заметить - все размерности удвоены, то есть отмасштабированы. Результат - переносы слов в разных местах.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Результат не показывает применяемых методов.
    В общем как я и писал надо вычислять размеры текста - GetTextExtentPoint.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Ну вот буду знать я размеры текста - как мне это поможет-то?
     
  10. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    будешь знать где разрывы делать, а всё остальное ручками.
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    cupuyc

    Ненене, Девид Блейн, никаких ручками :) Ручками-то ясен болт можно все сделать. Я хочу чтобы переносы стоились апями.
     
  12. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _DEN_
    Надо полагать дело в том, что ты не масштабируешь поля отступа от краёв прямоугольника.
    см. DRAWTEXTPARAMS в DrawTextEx.
     
  13. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Y_Mur не, скорее всего дело в округлении - шрифты векторные.
     
  14. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Шрифт 60х20?! Откуда такие шрифты? Шрифт задаётся его высотой, которая выражена в points. Затем заполняется структура LOGFONT по формуле вот отсюда:
    http://msdn.microsoft.com/en-us/library/dd145037(VS.85).aspx
    затем вызывается CreateFontIndirect().
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    AsmGuru62

    Заработало! Заюзал CreateFontIndirect, масштабирую рект и высоту одним и тем же множителем, а ширину ставлю в ноль. И все масштабируется чотко - переносы сохраняются!

    Вот только этого не понял. Доктор, что это?