Шрифты в Rich Edit

Тема в разделе "WASM.WIN32", создана пользователем SolidCode, 8 май 2005.

  1. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    Ламерский, наверное, вопрос.

    Но я не могу понять, как оптимально узнать, какой шрифт в такой-то части текста, докуда он идёт, прежде чем что-нибудь изменяется, напр. высота или цвет букв. Не разумно с помощью SendMessage узнавать формат каждой буквы последовательно.
     
  2. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Если тебя устроит, можно так:



    SCF_SELECTION equ 1

    invoke SendMessage,hRichEd,SCF_SELECTION,addr _charformat



    Структура CHARFORMAT, на которую указывает lParam, получит атрибуты первого символа, а член dwMask этой структуры будет определять, какие атрибуты символов одинаковы для всех выделенных символов.



    Например, testируем dwMask на CFM_SIZE. Если нет такого, выделенный текст состоит из символов разного размера, поэтому в control'е с выбором размера шрифта ставим, например, пробелы. Так по-моему и делают редакторы.
     
  3. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    htthttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/sh ellcc/platform/commctls/richedit/richeditcontrols.asp
     
  4. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    dr_dred

    У меня есть это на машине в SDK. Это вариант несколько быстрее, чем мой, но всё-равно не то.

    Один вариант я нашёл: использовать отрисовшик RichEdit для своих операций.

    Но что делать с экспортом из RichEdit в HTML?
     
  5. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Привет, SolidCode! Как отдохнул на выходных, что-то тебя не слышно было.



    > использовать отрисовшик RichEdit для своих операций

    Эх, если бы я знал что такое "отрисовщик"! Объясни, если не трудно.

    > У меня есть это на машине в SDK.

    Хе-хе. Но описания следующих констант там точно нету:



    DISPLAY_DEVICE_MODESPRUNED The device has more display modes than its output devices support.



    DISPLAY_DEVICE_REMOVABLE The device is removable; it cannot be the primary display.



    DISPLAY_DEVICE_MULTI_DRIVER тоже не знаю.





    P.S. И все же.

    Задача.

    "Предложенный способ обнаружения мониторов не идеален. При опробации на видеокартах nVidia он находил второй монитор лишь в том случае, если активизирован режим Dualview." Почему?



    Решение.

    Сделай так:

    Properties->Settings->Выбери на картинке второй монитор и посмотри на галочку, ту, что внизу (Extend my Windows desktop onto this monitor.).



    Вот несколько уравнений:



    <ol type=1>"Одно устройство" + галочка = "DualView"

    "Клон" + галочка = "DualView"

    "Гор.\Верт. расширение" + галочка = "DualView"

    "DualView" - галочка = "Одно устройство"</ol>



    Поэтому два монитора только при "DualView".

    Ответ: программа определяет мониторы, на которые расширен рабочий стол.
     
  6. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    dr_dred

    О, молодец! Классно, что обратил внимание на это. Я проглядел.

    В любом случае моя прога находит мониторы тем способом, который официально описан в SDK.

    Согласно теории, описанной в моей статье, можно сделать прогу, с помощью которой можно попытаться найти другие мониторы, не находящиеся с помощью того метода. Фактически делаем окно и управление, для его месторасположения на виртуальном экране. Потом можно поводить это окно (основываясь на координатах основного монитора) вокруг. Авось найдутся другие, т.е. появится это окно на одном из ненайденных мониторов. Это может вырасти в инструмент для поиска ненайденных мониторов. Вряд ли такие мониторы будут расположены в далеке от основного монитора.





    Это было сказано по поводу обзорной статьи о RichEdit. А те флаги, о которых ты говорил, есть в SDK, но отсутствуют в MSVC++6.0 и в пакете MASM32. А другого у меня нет.



    Теперь по поводу отрисовщика.

    Этоим собственным термином я назвал функцию, которая занимается рисованием текста и другого содержимого Rich Edit контрола в его окне. Она должна быть. Скорее всего вызывается в ответ на WM_PAINT. Наверное и в других случаях. Он должен уметь интерпретировать RTF и реализовать рисование его содержимого в отображаемой части окна RE.



    А ещё. Кто знает, как интерактивно включать и выключать WordWrap в RE?
     
  7. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia


    Слушай, а где ты этот kit взял? Я пользуюсь стареньким win32.hlp, там много чего просто нет.





    Интереснейший вопрос. А что-нибудь типа



    invoke GetWindowLong,hRichEd,GWL_STYLE

    xor eax,WS_HSCROLL

    SetWindowLong,hRichEd,GWL_STYLE,eax



    не пробовал?



    В обычных edit-контролах это работает странным образом при установке режима: текст переносится, а HSCROLL остается видимым, пока размеры окна не изменишь. Приходится создавать новый контрол с новым стилем, копировать туда через выделенную память содержимое ранее существовавшего контрола, который следом будет разрушен.