Ich versteh es einfach nicht. Muss man denn die Zwischenablage nutzen, um Drag & Drop zu realisieren? Was macht dieses DROPEFFECT_COPY? Kopiert es mir die gesamte Datei?! Warum tut es dann bei mir nicht. Ich poste mal den Code, mal schaun, ob einer was mit anfangen kann...
und natürlcih hab ich auch in der MESSAGE_MAP folgendes getan:
Und die OnEditPaste, OnUpdateEditPaste, OnEditCopy, OnUpdateEditCopy deklariert...
Vielen Dank für jede Hilfe, die mich ein Schritt in die richtige Richtung bringt...
Grüße Rave
Code:
DROPEFFECT CColumnLevelView::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
{
TRACE("OnDragEnter\n");
CFileExplorerDoc* pDoc = (CFileExplorerDoc*)GetDocument();
ASSERT_VALID(pDoc);
if(pDataObject->IsDataAvailable(CF_TEXT))
{
return DROPEFFECT_COPY;
}
else
{
return DROPEFFECT_NONE;
}
return CFileExplorerLevelView::OnDragEnter(pDataObject, dwKeyState, point);
}
Code:
DROPEFFECT CColumnLevelView::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
{
TRACE("OnDragOver\n");
CFileExplorerDoc* pDoc = (CFileExplorerDoc*)GetDocument();
ASSERT_VALID(pDoc);
if(pDataObject->IsDataAvailable(CF_TEXT))
{
return DROPEFFECT_COPY;
}
else
{
return DROPEFFECT_NONE;
}
return CFileExplorerLevelView::OnDragOver(pDataObject, dwKeyState, point);
}
Code:
void CColumnLevelView::OnInitialUpdate()
{
m_dropTarget.Register(this);
}
Code:
CString CColumnLevelView::ConvertAndStoreData(CString text)
{
CString path;
int nPos;
nPos = text.Find('\n');
if(nPos > -1)
{
path = text.Left(nPos);
}
return path;
}
Code:
bool CColumnLevelView::ExtractData(COleDataObject *pDataObject, CString &text)
{
if(pDataObject->IsDataAvailable(CF_TEXT))
{
HGLOBAL hPath;
hPath = pDataObject->GetGlobalData(CF_TEXT);
if(hPath)
{
text = (LPTSTR)::GlobalLock(hPath);
GlobalUnlock(hPath);
GlobalFree(hPath);
return true;
}
}
return false;
}
Code:
BOOL CColumnLevelView::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point){
CString text;
CFileExplorerDoc* pDoc = (CFileExplorerDoc*)GetDocument();
ASSERT_VALID(pDoc);
if(ExtractData (pDataObject, text))
{
CString filepath;
filepath = ConvertAndStoreData(text);
Invalidate();
return true;
}
return false;
}
Code:
COleDataSource* CColumnLevelView::PutData()
{
HGLOBAL hPath;
COleDataSource* pDataSource = new COleDataSource();
// alloc memory to exchange via clipboard
hPath = ::GlobalAlloc(GMEM_SHARE, 256);
LPTSTR pPath = (LPTSTR)::GlobalLock(hPath);
ASSERT(pPath);
CString filepath = m_filepath;
sprintf(pPath,
"%s\r\n",
filepath);
::GlobalUnlock(hPath);
pDataSource->CacheGlobalData(CF_TEXT, hPath);
return pDataSource;
}
Code:
void CColumnLevelView::OnLButtonDown(UINT nFlags, CPoint point)
{
COleDataSource *pDataSource = PutData();
pDataSource->SetClipboard();
CFileExplorerDoc *pDoc = (CFileExplorerDoc*)GetDocument();
ASSERT_VALID(pDoc);
pDataSource->DoDragDrop(DROPEFFECT_COPY);
delete pDataSource;
CView::OnLButtonDown(nFlags, point);
}
und natürlcih hab ich auch in der MESSAGE_MAP folgendes getan:
Code:
//{{AFX_MSG_MAP(CColumnLevelView)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
//}}AFX_MSG_MAP
Und die OnEditPaste, OnUpdateEditPaste, OnEditCopy, OnUpdateEditCopy deklariert...
Vielen Dank für jede Hilfe, die mich ein Schritt in die richtige Richtung bringt...
Grüße Rave
Zuletzt bearbeitet: