Drag&Drop 2 Listboxen



  • Hallo,

    ich bräuchte bitte mal einen kleinen Hinweis warum mein Drag&Drop von einem ListCtrl in das andere nicht funktioniert. Ich suche hier schon über eine Stunde und habe das jetzt mal auf ein Testprogramm heruntergebrochen:

    Ich habe 2 List-Controls auf einem CDialog, Drag&Drop soll von 1 -> 2 erfolgen
    AfxOleInit() ist in InitInstance(...) gemacht

    CListCtrl	m_List2;
    	CListCtrl	m_List1;
    

    Handler BeginDrag für List1 erzeugt und implementiert
    Im TRACE erscheint, wie es sein soll "Begin DragDrop" sobald die Maus mit gedrückter Taste bewegt wird:

    void CZZBOXDlg::OnBegindragList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    
    	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    	COleDataSource* pSource	= new COleDataSource();
    
            TRACE("Begin DragDrop\n");
    
            DROPEFFECT dropEffect = pSource->DoDragDrop( DROPEFFECT_MOVE|DROPEFFECT_COPY, NULL );
    
    	TRACE("End DragDrop\n");
    
    	delete pSource;
            *pResult = 0;
    }
    

    Klasse von COleDropTarget abgeleitet und OnDrop() sowie OnDragEnter() überschrieben

    class CMyDragDrop : public COleDropTarget  
    {
    public:
    	virtual BOOL OnDrop( CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point );
    	virtual DROPEFFECT OnDragEnter( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point );
    };
    
    //....
    
    DROPEFFECT CMyDragDrop::OnDragEnter( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point )
    {
    	TRACE("OnDragEnter\n");
    	return DROPEFFECT_COPY;
    }
    
    BOOL CMyDragDrop ::OnDrop( CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point )
    {
    	TRACE("OnDrop(...)\n");
    	return TRUE;
    }
    

    Eine Instanz von CMyDragDrop erstellt und auf List2 registriert:

    // header
    CMyDragDrop m_DoDragDrop;
    //....
    // cpp
    m_DoDragDrop.Register( GetDlgItem(IDC_LIST2) );
    

    Soweit hoffe ich genügend Code.

    Im Trace erscheint nacheinander:

    "Begin DragDrop", sobald die Maus mit LMT bewegt wird -> also korrekt
    "OnDragEnter", sobald man in List2 fährt, allerdings ändert sich das Mauszeiger nicht, sondern es bleibt das "Verbotszeichen" <-- Hier ist wohl was faul

    ...
    End DragDrop, sobald ich "aufgegeben" habe 😉

    Hat jemand nen Tipp? Besten Dank.

    Gruß
    foodax


Anmelden zum Antworten