RichEdit 8 и Direct2D/DirectWrite
От: Okta  
Дата: 28.03.18 15:02
Оценка:
Здравствуйте! Подскажите плиз, как в Windows 10 стандартный RichEdit контрол переключить в режим прорисовки с помощью DirectWrite. Указатель на ITextDocument2 получаю, а что дальше с ним делать не могу разобраться. Заранее спасибо!
richedit direct2d directwrite
Re: RichEdit 8 и Direct2D/DirectWrite
От: c-smile Канада http://terrainformatica.com
Дата: 29.03.18 03:31
Оценка:
Здравствуйте, Okta, Вы писали:

O>как стандартный RichEdit контрол переключить в режим прорисовки с помощью DirectWrite.


Что-то мне говорит что никак. Если оно использует вывод текста старым ламповым GDI, то заставить его выводить DirectWrite не удастся.
Re[2]: RichEdit 8 и Direct2D/DirectWrite
От: Okta  
Дата: 29.03.18 17:28
Оценка:
CS>Что-то мне говорит что никак. Если оно использует вывод текста старым ламповым GDI, то заставить его выводить DirectWrite не удастся.

Да нет, в Windows 8 стандартный компонент RichEdit обновился до версии 8, и в нём появилась поддержка DirectWrite. MS Office 2013 также использует его для отображения текста. Об этом написано, например, тут https://blogs.msdn.microsoft.com/murrays/2013/09/07/richedit-8-feature-additions/#D2D . А в этой статье http://ko.com.ua/office_2013_risuem_po-novomu_65295 прямо указывается относительно Windows 8, что ‘в частности, стандартный элемент RichEdit может использовать либо GDI, либо Direct2D’. Но при этом всё, что я смог найти, это функция ITextServices2::TxDrawD2D, которая для безоконной (Windowless Rich Edit Control) версии контрола позволяет прорисовать его содержимое в переданный ID2D1RenderTarget. И всё. Тоесть, вроде, можно, но как – нигде не написано…
Re[3]: RichEdit 8 и Direct2D/DirectWrite
От: c-smile Канада http://terrainformatica.com
Дата: 29.03.18 21:37
Оценка:
Здравствуйте, Okta, Вы писали:

CS>>Что-то мне говорит что никак. Если оно использует вывод текста старым ламповым GDI, то заставить его выводить DirectWrite не удастся.


O>в Windows 8 стандартный компонент RichEdit обновился до версии 8, и в нём появилась поддержка DirectWrite.


Написано что это какой-то другой Immersive RichEdit:

A version of RichEdit 8 has been created for the immersive environment

Re[4]: RichEdit 8 и Direct2D/DirectWrite
От: Okta  
Дата: 02.04.18 07:02
Оценка: 15 (2)
CS>Написано что это какой-то другой Immersive RichEdit:
Как я понял, это для ‘on tablets and on the Windows Phone 8’

Ну вообщем, я разобрался и уже сделал. Видимо, заставить сам стандартный контрол рисовать текст используя DirectWrite нельзя. Но есть другой подход с помощью Windowless Rich Edit. Нужно сделать свою реализацию ITextHost2 и в функции TxGetPropertyBits возвращать TXTBIT_D2DDWRITE, а в обработчике WM_PAINT вызывать ITextServices2::TxDrawD2D. И мы получаем Rich Edit контрол с прорисовкой в нашем собственном окне с помощью DirectWrite.

Ссылки, если кому понадобится:
https://support.microsoft.com/en-us/help/270161/windowlessre-sample-illustrates-how-to-implement-a-windowless-rich-edi
http://code.taobao.org/svn/soui2/third-part/richedit/SRC/_host.h
http://code.taobao.org/svn/soui2/third-part/richedit/SRC/host.cpp
https://www.winehq.org/pipermail/wine-patches/2009-January/067991.html
Re[2]: RichEdit 8 и Direct2D/DirectWrite
От: uuuser  
Дата: 03.04.18 18:57
Оценка: -1
Здравствуйте, c-smile, Вы писали:

O>>как стандартный RichEdit контрол переключить в режим прорисовки с помощью DirectWrite.


CS>Что-то мне говорит что никак. Если оно использует вывод текста старым ламповым GDI, то заставить его выводить DirectWrite не удастся.


да ладно, чего так слабо то? надо сразу заявлять, что винда до сих пор рисует всё процессором и вам поможет только благодатный sciter...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.