问题标签 [clistctrl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mfc - 关闭对话框后检索 CTreeCtrl 项
在应用程序中,我只需要处理在树中选择的项目。我在添加到 Dailog 的属性表中使用 MFC CTreeCtrl。树显示文件夹列表,用户选择一些,当用户按下确定时,我需要处理文件夹。我使用 SetItemData 保存文件夹信息。其他一切工作正常。问题是当用户按下 OK 时,CTreeCtrl 变量为空,因此我不能使用 GetItemData。有没有办法让我在它的对话框关闭后仍然使用该变量?任何帮助将不胜感激。
c++ - 如何区分一些 LVITEMS(文件或目录)?
所以我正在使用PostMessage(LVN_INSERTITEM,0,(LPARAM) lvitem)
. 而且我需要一种方法来区分 lvitem,以便稍后当我得到一个 lvitem 时,可以判断它是文件还是目录。我需要实现 using PostMessage
,所以我不确切知道何时插入该项目。我正在动态分配项目(将动态分配的内存指针存储在 LVITEM 结构的 lParam 属性中,因此在插入它之后,我会处理它的通知并取消分配从项目中获取地址的内存)。
performance - MFC CListrCtrl:批量更新虚拟列表数据
有没有一种方法,或者由 CListCtrl 原生支持,或者使用一些编码技术,来更新虚拟列表模式 CListCtrl 中的一大块数据,而不是一次更新一个?
默认情况下,当列表需要单元格的数据时,我们通过 LVS_GETDISPINFO 处理它。如果我说 8x8 (64) 单元格可见并不断更新,它基本上就是将处理程序调用到 LVS_GETDISPINFO 64 次。这是很好的预期行为,但我相信重复调用此函数会产生少量开销,而不是仅在 for 循环中为所有 64 个单元格执行此操作。这对我来说是个问题,因为我的控件不断更新所有 64 个单元(想象一下 TCP 数据包跟踪之类的东西)。
CListCtrl 当然支持缓存(虽然在我的情况下没用),但我再次觉得一遍又一遍地调用 LVS_GETDISPINFO 处理程序有开销。一个简单的例子是,在获取数据之前确定我指向数据库的指针是否有效(非空)......本质上,这行代码被调用了 64 次,而我本可以只做 1 次,然后循环指针以获取我的 64 个单元格的数据。此外,指针只是一个简单的示例,我正在做的更多事情(无法避免)我不会解释,因为它需要代码。
由于时间至关重要,我不能回去重写我自己的更有效的列表 ctrl,因为通过直接继承它来复制我享受的 CListCtrl 的其他好处需要时间。现在唯一的问题是速度。如果有办法,比如说一个处理程序,它传入一个以空结尾的单元格数组进行更新,这样我们就可以在一个函数中批量更新它,那就太好了。
或者是否有可能知道 LVS_GETDISPINFO 中哪些单元格正在等待更新,因此,如果可能,我更新所有单元格,并验证整个更新以停止获取 LVS_GETDISPINFO?
有任何想法吗?提前致谢。
visual-c++ - MFC:如何更改 ListCtrl 个别行的颜色/粗体?
使用 MFC 和 Visual Studio 2010 C++。我需要一种方法来突出 CListCtrl 的某些单独的行(但是我不想使用内置的选择功能来突出显示这些行)。它可能是行背景的颜色,或字体粗细,甚至可能是图像(如果这是高性能的话)。
理想情况下,我想知道如何使用库存列表控件来做到这一点。但是,如果这是不可能的,那么请告诉我使用 3rd 方代码的方法。
更新
这是我最终使用的代码:
就我而言,我没有将 ItemData 用于任何事情,因此我在其他地方调用了 SetItemData 并使用布尔值来指示是否应突出显示该行。
mfc - 插入到 CListCtrl 的第二列
当我喜欢这样
它在“left”下插入字符串“right”。
mfc - 如何在 MFC 中获得焦点消息?
我有一个带有一些 CListCtrl 的对话框。我希望当我单击其中一个时,收到 killfocus 或 setfocus 消息。
我怎样才能得到它?
c++ - 尽管有足够的空间,CListCtrl 仍显示省略号(仅限 Win2008 和 Win7)
我正在使用 CListCtrl 在 ListView 模式下显示一些带有图标的项目。大多数情况下,列表中只有一项右侧有足够的空间,但在我的 Win2008 系统(或 Win7)上,它使用省略号截断文本(例如,“坦克”被截断为“Ta...”) . 并非所有数据都会发生这种情况(即使是一些更长的字符串也可以),但在“坦克”示例中会反复发生。在 WinXP 系统上它也可以正常工作 - 总是。
列表视图是通过 rc 文件创建的
然后它被实例化
我只插入 1 列,格式如下:
并插入数据
我试过了
也
还有一个
也没有成功。
有任何想法吗?
米查
winapi - CListCtrl - 获取项目文本的长度
我来自CListCtrl
. 有没有办法找出项目子项(第一列)中包含的文本有多i
长0
?需要该信息GetItemText()
。
listview - 更改对齐方式后如何重绘列表控件?
我试图找出一种在更改对齐样式(LVS_ALIGNTOP
/ LVS_ALIGNLEFT
)后刷新/更新/重绘列表控件的方法。
如果我将样式从图标/小模式更改为其他样式,然后再返回,它有时会起作用(仅在单击时,以编程方式更改似乎即使有延迟也不起作用)。即便如此,这充其量是相当笨拙的(更不用说丑陋/闪烁),所以我更愿意找到更好(更合适,更正确?)的方法。
我尝试了列表控件的UpdateWindow
, RedrawWindow
, Invalidate
, RedrawItems
, Update
... 除了更改显示模式之外似乎没有任何效果。
c++ - Clistctrl 选择检测
我一直在玩列表视图并遇到了这篇文章:如何检测 CListCtrl 选择更改?
但是,那里使用的代码有一个主要流程,它不适用于多项选择(如该线程中所指出的那样)。所以我的问题是如何使代码与多选一起工作(例如,使用 shift 或 ctrl 进行选择)?