Управление Rich Edit: Предотвратить Богатое Форматирование? - PullRequest
2 голосов
/ 20 мая 2011

Как запретить пользователю изменять что-либо , кроме текста в Win32 Rich Edit элемент управления?

(т.е. они не должны иметь возможностьизменить форматирование любого текста, добавить графику и т. д .; если они копируют и вставляют новый текст, следует сохранить только текст и соответствующее форматирование следует отбросить.)

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Этот ответ, вероятно, немного запоздал, но для всех, кто ищет ответ на эти вопросы, лучший способ, которым я нашел, иметь полный контроль над операциями вставки в элементе управления Rich edit - это обеспечить реализацию IRichEditOleCallback::QueryAcceptData и затем возвращает S_FALSE, чтобы остановить их все вместе или отфильтровать определенные форматы буфера обмена, изменив параметр lpcfFormat.

Функция CRichEditView :: QueryAcceptData в MFC предоставляет отличный пример того, как это можно сделать. Это будет работать для всех видов операций вставки, включая перетаскивание, поэтому это лучший способ получить полный контроль над происходящим.

2 голосов
/ 01 августа 2013

еще позже :)

SendMessage(wndEdit, EM_SETEDITSTYLE, SES_EMULATESYSEDIT, SES_EMULATESYSEDIT)

, кажется, делает свое дело: вставка вставляет простой текст, и горячие клавиши форматирования отключены.

SES_EMULATESYSEDIT : когда этот бит включен, расширенное редактирование пытается эмулировать элемент управления системного редактирования (по умолчанию: 0).

Вы по-прежнему сохраняете некоторые «бонусные» функции richedit, такие как полосы прокрутки по требованию.

1 голос
/ 20 мая 2011

Я никогда не находил особенно элегантный способ справиться с этим: то, что я делал в прошлом:

1) Поймать сообщения WM_KEYDOWN для элемента управления и отбросить все клавиши форматирования (Ctrl + E, J, R, L, 1,2,5, + и Ctrl + Shift + A, 7)

2) Поймать все операции вставки, перехватывая сообщения WM_COMMAND с идентификатором ID_EDIT_PASTE, и заменить сообщение вставки сообщением EM_PASTESPECIAL, CF_UNICODETEXT для элемента управления. (Это с MFC: в зависимости от того, какую платформу или язык вы используете, для этого может потребоваться перехват Ctrl + V и аналогичные, а не ID_EDIT_PASTE.)

Не очень, я признаю, но, похоже, работает.

...