F
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