Может ли CRichEditCtrl знать, когда кто-то устанавливает его текст? - PullRequest
1 голос
/ 18 февраля 2010

При вводе в CRichEditCtrl генерируются сообщения EN_CHANGE. Однако MSDN говорит:

Rich Edit: поддерживается в Microsoft Rich Изменить 1.0 и позже. Получить EN_CHANGE уведомления, укажите ENM_CHANGE в маске, отправленной с Сообщение EM_SETEVENTMASK. За информация о совместимости богатые редактировать версии с различными версии системы, см. О Rich Edit Органы управления.

Уведомление EN_CHANGE не отправлено когда используется стиль ES_MULTILINE и текст отправляется через WM_SETTEXT .

У меня есть несколько диалогов, использующих многострочный элемент управления rich edit, фактически мой пользовательский класс CMyRichEdit. Этот класс автоматически выполняет анализ при изменении текста, но в важном случае, когда диалоговое окно изначально заполнено, уведомление не отображается.

Смысл в том, чтобы избежать необходимости менять нашу кодовую базу более чем абсолютно необходимо - новый элемент управления заменяется на уже существующий. Погоня за каждым экземпляром, где используется getDlgItem(IDC_EDIT)->SetWindowText или где DDX_Text(pDX, IDC_EDIT, m_strEdit) автоматически связывает содержимое строки с элементом управления, будет означать много ошибок в коде и повторного тестирования всего измененного.

Есть ли простой способ? Может ли MyRichEdit ловить свои собственные WM_SETTEXT сообщения?

1 Ответ

3 голосов
/ 18 февраля 2010
ON_MESSAGE(WM_SETTEXT, OnSetText)

// fires every time someone calls SetWindowText
LRESULT MyRichEditCtrl::OnSetText(WPARAM wParam, LPARAM lParam)
{
    return CWnd::Default();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...