Pfeiltaste runter event an CListCtrl senden

tutorobsch

Grünschnabel
Hallo,
ich möchte das selektierte Element in einen CListCtrl über zwei externe Buttons steuern.
Wenn ich den Button drücke, dann soll die Selektion eins tiefer bzw. höher gehen und bei bedarf soll dann das CListCtrl auch scrollen.

Meine Hoffnung war, der folgende Code, doch er funktioniert leider nicht:
void TestDialog::OnButtonUp()
{
ListControl.SendMessage(WM_KEYDOWN,VK_UP,0);
}

Hat jemand eine Idee?
 
Hallo,

ich würde dafür einen anderen Weg wählen:
Ausgehend vom aktuell selektierten Element den Nachfolger bzw. Vorgänger bestimmen und diesen dann selektieren.


Gruß
MCoder
 
Danke, aber den anderen Weg bin ich schon gegangen und bin mit dem Ergebnis nicht zufrieden:

void TestDialog::OnButtonUp()
{
int selectionIndex = ListControl.GetSelectionMark();
if (selectionIndex == 0)
return;
ListControl.SetItemState(selectionIndex, LVIS_SELECTED, 0 );
ListControl.SetItemState(--selectionIndex, LVIS_SELECTED, LVIS_SELECTED );
ListControl.SetSelectionMark(selectionIndex);
CSize size(0,-10); //fontsize
ListControl.Scroll(size);
}

Ich würde gerne weniger Code haben,
gibt es denn einen besseren Weg?
 
bin mit dem Ergebnis nicht zufrieden
Was meinst du damit?

Weniger Code wird's nicht, aber etwas anders würde ich's schon lösen:
C++:
void TestDialog::OnButtonUp() 
{
    POSITION pos = ListControl.GetFirstSelectedItemPosition();
    
    if( pos != NULL )
    {
        int nNextItem = ListControl.GetNextItem(ListControl.GetNextSelectedItem(pos), LVNI_ABOVE);
        
        if( nNextItem != (-1) )
        {
            ListControl.SetItemState(nNextItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
            EnsureVisible(nNextItem, FALSE);
        }            
    }        
}
Gruß
MCoder
 
Danke, die Lösung sieht eleganter aus.

Mit weniger Code meinte ich, dass es evtl. geht einen Tastendruck auf eine Pfeiltaste zu simulieren, weil das Control ja dafür ein default-Verhalten implementiert, was ich damit nutzen würde. Das EnsureVisible hilft auch schon!

Gruß
 

Neue Beiträge

Zurück