如何在MFC中的CTreeCtrl中启用或禁用节点?

时间:2010-03-22 11:24:58

标签: visual-studio-2005 mfc controls visual-c++

我通过互联网搜索了发现没有任何直接方法可以禁用CTreeCtrl控制的节点。

查看http://www.ucancode.net/faq/MFC_CTreeCtrl-CListCtrl.htm上的一个帖子&也在codeguru.com上,但不清楚如何禁用CTreeCtrl的节点。

1 个答案:

答案 0 :(得分:2)

嗯,我认为,您链接的文章说实话:这是不可能的(至少不适用于Vista之前的Windows版本,见下文)。您必须将链接中建议的变通方法编程为“模拟”项禁用。它表示:为项目指定特定颜色(例如浅灰色)并捕获TreeView项目上可能发生的所有事件并取消操作(如展开/折叠节点等)。

在这里,http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/3350ba1e-1fcf-47fe-ab6b-e20c6b5afd91,文章的陈述或多或少得到了微软专家的证实。他们建议使用相同的解决方法(实际上链接到同一篇文章)。另请注意http://www.codeproject.com/KB/tree/colortreectrl.aspx关于如何更改单个项目颜色的链接,如果您真的想要开始编程解决方法,这可能会有所帮助。

“或多或少已确认”表示:Vista及更高版本似乎有例外:

“CTreeCtrl :: SetItemStateEx()支持TVIS_EX_DISABLED(在TVITEMEX结构中描述)样式,它禁用了treectrl节点。但它仅从Vista开始支持。”

我已经看到有时会讨论TVITEM结构状态标志的可能值TVIS_DISABLED,实际上旧VC6编译器的MSDN包含一篇技术文章(从1994年Windows 95发布之前) ;))表示这样的状态值应该与意义一起存在:"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或更高版本的计算机上使用(那么上面的扩展状态标志可能很容易),或者它将是一项丑陋的工作(虽然可行而且不一定非常困难)。 / p>