问题标签 [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.

0 投票
2 回答
5344 浏览

events - 如何处理 NM_CUSTOMDRAW 事件以检索列表项

我正在开发一个 win32/MFC 项目。我有一个自定义 CListCtrl 控件,我必须不时添加一些字符串。我绝对需要对动态添加到我的 CListCtrl 的项目执行一些操作。

基本上,我需要:

  1. 检测添加单个元素;
  2. 检索_single items_ 立即之后(理想情况下,在 InsertItem() 调用之后不久);
  3. 将单个项目的值存储在地图中,我将使用它来执行其他操作

我考虑过覆盖方法 DrawItem()。但 OnDraw 事件似乎不适用于我的 CListCtrl。

永远不会生成事件。

重要提示:请注意 MyCustomCListCtrl 将“ On Draw Fixed ”属性设置为True,但“ View ”属性未设置报告

因此,我决定处理 NW_CUSTOMDRAW 事件,编写我的 CustomDraw 处理程序,如此此处所述:

在这里您可以查看另一个代码示例。

然后,我需要一种从 CListCtrl 中检索单个 itemID 的方法。
更准确地说,我需要一种从 NMHDR struct 获取单个项目 ID的方法。

我怎样才能做到这一点?我只能获得我添加的最后一个项目的 ID。我确信这是一个我找不到的简单错误。

下面的示例代码:

包含 CList Ctrl 的 Dialog 的来源:

我的自定义 CList Ctrl 源:

任何帮助表示赞赏!

PS请不要给我这样的提示:

  1. 将您的“Own Draw Fixed”属性设置为 True;
  2. 检查您是否已插入“ON_WMDRAWITEM()”行
  3. 将您的 CListCtrl 转换为报告;

我已经尝试了一切...... :-)

谢谢大家!

0 投票
1 回答
3246 浏览

mfc - 如何将项目添加到 MFC CListCtrl 对象,以便它们的图标以从上到下的顺序显示?

我正在使用 Visual Studio C++ 2008 v 3.5 SP1(带有功能包)。

通过 将项目添加到 MFCCListCtrl对象后InsertItem(),在大多数视图模式中,它们的图标以相反的行顺序显示,但正确的列顺序。我没有使用“报告”( LV_VIEW_DETAILS) 模式,所以我提到的行和列是指图标在网格或布局中的排序方式。

我这样添加它们:

并希望它们看起来像这样:

(其中图标 # 匹配其项目 # 并且 N 是item_count)。

但是,在“大图标”、“小图标”和“平铺”( LV_VIEW_ICON, LV_VIEW_SMALLICON, LV_VIEW_TILE) 模式下,它们看起来像这样:

它们仅在“列表”( LV_VIEW_LIST) 模式下以正确的顺序出现,但随后它们水平排列和滚动:

(它们是否全部出现在单行/列中仅仅是图标和控件的相对大小/尺寸的函数。)似乎我可以有垂直方向但相反的顺序,或者正确的顺序但错误的方向!

我如何以我想要的方式得到东西?我在文档或论坛中没有看到任何关于此的内容 - 仅关于按文本排序项目(我不想要)或在详细信息/报告模式下排序列的顺序(我不想要)。

0 投票
1 回答
2622 浏览

winapi - CListCtrl:如何保持水平滚动位置?

如何保持 CListCtrl 的水平滚动条位置?我定期转储并重新填充列表控件的内容,因此在没有明确记住旧位置并恢复它的情况下,滚动只是回到左上角。

我问了一个相关的问题,CListCtrl:如何保持滚动位置?,较早但当时我只对垂直滚动位置感兴趣,提供的答案解决了这个问题。但是,现在我想记住并恢复水平滚动位置(以及垂直滚动)。

0 投票
0 回答
284 浏览

image - 创建 CListCtrl 时出错

我正在尝试在 MFC 中创建 CListCtrl。我在制作 CImageList 时得到了。

调用 mAllContactListCtrl.SetImageList() 失败。

我想知道使用从 CImage 创建 CBitmap 是否正确,或者我在其他地方做错了。

在输出中我只是得到字符串而不是图像。

==================================================== ========================

我从 InitDialog() 调用上述函数

0 投票
2 回答
2667 浏览

mfc - MFC CListCtrl 右键单击​​标题

我有一个用 Visual Studio 6 编写的 MFC 应用程序,我正在向其中添加一些新功能。我想要做的是当用户右键单击属性页内列表控件上的标题列时显示上下文菜单。CListCtrl 类已添加查看类向导。

通过属性页的 ClassWizard,我添加了一个用于右键单击 listctrl 的处理程序。这确实被调用了,我添加了以下代码来确定 rclick 是否在标题部分上方,如果是,则在哪个标题项上。像这样

但是,命中测试总是返回 -1。

我尝试通过在属性页中处理标题控件的 HDN_ItemClick 消息来代替左键单击。这一切都是在 ClassWizard 中完成的,所以我希望能够在这里处理这个通知。但是,从我目前的研究来看,MFC 中可能存在一个错误,其中 ClassWizard 将此代码放入您的代码中,但此通知永远不会到达您的列表控件的父级。是这样吗?

最好的方法是什么?我更喜欢右键单击,但如有必要,左键单击会这样做。

0 投票
1 回答
938 浏览

visual-studio-2008 - 使用 MFC 在 MS Visual C++ 2008 中处理 .bmp 图像时出现颜色问题

我正在开发一个 MFC 应用程序。我正在使用 Visual Studio 处理我自己的 .bmp 图像。我通过添加资源对话框导入 bmp,给它一个唯一的名称并创建一个 CImageList。然后我在列表控件中设置图像列表:

我遇到的问题很奇怪。只有某些颜色会出现,通常只有红色和灰色。我尝试过使用不同的位深度,但这并没有改变。这是 VS 中的图像编辑器中 bmp 的样子:

编辑器中的 BMP 图像

当图标显示在列表控件中时,只有少数红色显示,所有绿色显示为灰色。

我不太确定发生了什么,有人知道发生了什么吗?

解决方案更新

0 投票
1 回答
462 浏览

visual-c++ - 有没有办法覆盖当用户单击 CListCtrl 中的复选框时调用的处理程序?(MFC)

我试图禁用用户更改列表控件中复选框状态的能力。我目前正在务实地改变状态。我已经处理了该LVN_ITEMCHANGED消息,并且由于程序其余部分的布局,尝试更改状态没有选项。我还尝试在用户单击列表控件并简单地重置那里的复选框时进行 HitTest,但这并没有给我我正在寻找的确切结果。

当用户单击复选框本身时,是否发送了特定消息或我可以覆盖的功能?我只想覆盖处理程序或捕获消息,以便它不会去任何地方。

0 投票
1 回答
6695 浏览

c++ - 带有水平滚动条的 C++ MFC 列表控件

我来这里是为了问这个问题,因为我找到的解决方案都没有让我满意,甚至没有奏效。我的问题很简单。

CListCtrl在 C++ 中有很多列。它们不适合列表的宽度,所以我必须添加一个水平滚动条。

我尝试使用EnableScrollbar, ShowScrollBar, SetScrollPos,但没有一个有效。如何创建水平滚动条并正确显示?

0 投票
0 回答
509 浏览

mfc - MFC:单击 CListCtrl 中的第一列时不想突出显示整行

我的对话框中有一个没有 LVS_EX_FULLROWSELECT 的报表样式的 CListCtrl,当我单击第一列时,它会突出显示整行。我不想要这个,我怎么能禁用这个行为?

0 投票
1 回答
529 浏览

c++ - Windows 8 和 CListCtrl

我目前正在尝试将产品移植到 Windows 8(桌面模式)。根据微软的说法,该产品应该可以正常工作,但是在使用 CListCtrl 调用时我遇到了问题。列表控件生成列表项,但没有文本显示在列表控件上,只是一个空白文档图标。

该控件是所有者绘制的控件,传入的数据肯定是有效的,但是当将此数据插入控件的新条目时,它最终显示为空白。这只发生在 Windows 8..

有没有人遇到过这个问题,或者对这个问题有什么想法?