CListCtrl - Drag&Drop mit CListCtrl



  • Ich habe zwei Listen: bei der ersten wird das Ereignis LVN_BEGINDRAG abgefangen, was auch einwandfrei funktioniert.
    Ich speichere mir damit die ausgewählten Daten und ändere den Cursor, aber leider gibt es kein Ereignis LVN_ENDDRAG (nur bei Windows CE), um das Droppen in der zweiten Liste abzufangen.
    Ereignis für "Rechte Maustaste hoch" wird auch nicht unterstützt...
    Jemand nen Plan??



  • Sicher !

    COleDropTarget in 2. Liste erstellen, registrieren und dann die virtuellen Funktionen OnDragOver, OnDrop, OnDragEnter, OnDragLeave dessen überschreiben !



  • Esrtmal danke für die Antwort.
    Ich habe jetzte eine Klasse CDropTarget von COleDropTarget abgeleitet, auf meine zweite Liste registriert und die genannten Methoden überschrieben...
    Muss ich jetzt für die erste Liste eine Klasse vom Stamm der COleDropSource erzeugen? Wenn ja, hast Du da vielleicht ein kleines Beispiel?
    Auf LVN_BEGINDRAG reagiert die erste Liste, aber trotz Registrierung kümmert das Loslassen der Maustaste die zweite Liste recht wenig...



  • in Funktion

    OnLButtonUp(UINT nFlags, CPoint point)

    CPoint pt(point);
    ClientToScreen(&pt);
    CWnd* m_pDropWnd = WindowFromPoint(pt);
     if (m_pDropWnd == &m_listto)
    {
    
    //Nun hast du das listctrl wo die einträge hinkopiert werden sollen
    //m_listto
    }
    

    Nun nur noch alle Daten vom ersten Listctrl in das 2te Kopieren.

    [ Dieser Beitrag wurde am 05.03.2002 um 17:51 Uhr von Unix-Tom editiert. ]



  • Im ersten ListFeld erstellst Du ein COleDataSource-Objekt, wo Du die Daten drin 'verpackst' !
    Wenn Dein 2. ListCtrl richtig registriert ist mit COleDropTarget, dann wird beim Loslassen der Maustaste über dem 2. ListCtrl die virtuelle Funktion OnDrop von COleDropTarget angesprungen !
    Vorher mußt Du in OnDragOver abprüfen, ob der Inhalt des Drop-Objekts in das Ctrl gedropped werden darf. Wenn ja mußt Du angeben, in welcher Form.

    Wenn diese Form != DROPEFFECT_NONE ist, mußt Du in OnDrop die Daten entpacken und dann dem 2.ListCtrl zur Verfügung stellen !


Anmelden zum Antworten