gpt4 book ai didi

c++ - 更改 TreeView 状态图像

转载 作者:行者123 更新时间:2023-11-30 04:22:45 26 4
gpt4 key购买 nike

我(仍在)尝试弄清楚如何将 TreeView 的状态图像从默认的 +/- 更改为我选择的图像。我正在取得进步,但遇到了瓶颈。

我只是想在分支展开时更改图像。当我使用下面的代码时,有时它会改变,有时不会。只有当我来回弹跳几次而不是第一次时,它才会按预期运行。

我假设我缺少一个标志或没有正确设置?有什么建议吗?

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;

最佳答案

好的,当然,当我在 SO 上发帖时,我很快就会自己弄清楚!该死的。猜猜它有助于讨论它。不管怎样,为了下一个人。


我在学习 winapi 的其他地方遇到过同样的问题,尤其是 TreeView - 如果我忽略设置结构的某个成员,我会得到奇怪的行为。

在这种情况下,结果是 item.stateMask = TVIS_STATEIMAGEMASK; 需要重新设置。

显然它不会在 TreeView_SetItem() 中持续存在(非常简洁地说明“TreeView_SetItem 宏设置了 TreeView 项目的部分或全部属性”)。

工作代码,对我来说,带有扩展/折叠处理程序的奖励(现在我正在用煤气做饭):

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);
}
}

future TreeView 图像状态新人的一些其他链接,这些链接并不具体适用于这个问题,但帮助我慢慢弄清楚了这个问题:

Treeview Item States Overview

TVN_ITEMEXPANDED message

关于c++ - 更改 TreeView 状态图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com