如何在 MFC 的 CListCtrl 中插入位图或其他图像对象?

Posted

技术标签:

【中文标题】如何在 MFC 的 CListCtrl 中插入位图或其他图像对象?【英文标题】:How could I insert a bitmap or other image objects in a CListCtrl in MFC? 【发布时间】:2008-10-23 06:21:21 【问题描述】:

我想在 listctrl 中列出一组照片的缩略图。但实现此目的的唯一方法是使用 setImageList 方法将图像列表绑定到 CListCtrl 对象并插入如下项:InsertItem (int nItem, LPCTSTR lpszitem, int nImage)。我还必须通过 ModifyStyle(LVS_TYPEMASK, LVS_ICON) 修改 listctrl 的样式,以强制它显示每个项目的图标。

我认为这种方法不是实现我的目标的好方法。我可以直接在 CListCtrl 中添加位图项或其他图像对象吗?

非常感谢!

【问题讨论】:

【参考方案1】:

为什么你认为这不是一个好方法?您的其他选择是使其成为所有者绘制的控件并自己渲染图像,或者通过 CListCtrl::SetCallbackMask 对图像使用回调。

列表控件使用图像列表是有原因的;位图以对呈现列表控件最有效的方式存储。你会很难做得更好。

【讨论】:

可能 OP 想要将这些图像显示为列表控件的 主要内容,在这种情况下,每个项目的图像可能不适合他的外观和感觉在这种情况下,正如您所指出的,他需要进行自定义绘制。 谢谢!但是我的情况相当复杂,我的 listctrl 中的每个缩略图都必须提供一些功能,例如根据滑块更改大小。 ImageList 能否实现这些用户自定义的功能? 啊,不,使用股票 CListCtrl 可能没有办法做到这一点。您必须使其成为所有者绘制的控件并自己进行渲染。不过做起来应该没那么难。 听起来我必须使用所有者绘制。非常感谢! 出现了另一个问题:我可以在 CListCtrl 中更改项目的大小(宽度和高度)吗?【参考方案2】:

鉴于您需要这些扩展功能,听起来您必须使用自绘。一个很好的例子是here。它没有显示如何绘制图像,但是一旦您设置了所有者绘制过程,您应该能够使用典型的 BitBlts 来绘制图像。

【讨论】:

以上是关于如何在 MFC 的 CListCtrl 中插入位图或其他图像对象?的主要内容,如果未能解决你的问题,请参考以下文章

MFC列表控件 CListCtr

如何在 MFC 中将图像添加到 CListCtrl

如何在 CListCtrl 中拆分单个单元格

如何在 SDI 中使用 MFC CListCtrl

如何在 MFC CListCtrl 中实现“点击并按住”行为?

在 MFC 中的 CListCtrl 中禁用多项选择项上的按钮