| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CListCtrl отлов установки/снятия выделения строки |
| Автор: triclosan 12.10.2008, 12:21 |
| На форме имеется кнопка для удаления выделенной строки. Пытаюсь добиться следующего - обычное состояние кнопки disabled, после выделения строки - enabled, а после удаления строки или снятия выделения (фокус переносится на другой контрол окна или остается в CListCtrl, но выделение строки снимается) - снова в исходное disabled состояние. С "заинейблиньем" кнопки проблем нет - ловлю сообщение ON_CLICK на контроле, проверяю есть ли выделенные строки, если да - активирую кнопку. А вот с "дисейблиньем" проблема, не пойму как дезактивировать кнопку, при переходе в другой контрол. Хотел ловить сообщение WM_KILLFOCUS, но это не подходит поскольку удаляющая кнопка также становится неактивной при потере фокуса контролом CListCtrl. То есть идея такая - надо дисейблить кнопку удаления строки при потере фокуса контролом всегда, кроме случая, когда надо нажать на эту кнопку |
| Автор: voov 14.10.2008, 12:03 |
| В обработчике ON_CLICK если есть выделение строки, то активируешь кнопку, иначе - деактивируешь. |
| Автор: triclosan 14.10.2008, 14:13 |
| у меня так и сделано сейчас. Но если кликнуть на другой контрол (не грид и не кнопка), то в этом случае выделении строки пропадает но кнопка будет оставаться активной. Имеется ввиду ON_CLICK CListCtrl'а? |
| Автор: triclosan 17.10.2008, 00:19 |
| если я клацаю мышкой на ином контроле, то ранее выделенная строчка CListCtrl теряет флаг selected? |
| Автор: voov 17.10.2008, 10:03 | ||||
нет
|
| Автор: triclosan 17.10.2008, 15:45 |
| угу, я потому и спрашиваю, т.к. установил свойство LVS_SHOWSELALWAYS, но выделение пропадает. Кстати у меня еще установлен стиль Ovner Data это может как-то влиять? |
| Автор: voov 17.10.2008, 16:31 | ||
это не должно. проверь заходит ли при этом в твой обработчик ON_CLICK. |
| Автор: triclosan 17.10.2008, 17:29 |
имеется ввиду выделение строки при клацанье в другом месте. |
| Автор: Earnest 20.10.2008, 15:15 |
| Добавь еще обрабочик на NM_KILLFOCUS |
| Автор: triclosan 21.10.2008, 11:32 |
WM_KILLFOCUS выходит только для работы с клавиатурой? |
| Автор: voov 21.10.2008, 13:18 |
| нет, не только. это потеря фокуса ввода. может быть вызвана и действиями мыши. |
| Автор: Earnest 21.10.2008, 16:37 |
| NM_KILLFOCUS != WM_KILLFOCUS Первое - это уведомление, посылаемое родителю контрола через WM_NOTIFY, а второе - сообщение, посылаемое теряющему фокус контролу. |