Подскажите, пожалуйста, как в ListBox можно сделать некоторые строчки недоступными для выбора (запрещенными, Disable).
Нужно, чтобы при выборе такого запрещеного итема, его состояние было не выбран (причем с предыдущего выбранного снимается состояние выбран, т.е. никто не выбран), но он должен получит фокус.
Hello sir171, you wrote:
> Подскажите, пожалуйста, как в ListBox можно сделать некоторые строчки недоступными для выбора (запрещенными, Disable).
Owner draw. Т.е. взять рисование элементов на себя. Особых сложностей в этом нет.
--
Всего хорошего, Слава.
Пили все, что могло гореть...
http://deadbeef.narod.ru (ICQ: 197577902)
Posted via RSDN NNTP Server 2.0
Здравствуйте, Slava Antonov, Вы писали:
SA>Owner draw. Т.е. взять рисование элементов на себя. Особых сложностей в этом нет.
Хорошо было бы еще, чтобы элементы вели себя соответствующим образом.
В 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), то при следующем нажатии на клавишу выбор встанет на элемент с фокусом, т.е. туда, где его быть не должно, вместо того, чтобы встать на один из следующих элементов.
Видимо действительно простого пути нет. А сложным путем я все сделал.