Автоматический выбор текста CMFCPropertyGridProperty и CEdit

Что я прочитал здесь (когда пользователь выбирает элемент управления для редактирования, .... и выделяет его текст с помощью обратного видео), и если я правильно понимаю, CEdit должен выделять (я надеюсь, что это то же самое, что и выбрать) текст, когда я нажимаю в теме.

Я использую CMFCPropertyGridCtrl с CMFCPropertyGridProperty. Но когда я нажимаю на сетку (одно значение свойства), она ничего не выбирает.

Что я выяснил: свойство создает внутренне CEdit, который предназначен для ручного редактирования значения свойства. Он создан, его шрифт установлен и т. Д. Затем вызывается SetFocus и после этого UpdateWindow - это перерисовывает окно редактирования и устанавливает курсор перед первым символом. После этого снова вызывается щелчок мышью, чтобы щелкнуть окно редактирования - это кажется правильным. Но текст не выделен.

Я также попытался создать свой собственный класс свойств, который является производным от CMFCPropertyGridProperty. Я позвонил SetSel после всего этого. Он действительно выделяет мой текст, но затем отменяет его выбор (в следующем перерисовке). Я также достиг того, что после перерисовки был выбран только текст от начала до щелчка мыши (когда я щелкал после 4-го символа, были выбраны только первые 4 символа).

Мои вопросы:

Должен ли CEdit автоматически выбирать текст после первого щелчка мышью? (у вас есть ресурсы?)

Разве вы не знаете, почему это не работает в CMFCPropertyGridProperty?

CMFCPropertyGridCtrl and CMFCPropertyGridProperty can be found in afxpropertygridctrl.h/.cpp in mfc source code directory.

1 ответ

Решение

Итак, что я наконец-то узнал:

Вероятно, CEdit не выделяет текст после нажатия на него. Это должно быть сделано вручную, например, с помощью функции SetSel.

Но в CMFCPropertyGridCtrl, если вы щелкнете, он передается в CMFCPropertyGridProperty и повторяется щелчок. Так что, если я использовал SetSel, он отменяет выбор текста. Поэтому мне пришлось написать свой собственный класс, который наследует CMFCPropertyGridProperty и пропускает этот шаг (повторный щелчок). Для этого достаточно SetFocus и SetSel (который также устанавливает курсор на окно CEdit).

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