2012-08-11 181 views
2

我有一個ListView控件與4列在WM_CREATE過程中初始化。c + + ListView - 使用ListView_DeleteAllItems後無法插入新項目

 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)

... 
LVITEM lvItem; 
j = 0; 
while(FindNextFile(hFind,&FindFileData)){ 
lvItem.iItem = j; 
     lvItem.iImage = 1; 
     if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ 
      lvItem.iImage = 0; 
     } 
     ListView_InsertItem(hListView1, &lvItem); 
     ListView_SetItemText(hListView1, j, 1, FindFileData.cFileName); 
     ListView_SetItemText(hListView1, j, 2, msg1); 
     ListView_SetItemText(hListView1, j, 3, msg2); 
     j++; 
} 

但後來每當我打電話

ListView_DeleteAllItems(hListView1); 

如果我打電話後,我插入項目的函數,我的列表視圖被清除(列仍然存在),但沒有新項目insered .. 我聽說有關索引不清除,但我無法想象它o UT。

在此先感謝;-)

解決方案: 新增

lvItem.mask = LVIF_IMAGE | LVIF_STATE; 
lvItem.state = 0; 
lvItem.stateMask = 0; 
lvItem.iSubItem = 0; 
+1

有你'LVITEM'正確初始化。除了'.iItem'和'.iImage'之外,當你將它傳遞給'_InsertItem'的時候,你會留下垃圾。 – 2012-08-11 13:15:30

+0

感謝羅馬,這是問題,LVITEM沒有正確初始化。 thx – yves 2012-08-11 13:25:57

回答

1

你不設置lvItem.mask,所以ListView_InsertItem不知道哪些字段是有效的,哪些不是。

嘗試是這樣的:

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

新增 \t lvItem.mask = LVIF_IMAGE | LVIF_STATE; \t lvItem.state = 0; \t lvItem.stateMask = 0; \t lvItem.iSubItem = 0; 謝謝:-) – yves 2012-08-11 13:26:52

相關問題