有没有办法自动调整 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 中的列表列?的主要内容,如果未能解决你的问题,请参考以下文章
Sharepoint Online 列表中“自动编号”列-Auto Number Column