题
我在Icon视图中使用了CListCtrl,但它水平滚动:
1 3 5 7 -->
2 4 6 8 -->
我宁愿它水平滚动:
1 2
3 4
5 6
| |
V V
有办法做到这一点吗?
解决方案
将设计器中的对齐样式从左侧更改为顶部。
其他提示
我似乎已使用“报告”视图解决了该问题。通过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。
在Visual Studio对话框编辑器中,确保您具有“列表控件”,不是“列表框”。
在Visual Studio对话框编辑器的属性列表中,设置“No Column Header”和“No Column Header”。到真和“查看”报告。 (将“对齐”设置为“左”在“报告”模式中无效。)
在 OnInitDialog()
中,执行以下操作(在调用超类的 OnInitDialog()
之后):
CListCtrl* plistError = (CListCtrl*) GetDlgItem( IDC_ERROR );
plistError->InsertColumn( 0, "" );
plistError->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );
实际上,这似乎给出了控件创建的初始宽度的最大自动调整大小。字符串在该点显示为带有省略号的截断。扩大窗口没有帮助。
要解决此问题,请将 OnSize()
方法添加到 CDialog
子类中,再次提醒列表它更宽。 (这假设扩展窗口会让 CListCtrl
显示更多文本。如果你有其他方法,比如按钮,试试这个 SetColumnWidth()
调用你这样做。)
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程序员也可能不会注意到。
在列表控件中,使用垂直滚动条显示包含单列图像的内容。添加以下代码, 在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中的图像索引。