C++ c++;ListView-使用ListView\u DeleteAllItems后无法插入新项目

C++ c++;ListView-使用ListView\u DeleteAllItems后无法插入新项目,c++,listview,winapi,mfc,C++,Listview,Winapi,Mfc,我有一个包含4列的ListView控件,该控件在WM_创建过程中初始化 hListView1 = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL, WS_CHILD|WS_VSCROLL|WS_HSCROLL|WS_VISIBLE|LVS_REPORT|LVS_SHOWSELALWAYS, 230, 20, 300, 250, hwnd, (HMENU)ID_EDIT1, GetModuleHandle(NULL), NULL

我有一个包含4列的ListView控件,该控件在WM_创建过程中初始化

        hListView1 = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL, WS_CHILD|WS_VSCROLL|WS_HSCROLL|WS_VISIBLE|LVS_REPORT|LVS_SHOWSELALWAYS, 230, 20, 300, 250, hwnd, (HMENU)ID_EDIT1, GetModuleHandle(NULL), NULL);
        ListView_SetExtendedListViewStyle(hListView1, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP);
            lvCol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
        lvCol.fmt = LVCFMT_LEFT;

        lvCol.iSubItem=0;
        lvCol.cx=30;
        lvCol.pszText="";
        ListView_InsertColumn(hListView1, 0, &lvCol);

        lvCol.iSubItem=1;
        lvCol.cx=150;
        lvCol.pszText="Name";
        ListView_InsertColumn(hListView1, 1, &lvCol);

        lvCol.iSubItem=2;
        lvCol.cx=50;
        lvCol.pszText="Size";
        ListView_InsertColumn(hListView1, 2, &lvCol);

        lvCol.iSubItem=3;
        lvCol.cx=80;
        lvCol.pszText="Modified";
        ListView_InsertColumn(hListView1, 3, &lvCol);
然后我有一个函数可以插入这些项(在我调用deleteallitems之前它可以正常工作)

但无论何时我打电话

ListView_DeleteAllItems(hListView1);
如果在调用插入项的函数后,我的listview被清除(列仍然存在),但没有插入新项。。 我听说索引没有被清除,但我想不出来

提前感谢;-)

解决方案: 增加


您没有设置
lvItem.mask
,因此
ListView\u InsertItem
不知道哪些字段有效,哪些字段无效

试着这样做:

...
LVITEM lvItem;
lvItem.mask = LVIF_IMAGE | LVIF_DI_SETITEM;
j = 0;
...

正确初始化
LVITEM
。除了
.iItem
.iImage
之外,当您将垃圾传递给
\u InsertItem
时,您还在那里留下垃圾。感谢Roman,这就是问题所在,LVITEM没有正确初始化。thxadded lvItem.mask=LVIF_IMAGE | LVIF_STATE;lvItem.state=0;lvItem.stateMask=0;lvItem.iSubItem=0;谢谢:-)
    lvItem.mask = LVIF_IMAGE | LVIF_STATE;
lvItem.state = 0;
lvItem.stateMask = 0;
lvItem.iSubItem = 0;
...
LVITEM lvItem;
lvItem.mask = LVIF_IMAGE | LVIF_DI_SETITEM;
j = 0;
...