Subitems in CListCtrl einfügen - Problem



  • Hi Fans,

    m_lvElements ist mein CListCtrl und darin gibt es 4 Spalten (Id, Type, Index, Name). In einer Schleife lese ich aus m_DpList Datenpunkte aus und schreibe diese in das CListCtrl. Komischerweise werden dann aber nur die Ids angezeigt, er Rest der Spalten bleibt leer:

    m_lvElements.DeleteAllItems();
    UpdateData(TRUE);
    m_lvElements.SetRedraw(FALSE);
    
    for (int i=0;i<Client->m_DpList.size();i++)
    {
       DP_ENTRY &dp = Client->m_DpList.at(i);
    
       LVITEM lvi;
       CString strItem;
    
       // Caption
       lvi.mask =  LVIF_IMAGE | LVIF_TEXT;
       strItem.Format(_T("%i"), i+1);
       lvi.iItem = i+1;
       lvi.iSubItem = 0;
       lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
       lvi.iImage = -1;
       m_lvElements.InsertItem(&lvi);
    
       // subitem 1
       strItem.Format(_T("%i"), (int)dp.byIpType);
       lvi.iSubItem = 1;
       lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
       m_lvElements.SetItem(&lvi);
    
       // subitem 2
       strItem.Format(_T("%i"), (int)dp.wIpIndex);
       lvi.iSubItem = 2;
       lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
       m_lvElements.SetItem(&lvi);
    
       // subitem 3	
       lvi.iSubItem = 3;
       lvi.pszText = dp.szName;
       m_lvElements.SetItem(&lvi);
    }
    
    m_lvElements.SetRedraw(TRUE);
    

    Warum?



  • Vermutlich musst Du die "LVIF_IMAGE" Mask bei den SubItems wegnehmen...



  • Ok, ich mach's jetzt so:

    m_lvElements.DeleteAllItems();
    UpdateData(TRUE);
    m_lvElements.SetRedraw(FALSE);
    
    for (int i=0;i<Client->m_DpList.size();i++)
    {
       DP_ENTRY &dp = Client->m_DpList.at(i);
       CString strItem;
    
       strItem.Format(TEXT("%d"), i+1);
    
       // Insert the item, select every other item.
       m_lvElements.InsertItem(LVIF_TEXT|LVIF_STATE, i, strItem, 0, LVIS_SELECTED, 0, 0);
    
       strItem.Format(TEXT("%d"), dp.byIpType);
       m_lvElements.SetItemText(i, 1, strItem);
    
       strItem.Format(TEXT("%d"), dp.wIpIndex);
       m_lvElements.SetItemText(i, 2, strItem);
    
       strItem.Format(TEXT("%s"), dp.szName);
       m_lvElements.SetItemText(i, 3, strItem);
    }
    
    m_lvElements.SetRedraw(TRUE);
    

    Das funktioniert.



  • Das ist noch schöner 😉


Anmelden zum Antworten