Включение флажков в древовидных элементах ctreecntrl - PullRequest
2 голосов
/ 18 апреля 2011

Я пытаюсь включить / отключить флажки в древовидных элементах в ctreecntrl из Visual C ++ 6.0. Я нашел варианты сделать это для всех предметов, но не смог сделать это для каждого предмета. Есть ли какая-либо функция для этого?

1 Ответ

4 голосов
/ 18 апреля 2011

Чтобы включить или отключить флажки для отдельных элементов дерева, необходимо отправить TVM_SETITEM сообщений , которые используются для установки атрибутов для элементов в TreeView.

В документации сказано, что wParam должен быть нулем, а lParam является указателем на TVITEM структуру , которая содержит новые атрибуты элемента.

Таким образом, настоящая битва заключается в заполнении структуры TVITEM соответственно. Вот важные части:

  • Член hItem должен содержать дескриптор элемента дерева, который вы хотите изменить.
  • Элемент mask должен быть установлен в TVIF_STATE, что означает, что элементы state и stateMask являются действительными. Это те, которые вы будете использовать для включения и выключения флажков.
  • Элемент state может быть установлен в 0, что будет скрывать флажок для указанного элемента дерева.
    Чтобы показать флажок для элемента дерева, установите для этого члена значение 1 << 12. (Подробнее см. документы .
  • Элемент stateMask должен быть установлен в TVIS_STATEIMAGEMASK, чтобы указать, что вы изменяете индекс изображения состояния элемента.

Поскольку вы установили mask, чтобы указать, что вы используете только элементы state и stateMask, вы можете счастливо игнорировать остальных членов.

И, наконец, после того, как вы установили структуру TVITEM, вы можете использовать стандартную функцию SendMessage или TreeView_SetItem макрос , чтобы отправить сообщение элементу дерева .

(Конечно, весь TreeView должен иметь стиль TVS_CHECKBOXES , чтобы все вышеперечисленное работало! Но вы сказали, что уже поняли, как это сделать.)

...