Детское окно (CEdit) теряет фокус

Я программирую на C++ с использованием архитектуры MFC Document/View. Я пытался добиться чего-то похожего на MFC CEdit потерять фокус обработчик. Я обработал сообщение EN_KILLFOCUS, как предполагает ответ.

В основном, я делаю это: у меня есть текст, нарисованный в представлении. Когда пользователи щелкают область текста в представлении, я располагаю и показываю окно CEdit поверх него, чтобы пользователи могли редактировать текст. Когда редактирование теряет фокус, я получаю текст CEdit и сохраняю его в документе. Затем аннулируйте представление.

Тем не менее, я, кажется, получаю сообщение EN_KILLFOCUS только тогда, когда представление теряет фокус. Я должен щелкнуть где-нибудь еще, например, в окне стыковки или на панели инструментов, чтобы заставить CEdit потерять фокус. Я хочу, чтобы это происходило, когда я щелкаю где-нибудь еще в представлении, вне поля CEdit.

Я создаю CEdit в стиле WS_CHILD. Я пробовал WS_POPUP, но все та же проблема.

Любая помощь будет оценена.

1 ответ

Создайте производный класс / элемент управления CEdit. И создайте экземпляр этого класса в вашем представлении

Обрабатывать EN_KILLFOCUS в производном классе. Вы сможете обработать это сообщение, как только пользователь щелкнет за пределами окна управления редактированием.
Сохраните ваш editbox как WS_CHILD.

Установите фокус для просмотра мышью вниз по представлению, вызовите SerFocus() для LButtonDown представления.

Другие вопросы по тегам