'ListView_SetSelectionMark' funktioniert nicht



  • Ja das hab ich.
    Wie gesagt, der Funktionsaufruf verursacht keinen Fehler, der Compiler erkennt die Funktion, aber sie ändert absolut nichts an meinem Programm.



  • Was willst du denn das passiert?

    The selection mark is the item index from which a multiple selection starts. This macro does not affect the selection state of the item.

    Wenn du ein Item selektiren willst benutze ListView_SetItemState mit LVIS_SELECTED, Informationen über das Makro gibt es natürlich in der MSDN 😉

    schirrmie



  • Okay, es ist nur so: um die Selektion eines Items abzufragen verwendete ich ListView_GetSelectionMark, und da dachte ich, ich benötige nur das Gegenteil mit "Set" anstatt "Get"

    Aber wie soll der Code denn aussehen? Ich hab das schon mal geraten bekommen und auch ausprobiert, aber ich hab nicht ganz verstanden wie das aussehen soll.
    Kann mir da mal jemand einen kleinen Code zeigen?!



  • Ich meine, was soll ich z.B. für UINT mask einsetzten?



  • Hast du denn bei mask schonmal LVIS_SELECTED probiert?



  • Ich dachte das währe für state, was soll ich denn dann bei state angeben?



  • Das gleiche 😉
    Ich habe mir das in der MSDN angeguckt, und da da keine Extra-Flags für mask stehen, gehe ich davon aus, dass die Flags sowohl für state als auch für mask gelten 🙂



  • Ich muss zugeben das es in der MSDN schlecht erklärt ist finde ich aber ok hab sowieso ne alte kann sein das es in der neuen besser erklärt ist.
    Das hier sollte es dir aber zeigen, es ist von CodeProject.com

    Select Item:
    ListView_SetItemState(hList, -1, 0, LVIS_SELECTED); // deselect all items
    SendMessage(hList,LVM_ENSUREVISIBLE ,
          (WPARAM)item,FALSE); // if item is far, scroll to it
    ListView_SetItemState(hList,item,
          LVIS_SELECTED ,LVIS_SELECTED); // select item
    ListView_SetItemState(hList,item,
          LVIS_FOCUSED ,LVIS_FOCUSED); // optional
    
    Select All Item:
    ListView_SetItemState(hList, -1, 0, 
          LVIS_SELECTED); // deselect all items
    ListView_SetItemState(hList,-1,
          LVIS_SELECTED ,LVIS_SELECTED);
    

    schirrmie



  • Okay, es funktioniert endlich 🙂
    Allerdings muss ich dann selbst scrollen um die Position auch mit dem Scrollbar einheitlich zu machen
    Danke 🙂



  • // auszug aus meinen WinAPI wrapper

    bool CListsControl::SelItem(const unsigned int& uiPos)
    {
    	LV_ITEM itemstate;
    	itemstate.mask = LVIF_STATE;
    	itemstate.iItem = uiPos;
    	itemstate.stateMask = LVIS_SELECTED;
    	::SendMessage(m_Handle, LVM_SETITEMSTATE, uiPos, reinterpret_cast<LPARAM>(&itemstate));
    	return true;
    }
    

Anmelden zum Antworten