我(仍在)试图弄清楚如何将树视图的状态图像从默认的+/-更改为我选择的图像。我正在取得进展,但我已经碰壁了。
我只是在分支扩展时尝试更改图像。当我使用下面的代码时,有时它会改变,有时不会改变。当我来回反复几次时,它只会按预期运行,而不是第一次。
我认为我错过了一面旗帜或者没有正确设置?有什么提示吗?
case WM_NOTIFY:
if (wParam == IDC_TVWFILELIST) {
LPNMTREEVIEW nmtv = (LPNMTREEVIEW) lParam;
if (nmtv->hdr.code == TVN_ITEMEXPANDED) {
TVITEM item = nmtv->itemNew;
item.state = INDEXTOSTATEIMAGEMASK(4);
TreeView_SetItem(pnl_tree.GetTreeview(), &item);
}
}
break;
答案 0 :(得分:2)
好的,当然,当我发布消息时,我很快就会把它弄清楚!该死。猜猜它有助于谈论它。无论如何,对于下一个人。
我在学习winapi的其他地方遇到了同样的问题,特别是对于树视图 - 如果我忽略设置某个结构的某个成员,我会得到奇怪的行为。
在这种情况下,事实证明item.stateMask = TVIS_STATEIMAGEMASK;
需要重新设置。
显然它不会持续TreeView_SetItem()(它非常简洁地说明“TreeView_SetItem宏设置了一些或所有树视图项的属性”)。
工作代码,对我来说,还有扩展/折叠处理程序(现在我正在用汽油烹饪):
if (wParam == IDC_TVWFILELIST) {
LPNMTREEVIEW nmtv = (LPNMTREEVIEW) lParam;
if (nmtv->hdr.code == TVN_ITEMEXPANDED) {
TVITEM item = nmtv->itemNew;
item.stateMask = TVIS_STATEIMAGEMASK;
if (nmtv->action == TVE_COLLAPSE) {
item.state = INDEXTOSTATEIMAGEMASK(4);
}
else if (nmtv->action == TVE_EXPAND) {
item.state = INDEXTOSTATEIMAGEMASK(5);
}
TreeView_SetItem(pnl_tree.GetTreeview(), &item);
}
}
未来树视图图像状态新手的一些其他链接,特别不适用于此问题,但帮助我慢慢解决这个问题: