Есть список ListCtrl. Хочу, чтобы определённые строки в нём не выбирались ни клавиатурой, ни мышью, т.е. если курсор попадает на такую строку, то он перескакивает на соседнюю строку. Назовём такие строки заблокированными.
Я побовал ловить LVN_ITEMCHANGED при попадании на заблокированную строку и при помощи SetItemState(n, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED) переходить на другую строку. С клавиатурой всё работает нормально, а вот с мышью нет.
При работе с мышью происходит слудующее:
1. после клика на заблокированную строку она выбирается (устанавливаются флаги LVIS_SELECTED|LVIS_FOCUSED)
2. потом эти флаги по очереди снимаются
3. устанавливаются флаги LVIS_SELECTED|LVIS_FOCUSED для соседней строки
4. и потом, непонятно почему, снимается флаг LVIS_SELECTED у соседней строки, т.е. фокус на ней есть, а подсветки нет.
Если не ставить прерывания, то видно, что выбор соседней строки происходит при нажатии левой клавиши мыши (выделяется соседняя строка), а снятие выделения при отпускании клавиши.
Строки выбираются только по одной.
Так почему же снимается выделение?
В догонку ещё один вопрос.
Все эти заблокированные строки я сделал для того, чтобы разбить таблицу как бы на разделы, не делая несколько разных таблиц.
Может есть какой-нибудь иной способ?
Заранее большое спасибо.