类型为‘int’的实参与‘HTREEITEM’形参不兼容问题求助
问题解决:TreeView.GetItemState 参数类型不匹配错误
错误原因很明确:TreeView.GetItemState的第一个参数要求传入**HTREEITEM类型的树项句柄**,你当前传入的是int类型的循环索引,类型不匹配,所以编译器报错。
Windows TreeView控件的树项是通过不透明句柄HTREEITEM管理的,不是连续的整数索引,不能直接用int值来定位树项。正确的做法是用TreeView的API遍历所有树项,逐个判断选中状态:
正确实现代码示例
HTREEITEM hCurrentItem = TreeView.GetRootItem(); int selectedIndex = -1; int currentCount = 0; // 遍历所有树项 while (hCurrentItem != nullptr) { // 检查当前项是否被选中 if (TreeView.GetItemState(hCurrentItem, TVIS_SELECTED) == TVIS_SELECTED) { selectedIndex = currentCount; break; } // 优先遍历子项(深度优先) HTREEITEM hChildItem = TreeView.GetChildItem(hCurrentItem); if (hChildItem != nullptr) { hCurrentItem = hChildItem; } else { // 没有子项则找下一个兄弟项 while (hCurrentItem != nullptr && TreeView.GetNextSiblingItem(hCurrentItem) == nullptr) { // 没有兄弟项则回溯到父项 hCurrentItem = TreeView.GetParentItem(hCurrentItem); } if (hCurrentItem != nullptr) { hCurrentItem = TreeView.GetNextSiblingItem(hCurrentItem); } } currentCount++; } // 后续可使用selectedIndex,-1表示未找到选中项
补充说明
- 如果你不需要记录选中项的索引,只需要获取选中项的句柄,可以去掉
currentCount和selectedIndex的逻辑,找到选中项后直接使用hCurrentItem即可。 - 若你的
total变量是树项总数,需要先通过一次遍历统计总数,TreeView没有直接获取总项数的API,需要手动遍历计数。
内容的提问来源于stack exchange,提问作者itworksonLocal
相关产品推荐
相关产品推荐

