CListCtrl中的垂直滚动条

时间:2009-11-27 04:05:20

标签: c++ mfc scroll clistctrl

我在Icon视图中使用了CListCtrl,但它水平滚动:

1 3 5 7 -->
2 4 6 8 -->

我宁愿它水平滚动:

1 2
3 4
5 6
| |
V V

有办法做到这一点吗?

4 个答案:

答案 0 :(得分:3)

将设计器中的对齐样式从左侧更改为顶部。

答案 1 :(得分:0)

我似乎已使用“报告”视图解决了该问题。通过VS Designer,这意味着将“视图”样式更改为“报告”,从而在.RC文件中给出LVS_REPORT属性的控件。请注意,这相当于在代码中调用CListCtrl::SetView(LV_VIEW_DETAILS)。但这还不够。如果您还没有一列包含几行代码,则还需要创建一列:

m_lstScenarios.InsertColumn(0, L"NO HEADER");
m_lstScenarios.SetColumnWidth(k_nListColScenario, LVSCW_AUTOSIZE);

如果您不想要列标题,请通过“No Column Header”样式在Designer中设置LVS_NOCOLUMNHEADER。

答案 2 :(得分:0)

在Visual Studio对话框编辑器上,确保您具有“列表控件”,而不是“列表框”。

在Visual Studio对话框编辑器的属性列表中,将“无列标题”设置为True,将“视图”设置为Report。 (将“对齐方式”设置为“左”在“报告”模式下无效。)

OnInitDialog()中,执行以下操作(在调用超类的OnInitDialog()之后):

  CListCtrl* plistError = (CListCtrl*) GetDlgItem( IDC_ERROR );
  plistError->InsertColumn( 0, "" );
  plistError->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );

实际上,这似乎提供了创建控件所使用的 initial 宽度的最大自动大小。此时,显示的字符串将被截断并带有省略号。扩大窗口没有帮助。

要解决此问题,请在您的OnSize()子类中添加方法CDialog,以再次提醒该列表更宽。 (这假定扩大窗口会使CListCtrl显示更多文本。如果您有其他方法,例如按钮,请在执行此操作的情况下尝试进行SetColumnWidth()调用。)< / p>

 WinProgress::OnSize() {
    CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
    plist->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );

然后您可以使用以下代码将新行添加到列表的底部:

  CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
  int iCount = plist->GetItemCount();

  plist->InsertItem( iCount, "Next Item" );

对于列表而言太宽的项目将首先显示椭圆。当您稍微调整窗口大小时,列表项将变大到完整大小,并在必要时显示水平滚动条。就外观而言,它还不是10/10,但是即使是经验丰富的GUI程序员也可能不会注意到。

答案 3 :(得分:-1)

在列表控件中,使用垂直滚动条显示包含单列图像的内容。添加以下代码, 在PreCreateWindow函数中,添加以下行 cs.style | =(LVS_REPORT | LVS_NOCOLUMNHEADER); 并在OnIntialUpdate函数中添加以下行,     fileList.InsertColumn(0,“”,LVCFMT_LEFT | LVCFMT_IMAGE,120,-1);     ShowScrollBar(SB_VERT,1); 在此之后,无论您想在列表中插入数据,您都可以注意设置imagelist,然后使用insertitem插入数据,例如:    的fileList,insertitem(0, “印”,1); 其中1->是imagelist中的图像索引。