如何创建一个多列列表框?

5
我正在开发一个程序,它应该列出所有文件及其大小(目前只是这样)。我创建了一个简单的应用程序,应该将数据写入到列表框中。我试图将数据写入两列(第一列应该是名称,在另一列中是大小),但我不知道该如何做。
有人能帮帮我吗?
提前感谢!
kampi
更新:
我尝试使用ListControl,但不幸的是我无法使用它。我可以成功编译我的应用程序,但我只能看到空矩形。有人知道我做错了什么吗?
BOOL CGetFileListDlg::OnInitDialog()
{  
CDialog::OnInitDialog();

// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);         // Set big icon
SetIcon(m_hIcon, FALSE);        // Set small icon

// TODO: Add extra initialization here

LVITEM lvItem;
LVCOLUMN lvColumn;
int nCol;

lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
lvColumn.fmt = LVCFMT_CENTER;
lvColumn.cx = 10;
lvColumn.pszText = _T("Filename");
ListView_InsertColumn( m_List, 0, &lvColumn ); 
ListView_SetItemText( m_List, 0, 0, _T("TEST") );

return TRUE;  // return TRUE  unless you set the focus to a control    
}
4个回答

4
列表框控件支持多列,但仅支持单个系列的条目。多列支持只是使项目继续到下一列,以便不需要垂直滚动。
正如Kornel所建议的那样,列表视图控件可能更合适。创建列表视图控件后,使用ListView_InsertColumn创建列。然后使用ListView_SetItemText插入项目。
编辑: 抱歉,您应该使用ListView_InsertItem来插入一个项目(一行),然后使用ListView_SetItemText来更改子项(列)。如果列表视图仍然只是一个没有任何标题的空白框,请初始化公共控件。这可以使用InitCommonControlsEx完成,指定ICC_LISTVIEW_CLASSES常量。这应该在创建控件之前完成。
请参阅Microsoft有关列表视图控件的文档

嗨!非常感谢您的帮助!我忘记初始化公共控件了。再次感谢! - kampi

3
不要使用列表框,而是使用带有LVS_REPORT样式的列表控件。 List Control

嗨!这看起来非常不错!谢谢!我试了一下,但它没有显示任何内容。我只能看到白色的矩形。我做错了什么? - kampi

0

需要检查的三个重要参数是

  1. 列表框或列表控件(应使用列表控件)
  2. 视图参数必须为报表模式
  3. 所有者数据必须设置为False 屏幕截图显示了这些内容 enter image description here

向列表控件添加数据的编程流程是:更改列表控件为扩展列表视图(ListView_SetExtendedListViewStyle),创建布局(通过添加列),添加项目数据(对于每个所需行)并最终添加每个列的子项(对于先前添加的每个项目数据)。


0
也许可以使用对象作为数据源来使用DataGridView。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接