有没有办法自动调整 MFC 中的列表列?

Posted

技术标签:

【中文标题】有没有办法自动调整 MFC 中的列表列?【英文标题】:Is there a way to automatically adjust a list column in MFC? 【发布时间】:2010-09-08 16:47:09 【问题描述】:

我正在编辑的程序使用此代码在列表框中生成列:

m_list.InsertColumn(0,_T("Parameter"), LVCFMT_LEFT, 90);
m_list.InsertColumn(1,_T("Show?"), LVCFMT_LEFT, 50);
m_list.InsertColumn(2,_T("Value"), LVCFMT_LEFT, 400);

当用户使用该程序时,用户可以单击一行(单元格?我不确定命名法)并输入一些文本。问题是它只允许用户输入与列宽一样多的文本。因此,在这种情况下,用户单击“值”列(400 像素宽)中的一个单元格,它将只允许用户输入 74 个字符。

有没有办法让用户可以输入任意数量的字符,但让它将显示的文本截断到列宽(类似于 Windows 截断长文件名的方式)?这些值也会存储在程序内部其他地方的数据结构中。

【问题讨论】:

【参考方案1】:

本文摘自 MSDN here

要自定义标签编辑,实现 LVN_BEGINLABELEDIT 的处理程序和 让它发送一个 LVM_GETEDITCONTROL 向列表视图控件发送消息。如果一个 标签正在编辑,返回 value 将是编辑的句柄 控制。使用此句柄自定义 通过发送通常的编辑控件 EM_XXX 条消息

更新:

例如,这是一个典型的场景:

子类 CListCtrl。这将是您实例化 m_list 的类 在您的 CListCtrl 子类中覆盖 OnBeginLabelEdit() 在您的 OnBeginLabelEdit() 调用中,SendMessage(LVM_GETEDITCONTROL) 返回 HWND 到 Edit 控件以编辑文本 给定编辑控件窗口句柄,对它做任何你想做的事:移动、调整大小,甚至子类化。

【讨论】:

你能告诉我一些关于正确使用方法的代码吗?

以上是关于有没有办法自动调整 MFC 中的列表列?的主要内容,如果未能解决你的问题,请参考以下文章

限制列表控件 MFC 中的条目数

(MFC) CListBox -> 编辑列表中的项目?

列表控件中的 MFC 对话框组合框

Sharepoint Online 列表中“自动编号”列-Auto Number Column

VC\MFC界面怎么设置列表框第一列文字居中,其他列的文本左对齐

MFC中怎样实现组合框显示下拉列表啊?