STDMETHODIMP CSVGSwatchesDlg::Drop(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect) { ASSERT(0); #if 0 POINT point; point.x = pt.x; point.y = pt.y; ScreenToClient(&point); COleDataObjectWrapper dataObject; dataObject.Attach(pDataObject); HGLOBAL hData; if (m_viewGroup) { CComPtr<IEXMLDocument> eXMLDocument; m_viewGroup->get_eXMLDocument(&eXMLDocument); #if 0 if (hData = dataObject.GetGlobalData(CF_HDROP)) { DROPFILES* dp = (DROPFILES*)GlobalLock(hData); if (dp) { char* p = (char*)(dp+1); int i = 0; TCHAR filename[512]; while (*p) { filename[i++] = *p++; } filename[i] = 0; CHTMDesignFrame* pFrame = NULL; m_pFrameSet->OnButtonDown(0, point, 0, FALSE, &pFrame); if (pFrame) { pFrame->m_pElement->setAttribute(L"src", _bstr_t(filename)); //m_pDocument->CreateHTMLTree(); //m_pDocument->UpdateAllViews(NULL); } } GlobalUnlock(hData); { BuildFrames(); OnSize(); InvalidateRect(NULL, TRUE); } *pdwEffect = DROPEFFECT_COPY; } else #endif if (hData = dataObject.GetGlobalData(CF_UNICODETEXT)) { WCHAR* text = (WCHAR*)GlobalLock(hData); int len = GlobalSize(hData); CComPtr<ILSVGDocument> svgdocument; svgdocument.CoCreateInstance(CLSID_LSVGDocument); VARIANT_BOOL bsuccess; svgdocument->loadXML(_bstr_t(text), &bsuccess); if (bsuccess) { CComQIPtr<IEDocument> eDocument = eXMLDocument; IUndoManager* undoManager; eDocument->get_undoManager(&undoManager); CComObject<CUndoParent>* pParentUndo; CComObject<CUndoParent>::CreateInstance(&pParentUndo); if (pParentUndo) { pParentUndo->AddRef(); // ??? undoManager->Open(pParentUndo); CComPtr<ILSVGElement> svgDefsElement; eXMLDocument->FindOrCreateSVGDefs(&svgDefsElement); if (svgDefsElement) { CComPtr<ILDOMElement> documentElement; svgdocument->get_documentElement(&documentElement); CComPtr<ILDOMNode> node; documentElement->get_firstChild(&node); while (node) { CComPtr<ILDOMNode> nextSibling; node->get_nextSibling(&nextSibling); CComQIPtr<ILSVGGradientElement> svgGradientElement = node; if (svgGradientElement) { m_listView.m_xmlDocument->adoptNode(svgGradientElement, NULL); CComObject<CWEUndoNewElement>* pUndo; CComObject<CWEUndoNewElement>::CreateInstance(&pUndo); if (pUndo) { // pUndo->AddRef(); pUndo->m_pDocument = static_cast<CEXMLDocument*>(eXMLDocument.p); pUndo->DoInitial(undoManager, svgGradientElement, svgDefsElement, NULL); } } node = nextSibling; } } undoManager->Close(pParentUndo, TRUE/*commit*/); } } GlobalUnlock(hData); //return TRUE; } } #endif return S_OK; }
STDMETHODIMP CXMiLFilesControl::Drop(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect) { // CWebSite* pWebSite = (CWebSite*)m_document.p; CSiteDir* pParent; if (m_prevDropItem) { DWORD state; m_treeCtl->GetItemState(m_prevDropItem, &state); m_treeCtl->SetItemState(m_prevDropItem, state &~ 2); CSiteItem* pItem; m_treeCtl->GetItemInfo(m_prevDropItem, (DWORD*)&pItem, NULL, NULL); if (pItem->m_type == 1) // Dropped on directory pParent = (CSiteDir*)pItem; else pParent = pItem->m_parent; m_prevDropItem = NULL; } else { pParent = m_pRootDir; } COleDataObjectWrapper dataObject; dataObject.Attach(pDataObject); HGLOBAL hData; if (hData = dataObject.GetGlobalData(CF_HDROP)) { DROPFILES* dp = (DROPFILES*)GlobalLock(hData); if (dp) { CArray<_bstr_t,_bstr_t&> filenames; if (dp->fWide) { WCHAR* p = (WCHAR*)(dp+1); while (*p) { _bstr_t file = p; p += file.length() + 1; filenames.Add(file); } } else { char* p = (char*)(dp+1); while (*p) { _bstr_t file = p; p += file.length() + 1; filenames.Add(file); } } SAFEARRAYBOUND rgsabound[1]; rgsabound[0].lLbound = 0; rgsabound[0].cElements = filenames.GetSize(); SAFEARRAY* sa = SafeArrayCreate(VT_BSTR, 1, rgsabound); if (sa) { for (int i = 0; i < filenames.GetSize(); i++) { _bstr_t& filepath = filenames[i]; long ix[1]; ix[0] = i; SafeArrayPutElement(sa, ix, (BSTR)filepath/*.copy()*/); } long nFilesCopied; CopyMoveFiles(pParent->GetFullPathName(), sa, VARIANT_FALSE, &nFilesCopied); SafeArrayDestroy(sa); } GlobalUnlock(hData); *pdwEffect = DROPEFFECT_COPY; } } return S_OK; }