【问题标题】:Is there a way to automatically adjust a list column in MFC?有没有办法自动调整 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 截断长文件名的方式)?这些值也会存储在程序内部其他地方的数据结构中。

【问题讨论】:

    标签: c++ visual-studio-2008 mfc


    【解决方案1】:

    本文摘自 MSDN here

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

    更新:

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

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

    【讨论】:

    • 你能告诉我一些关于正确使用方法的代码吗?
    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2012-03-27
    • 2020-10-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多