CListViewCtrl и потеря фокуса
От: gordienkos Россия  
Дата: 01.04.06 15:12
Оценка:
Здравствуйте!

Столкнулся я со следующей проблемой:
Есть контрол CListViewCtrl, со стилем LVS_REPORT. Хочется заставить его при потере фокуса каким-то образом выделять последний выбранный item. Завел я значит переменную, в которой будет храниться индекс последней выбранной строки. И по NM_CUSTOMDRAW в ItemPrePaint выделяю этот item цветом.
Вопрос собственно когда и как эту переменную обновлять.

Варианты, которые я пробывал:
1. Если ее обновлять по NM_CLICK|NM_RCLICK, то в случае если пользователь нажал кнопку мыши на item'e, а отпустил в другом месте, нотификация не приходит, а собственный фокус CListViewCtrl перемещается (по WM_LBUTTONDOWN|WM_RBUTTONDOWN чтоли) -- получается рассинхронизация.

2. Если обрабатывать WM_LBUTTONDOWN, то в этот момент GetSelectedIndex возвращает еще старый индекс.

3. NM_KILLFOCUS тоже не подходит, т.к. если кликнуть в не активную область CListViewCtrl, фокус в контроле остается, NM_KILLFOCUS не приходит, выделение item'a цветом тоже отсутствует.

4. При стиле LVS_SHOWSELALWAYS ведет себя похоже на п.3.

sergo
sergo
Re: CListViewCtrl и потеря фокуса
От: Andrey_Ponyakov  
Дата: 02.04.06 11:02
Оценка:
Здравствуйте, gordienkos, Вы писали:

WM_LBUTTONDOWN, то в этот момент GetSelectedIndex возвращает еще старый индекс.

G>3. NM_KILLFOCUS тоже не подходит, т.к. если кликнуть в не активную область CListViewCtrl, фокус в контроле остается, NM_KILLFOCUS не приходит, выделение item'a цветом тоже отсутствует.


G>4. При стиле LVS_SHOWSELALWAYS ведет себя похоже на п.3.


Думаю вам нужно использовать стиль LVS_SHOWSELALWAYS и отлавливать ситуацию когда теряется селекция. Например определять с помощью LVM_HITTEST попал ли юзер в айтем когда кликнул на листе или нет.
Re[2]: CListViewCtrl и потеря фокуса
От: gordienkos Россия  
Дата: 02.04.06 20:39
Оценка:
Здравствуйте, Andrey_Ponyakov, Вы писали:

A_P>Думаю вам нужно использовать стиль LVS_SHOWSELALWAYS и отлавливать ситуацию когда теряется селекция. Например определять с помощью LVM_HITTEST попал ли юзер в айтем когда кликнул на листе или нет.


Спасибо, использование ListView_HitTest в обработчике WM_LBUTTONDONW|WM_RBUTTONDOWN действительно решило проблему(получение актуального индекса выбранного айтема).
Как это ни странно, не потребовался ни LVS_SHOWSELALWAYS, ни отслеживание установки/потери фокуса.
sergo
Re[3]: CListViewCtrl и потеря фокуса
От: MaxiMal_TSG Россия  
Дата: 25.12.08 13:06
Оценка:
Прошу продолжить тему , столкнулся со схожей проблемой , но мне походу хватит и GetSelectedIndex()
вот только не могу понять как выделять сам итем . Т.е. считаем что у меня есть индекс выделенного итема,
затем лист теряет фокус (я тыркаю на RADIO_BTN) и теперь как подсветить (выделить) этот итем по индексу
в настройках cтоит AlwaysShowSelection (но похоже не работает)
насчет ItemPrePaint что то не совсем понял что это .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.