Как включить или отключить узел в CTreeCtrl в MFC? - PullRequest
0 голосов
/ 22 марта 2010

Я искал в интернете и обнаружил, что не существует прямого метода, который отключал бы узлы элемента управления CTreeCtrl.

отметьте один пост на http://www.ucancode.net/faq/MFC_CTreeCtrl-CListCtrl.htm, а также на codeguru.com, но не ясно, как отключить узел CTreeCtrl.

1 Ответ

2 голосов
/ 22 марта 2010

Ну, я думаю, статья, которую вы связали, говорит правду: это невозможно (по крайней мере, для версий Windows до Vista, см. Ниже).Вы должны запрограммировать обходные пути, рекомендованные в ссылке, чтобы «имитировать» отключение элемента.Это означает: присвоить элементу определенный цвет (например, светло-серый) и перехватить все события, которые могут произойти с элементом TreeView, и отменить действия (например, развернуть / свернуть узел и т. Д.).

Здесь http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/3350ba1e-1fcf-47fe-ab6b-e20c6b5afd91, утверждение статьи более или менее подтверждается экспертами Microsoft.Они рекомендуют тот же обходной путь (и фактически ссылаются на ту же статью).Также обратите внимание на ссылку http://www.codeproject.com/KB/tree/colortreectrl.aspx о том, как изменить отдельные цвета элементов, что может помочь, если вы действительно хотите начать программировать обходной путь.

«Более или менее подтвержденный» означает:исключение для Vista и выше:

"CTreeCtrl :: SetItemStateEx () поддерживает стиль TVIS_EX_DISABLED (описанный в структуре TVITEMEX), который отключает узел treectrl. Но он поддерживается только начиная с Vista."

Я видел, что иногда говорят о возможном значении TVIS_DISABLED флага состояния структуры TVITEM, и на самом деле MSDN старого компилятора VC6 содержит техническую статью (с 1994 года до выпуска Windows95;)) который говорит, что такое значение состояния должно существовать со значением: "The item is disabled and is drawn using the standard disabled style and color." Эта статья была предварительной ("Please note that this article is based on preliminary information that is subject to change before the final version of Windows 95."), и, очевидно, это значение для отключения элемента не попало в окончательный выпуск Windows95, поскольку вы не можетенайдите его в любых заголовочных файлах VC.

Так что либо вы можете убедиться, что ваша программа используется только на компьютерах с Vista или более поздней версией (тогда это возможно легко с помощью расширенного флага состояния выше), либо это будет уродливой работой(хотя выполнимо и не обязательно очень сложно).

...