Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод текста в CRichEditCtrl, При нажатой левой кнопой мыши 
:(
    Опции темы
GSasha
Дата 4.6.2010, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 23.3.2008
Где: Ukraine

Репутация: нет
Всего: нет



Есть такая проблема:
Попытка натайпать текст в CRichEditCtrl и при нажатой левой кнопки мыши  - в результате приводит к неудаче. Тоесть текст в таком случае не вводиться.
Подскажите, с чем связаная эта особенность CRichEditCtrl и как обойти ее.

Вот этот вариант проблему решает, но я думаю что есть более правильное решение:
Код

void CMyRichEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    SHORT shRes = GetAsyncKeyState( VK_LBUTTON ); // проверяем нажата ли левая кнопка мыши
    CWnd* pWnd = GetCapture();

    if ( pWnd == this && shRes & 0x8000 )
    { // Кнопка нажата в рич едите, отпускаем ее
        SendMessage( WM_LBUTTONUP );
    }

    CRichEditCtrl::OnChar(nChar, nRepCnt, nFlags);
}


Спасибо
PM MAIL ICQ   Вверх
Albor
Дата 4.6.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(GSasha @  4.6.2010,  11:39 Найти цитируемый пост)
Подскажите, с чем связаная эта особенность CRichEditCtrl и как обойти ее.

Да, вроде бы, любое текстовое поле так работает. Не понятно зачем это обходить, если не секрет поделитесь. 
PM MAIL ICQ   Вверх
GSasha
Дата 4.6.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 23.3.2008
Где: Ukraine

Репутация: нет
Всего: нет



Для ввода текста я использую эмуляцию посимвольного набора текста в RichEdit (вместо SetSel -> ReplaceSel я шлю WM_CHAR). И вот наткнулся на проблему описанную выше, при нажатой левой кнопке мыши моя эмуляция неработает.
PM MAIL ICQ   Вверх
Albor
Дата 4.6.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Если это эмуляция, то можно перегрузить для своего эдита PreTranslateMessage(), где перехватить WM_LBUTTONDOWN и вернуть TRUE, но тогда фокус ввода мышкой не поставишь.
PM MAIL ICQ   Вверх
GSasha
Дата 4.6.2010, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 23.3.2008
Где: Ukraine

Репутация: нет
Всего: нет



Вариант с PreTranslateMessage() не пройдет, так как RichEdit не будет обрабатывать WM_LBUTTONDOWN совсем. Нужно другой вариант.

PM MAIL ICQ   Вверх
Albor
Дата 4.6.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(GSasha @  4.6.2010,  17:11 Найти цитируемый пост)
Вариант с PreTranslateMessage() не пройдет, так как RichEdit не будет обрабатывать WM_LBUTTONDOWN совсем. Нужно другой вариант.
 Что-то я не совсем понял "не будет обрабатывать", он сейчас как раз и обрабатывает это сообщение и "не пускает" в это время WM_CHAR. Вернув из  PreTranslateMessage()  TRUE мы как раз и не пустим это сообщение дальше, а WM_CHAR проскочит. Вроде как теоретически всё правильно, а как будет на практике - нужно пробовать.
Упс, я вас понял. Можно продумать фильтр. Думаю что реализуемо. По-моему, можно отследить состояние кнопки мыши при приходе WM_CHAR.

Это сообщение отредактировал(а) Albor - 4.6.2010, 17:53
PM MAIL ICQ   Вверх
GSasha
Дата 10.6.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 23.3.2008
Где: Ukraine

Репутация: нет
Всего: нет



Цитата(Albor @  4.6.2010,  17:47 Найти цитируемый пост)
Упс, я вас понял. Можно продумать фильтр. Думаю что реализуемо. По-моему, можно отследить состояние кнопки мыши при приходе WM_CHAR.


Имеено этот вариант я и пробовал. Вариант рабочий (см первый пост). 
Но я не думаю что RichEdit контрол проверяет состояние левой кнопки мыши чтобы обрабатывать WM_CHAR или нет. Непонятна суть этой фичи.
PM MAIL ICQ   Вверх
Albor
Дата 10.6.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(GSasha @  10.6.2010,  17:44 Найти цитируемый пост)
Но я не думаю что RichEdit контрол проверяет состояние левой кнопки мыши чтобы обрабатывать WM_CHAR или нет. Непонятна суть этой фичи. 

Я думаю, что при нажатой кнопке мыши, обрабатывается только мышь, поскольку может идти выделение текста и изменять сам текст в это время было бы очень плохо.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1125 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.