【问题标题】:Prevent resizing first column in ListCtrl (ReportView)防止在 CListCtrl(报表视图)中调整第一列的大小
【发布时间】:2018-03-24 06:06:12
【问题描述】:

我来自this LVCFMT_FIXED_WIDTH 这种格式样式有效,但仅在第一列之后。第一列项目始终是可移动的。为什么?我有什么遗漏吗?

for(int i = 0; i<NUM_COLUMNS; i++)
{
    m_ListCtrl.InsertColumn(i,_gszColumnLabel[i], _gnColumnFmt[i] |  LVCFMT_FIXED_WIDTH, _gnColumnWidth[i], -1);
}   

【问题讨论】:

    标签: winapi mfc controls


    【解决方案1】:

    第一列is special不知为何:

    如果将一列添加到索引为 0(最左边的列)的列表视图控件,则它始终为 LVCFMT_LEFT。在第 0 列设置其他标志不会覆盖该对齐。因此,如果您继续插入索引为 0 的列,则所有列中的文本都是左对齐的。如果您希望第一列右对齐或居中,您可以创建一个虚拟列,然后插入一个或多个索引为 1 或更高的列,并指定您需要的对齐方式。最后删除虚拟列。

    也许虚拟列技巧也适用于您的情况?

    【讨论】:

      【解决方案2】:

      LVCFMT_FIXED_WIDTH 的一个问题是无法以编程方式更改列宽(使用 SetColumnWidth)。如果您想在标题控件构造之后设置列宽(例如在 OnSize 中),您必须暂时删除 LVCFMT_FIXED_WIDTH 标志。

      这是一个实现,它有一个解决方法是无法修改第一列,一个是无法以编程方式修改具有 LVCFMT_FIXED_WIDTH 的列:

      void
      MyTreeeCtrl::SetFixedColumnWidth(int col, int width)
      {
        int colToModify = col;
        // Workaround 1: Insert a dummy column to be able to modify the attributes
        // of the first column.
        if (col == 0)
        {
          InsertColumn(0, L"");
          ++colToModify;
        }
      
        // Workaround 2: Temporarily remove the fixed width attribute to be able to
        // modify the width.
        LVCOLUMN colInfo;
        colInfo.mask = LVCF_FMT;
        GetColumn(colToModify, &colInfo);
        colInfo.fmt = colInfo.fmt & ~LVCFMT_FIXED_WIDTH;
        SetColumn(colToModify, &colInfo);
      
        // Set the column width
        SetColumnWidth(colToModify, width);
      
        // Restore the fixed width attribute
        colInfo.fmt = colInfo.fmt | LVCFMT_FIXED_WIDTH;
        SetColumn(colToModify, &colInfo);
      
        // Remove the dummy column
        if (col == 0)
        {
          DeleteColumn(0);
        }
      }
      

      【讨论】:

      • 不错。我不需要这个,因为我只在全屏模式下禁用调整大小。
      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2016-01-22
      • 1970-01-01
      • 2011-11-07
      • 2014-02-20
      • 1970-01-01
      相关资源
      最近更新 更多