Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Недоступные строки в ListBox

8.4K
08 сентября 2006 года
Sir
52 / / 28.07.2006
Подскажите, пожалуйста, как в ListBox (с режимом выбора одного элемента) можно сделать некоторые строчки недоступными для выбора (запрещенными, Disable).

Нужно, чтобы при выборе такого запрещеного элемента, его состояние было не выбран (причем с предыдущего выбранного снимается состояние выбран, т.е. никто не выбран), но он должен получить фокус.
354
09 сентября 2006 года
ШпиЁн
468 / / 19.02.2006
Я даже не знаю, пойдет ли тебе это...
Ты ведь когда-то задавал подобный вопрос с MFC, я могу лишь предложить переделанный под WinAPI мой старый вариант :-)))
8.4K
09 сентября 2006 года
Sir
52 / / 28.07.2006
Спасибо, ШпиЁн.

Я действительно спрашивал это в MFC и выбрал тогда CCheckListBox.
Сейчас в WinAPI я создал свой аналог CCheckListBox. Для этого использовал Owner Draw стиль (чтобы рисовать в каждом элементе картинку типа Check Box) и сабклассил LISTBOX (чтобы отлавливать клик мышкой на картинку и нажатие на пробел). Флаг запрещенный/разрешенный поставил в присоединяемых к элементу данных (LB_SETITEMDATA), впрочем как и состояние элемента unchecked/checked/indeterminated. А дальше, рисуя запрещенные элементы другим цветом и не обрабатывая клик мышкой на картинку и нажатие на пробел, добился нужного результата.

Честно говоря, прочитав MSDN, я догадывался что простого решения нет, но на всякий случай спросил.

LB_SETCURSEL с -1 и LB_SETCARETINDEX не дают нужного эффекта. В частности, не получится без вреда для общего дела использовать родную оконную процедуру листбокса (использую сабклассинг) для обработки клавиш PageUp/Down и Home, End. Кроме того, если поставить фокус (SETCARETINDEX), но снять выбор (LB_SETCURSEL с -1), то при следующем нажатии на клавишу выбор встанет на элемент с фокусом, т.е. туда, где его быть не должно, вместо того, чтобы встать на один из следующих элементов.
Видимо действительно простого пути нет. А сложным путем я все сделал.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог