【发布时间】:2017-04-05 12:38:23
【问题描述】:
我有两个函数来初始化列表视图和一个添加条目到列表视图的函数。我创建了一个包含列信息的结构。
struct LISTVIEW_COLUMN
{
const TCHAR * Title;
int Width;
};
这就是我创建列结构的方式
static struct LISTVIEW_COLUMN lvNames[] =
{
{ TEXT("Name"), 150 },
{ TEXT("Last"), 125 }
};
那么我的函数定义如下。
void InitListView(HWND hListView, LISTVIEW_COLUMN * lvColumn, int nCols)
{
ListView_SetExtendedListViewStyle(hListView, LVS_EX_FULLROWSELECT);
// Create the columns
for (int col = 0; col < nCols; col++) {
LVCOLUMN lvc;
lvc.pszText = (TCHAR *)lvColumn[col].Title;
lvc.cx = lvColumn[col].Width;
lvc.mask = LVCF_TEXT | LVCF_WIDTH;
ListView_InsertColumn(hListView, col, &lvc);
}
}
void NetPCAddListViewRow(HWND hListView, TCHAR * name, TCHAR * lastName)
{
LVITEM lvItem;
// Add item (name)
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.iImage = 0;
lvItem.pszText = (TCHAR *)name;
lvItem.iItem = ListView_InsertItem(hListView, &lvItem);
// Just using "testing" right now to see it as a subitem
lvItem.iSubItem += 1;
lvItem.pszText = _T("testing");
ListView_SetItem(hListView, &lvItem);
}
这些列显示得很好,第一列“名称”被添加到,但我无法在该列中显示任何内容作为子项?感谢您的帮助!
【问题讨论】:
-
我看不出有什么明显的错误,除非你没有初始化
LVITEM结构(尽管理论上这应该无关紧要,因为mask字段)。ListView_SetItemText()是否可以设置子项文本?也许看看你能不能发一个minimal reproducible example。 -
嗯,我只是尝试使用 ListView_SetItemText() 和同样的东西。我确实检查了 ListView_SetItem() 的返回,它返回“0”。我不知道为什么当 InsertItem 工作正常时会失败?我看看我能不能想出一个小例子来重现它。
-
尝试将
LVITEM初始化为 0,就像测试一样。 -
"我确实检查了
ListView_SetItem()的返回结果,它返回 '0'" - 那么你肯定做错了什么。我同意乔纳森的观点。 总是在使用 API 结构之前将其清零。另外,只是为了检查一下,您是否将 ListView 设置为 Report 视图? -
只需设置 LVCOLUMN lvc = { 0 };和 LVITEM lvItem = { 0 };并且仍然这样做。 @RemyLebeau是的,只是想弄清楚现在在哪里。 :\