MFC 如何使 ctreectrl 虚拟
MFC How to make ctreectrl virtual?
我的应用程序正在使用ctreectrl
显示内存中保存的Hugh数量的文件系统条目,即使使用SetRedraw(False)
添加所有项目也需要~20秒,那么如何制作一个完全虚拟的(广度,深度(ctreectrl
以及如何填充它?
编辑#1我想显示从一开始就展开的显示部分项目,但我不想将它们存储在树中,例如
Root-->
Child1-->
SubChile1
Child2
Child3
不能一次添加所有项目。 必须仅添加具有cChildren = I_CHILDRENCALLBACK
的顶级项并处理WM_NOTIFY
- 如果设置了
mask & TVIF_CHILDREN
则带有code == TVN_GETDISPINFO
cChildren
(真或假( - 使用
code == TVN_ITEMEXPANDING
,action == TVE_EXPAND
- 展开节点 - 仅添加直接子项(一个级别( 再次使用cChildren = I_CHILDRENCALLBACK
和可能
- 与
code == TVN_ITEMEXPANDED
,action == TVE_COLLAPSE
- 崩溃节点 - 删除所有子节点
cChildren = I_CHILDRENCALLBACK
感 - 如果您将文件夹添加到列表中,则不需要立即初始化它(打开句柄,枚举子项( - 仅当您第一次获得I_CHILDRENCALLBACK
时(当您的项目变得可见时,但如果包含足够大的文件夹(如System32( - 它有太多项目,但在开始时只可以看到几个顶部,当用户向下滚动时可以看到新的开始(- 打开文件夹, 确定它是否有子项(并基于这组cChildren
(,但不能完全枚举它(仅在<TVN_ITEMEXPANDING, TVE_EXPAND>
上执行此操作
我没有建议让它变得虚拟。对于大型树结构,我只在需要时收集子分支的可能性。我困住了TVN_ITEMEXPANDING
那么怎么做:首先读取第一级(根(,然后保持所有根节点折叠并读取根的所有子节点(仅 1 级深(并填充它们。
当一个节点展开时,你已经有了节点,现在读取扩展节点子节点下面的下一级。
因此,您只能看到扩展的节点和一个不可见的级别。
我这样做是为了显示所有可以使用 + 符号扩展的节点。所有没有子节点的节点都显示为叶,没有子节点。
第二种方法是不填充字符串数据,让树通过回调加载它。但影响很小。速度的真正问题是节点的数量。
- 虚拟决赛作为安全
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 如何在C++中获得"静态纯虚拟"功能?
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 大小虚拟继承中的派生类
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- std::is_trivially_copyable_v 关于虚拟功能
- 删除C++继承中虚拟类成员的代码重复
- 子类地址等于虚拟基类地址?
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 用于创建/注册虚拟存储设备的 IOKit 驱动程序
- MFC 如何使 ctreectrl 虚拟