Столкнулся я со следующей проблемой:
Есть контрол 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.