2

WM_CREATE proc で初期化される 4 つの列を持つ ListView コントロールがあります。

        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);

次に、アイテムを挿入する関数があります(deletealitemsを呼び出すまでは正常に機能します)

...
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);

アイテムを挿入する関数を呼び出した後、リストビューはクリアされますが (列はまだそこにあります)、新しいアイテムは挿入されません.. インデックスがクリアされていないという話を聞きましたが、わかりませんでした。

前もって感謝します ;-)

解決策:追加

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

1 に答える 1

1

を設定していないため、有効なフィールドlvItem.maskとそうListView_InsertItemでないフィールドがわかりません。

次のようなことを試してください:

...
LVITEM lvItem;
lvItem.mask = LVIF_IMAGE | LVIF_DI_SETITEM;
j = 0;
...
于 2012-08-11T13:20:35.147 に答える