c++ - MFC如何让ctreectrl虚化?

标签 c++ winapi mfc treeview treecontrol

我的应用程序使用 ctreectrl 显示保存在内存中的大量文件系统条目,即使使用 SetRedraw(False) 添加所有项目也需要大约 20 秒,那么如何制作一个完全虚拟的(广度,深度)ctreectrl 以及如何填充它?

编辑#1 我想显示从头开始展开的显示部分项目,但我不想将它们存储在树中,例如

Root-->
    Child1-->
        SubChile1
    Child2
    Child3

最佳答案

您不能一次添加所有项目。您必须使用 cChildren = I_CHILDRENCALLBACK 仅添加顶级项目 和处理WM_NOTIFY

  • code == TVN_GETDISPINFO如果mask & TVIF_CHILDRENcChildren (正确或错误)
  • code == TVN_ITEMEXPANDING , action == TVE_EXPAND - 扩张 节点 - 再次仅添加直接子项(一级) cChildren = I_CHILDRENCALLBACK

有可能

  • code == TVN_ITEMEXPANDED , action == TVE_COLLAPSE - 坍塌 节点 - 删除所有 child

cChildren = I_CHILDRENCALLBACK - 如果您将文件夹添加到列表中,您不需要立即初始化它(打开句柄,枚举子项) - 只有当您第一次得到 I_CHILDRENCALLBACK 时(这是当您的项目变得可见时,但如果包含足够大的文件夹(如 system32) - 它有太多项目,但在开始时只有几个顶部可见,当用户向下滚动时新开始可见) - 打开文件夹,确定它是否有子项(并且基于此集合 cChildren )但没有完全枚举它(仅在 <TVN_ITEMEXPANDING, TVE_EXPAND> 上执行此操作

关于c++ - MFC如何让ctreectrl虚化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43907524/

相关文章:

无法恢复最小化窗口

c++ - 在工作线程完成 MFC 时禁用控制变量

c++ - 如何从 MFC 应用程序调用函数的 Win32 API 版本?

c++ - 切换高对比度模式时 CMFCMenuButton 无法正确重绘

c++ - 在 C++ 中从文件打印二维数组

当我们试图找到 2 个大值 1.18973e+4932 的方差和均值时,C++ 计算 inf

C++ 结合重载和覆盖导致奇怪的行为

c++ - 如何在另一个 DLL 的 DLL 上使用 `/DELAYLOAD`

c - 我的应用程序不会出现在 Windows 10 开始搜索中

c++ - 使用 Boost 库从 C++ 中的 JSON 中检索内容