平铺视图中的 c++ 虚拟列表视图,无法显示子项

c++ Virtual ListView in Tile view, can't get subitems to appear

本文关键字:视图 显示 虚拟 c++ 列表      更新时间:2023-10-16

我有一个直接的win32 c ++应用程序,我正在用视图类型设置为LV_VIEW_TILE的ListView填充窗口,并且还将样式设置为LVS_OWNERDATA。

我在尝试弄清楚如何显示子项时遇到麻烦。此代码创建视图。

DWORD exstyle =WS_EX_CLIENTEDGE|LVS_EX_DOUBLEBUFFER|LVS_EX_JUSTIFYCOLUMNS|LVS_EX_INFOTIP;
g_hwndList = CreateWindowEx(exstyle, WC_LISTVIEW, NULL, WS_CHILD | WS_VISIBLE | LVS_ICON | LVS_OWNERDATA, 0, 0, 0, 0, hWnd, (HMENU) 2702, hInst, NULL);
ListView_SetView(g_hwndList, LV_VIEW_TILE);
LVTILEVIEWINFO tileViewInfo = { };
tileViewInfo.cbSize = sizeof(LVTILEVIEWINFO);
tileViewInfo.dwFlags = LVTVIF_AUTOSIZE;
tileViewInfo.dwMask = LVTVIM_COLUMNS;
tileViewInfo.cLines = 1;
BOOL tst = ListView_SetTileViewInfo(g_hwndList, &tileViewInfo);

我只想再出现一个子项目/列。在我的LVN_GETDISPINFO中,我目前有这个:

static int colfmt[1];
colfmt[0] = LVCFMT_LEFT;
static int order[1];
order[0] = 1;
if ((nimfo->item.mask & LVIF_COLUMNS) == LVIF_COLUMNS) {
    nimfo->item.cColumns = 1;
    nimfo->item.piColFmt = PINT(colfmt);
    nimfo->item.puColumns = PUINT(order);
}
if ((nimfo->item.mask & LVIF_TEXT) == LVIF_TEXT) {
    nimfo->item.pszText = di->LABEL;
}
if ((nimfo->item.mask & LVIF_IMAGE) == LVIF_IMAGE) {
    nimfo->item.iImage = di->IMAGE_INDEX;
}

无法确定在什么时候和在哪里需要提供子项/列文本,我从未看到 nimfo->item.subitem 从 0 更改,并且对于每次调用LVIF_TEXT,结构值始终相同。

那么,在什么时候我需要提供额外的文本数据呢?

非常感谢。

我相当愚蠢地没有添加任何列,因此没有被要求提供其他项目。

添加了这个,一切正常

LVCOLUMN col = {};
col.mask = LVCF_SUBITEM;
col.iSubItem = 0;
ListView_InsertColumn(g_hwndList, 0, &col);