更改树视图状态图像
Changing treeview state images
我(仍然)试图弄清楚如何将树视图的状态图像从默认的 +/- 更改为我选择的图像。 我正在取得进展,但我碰壁了。
我只是想在扩展分支时更改图像。 当我使用以下代码时,有时它会改变,有时不会。 它仅在我来回弹跳几次时才按预期运行,而不是第一次。
我假设我缺少标志或没有正确设置某些内容? 有什么提示吗?
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 时也遇到了同样的问题,尤其是树视图 - 如果我忽略设置结构的某个成员,我会得到奇怪的行为。
在这种情况下,事实证明item.stateMask = TVIS_STATEIMAGEMASK;
需要重新设置。
显然,它不会在 TreeView_SetItem() 中持久化(它非常简洁地指出"TreeView_SetItem宏设置树视图项的部分或全部属性")。
对我来说,工作代码具有扩展/折叠处理程序的奖励(现在我正在用gas做饭):
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);
}
}
未来树视图图像状态新手的其他一些链接,不适用于这个问题,但帮助我慢慢弄清楚了这件事:
树视图项状态概述
TVN_ITEMEXPANDED消息
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 视图中的参数推导失败:take_while
- 使用导入的图像保存在 QT 中的 QLabel 中,保存 GUI 的状态
- 如何保持我在 Visual Studio SDL 中编写的图像窗口处于打开状态
- 更改树视图状态图像
- 使用OpenCV 2.4在MFC SDI视图或控件中加载图像
- 视图状态和应用程序设计
- 位图图像未显示在CListCtrl报告视图中
- 首次机会异常设置检查列表视图中的状态
- 如何根据Qt中的状态更改图像源
- 从字节数组将图像加载到图形视图中
- q表视图选择行->显示图像
- 在列表视图中绘制3个图像和文本
- 在OpenGL中保存一个特定的相机视图为图像
- 在 CListCtrl 中为图像添加状态图标
- 佳能EDSDK如何获得实时视图图像的宽度和高度
- 如何实现网格/平铺图像视图与滚动在BB10