X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c5639a8767db96e9126c7223ccab388dcb4872d5..e4a8a172020d5e3ee08660420142e702799c7878:/src/msw/ole/droptgt.cpp diff --git a/src/msw/ole/droptgt.cpp b/src/msw/ole/droptgt.cpp index 8bc18646cd..46da03329d 100644 --- a/src/msw/ole/droptgt.cpp +++ b/src/msw/ole/droptgt.cpp @@ -6,7 +6,7 @@ // Created: // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "droptgt.h" #endif @@ -32,12 +32,18 @@ #if wxUSE_OLE && wxUSE_DRAG_AND_DROP +#include "wx/msw/private.h" #include "wx/log.h" +#ifdef __WXWINCE__ + #include + #include +#endif + #ifdef __WIN32__ #if !defined(__GNUWIN32__) || wxUSE_NORLANDER_HEADERS #if wxCHECK_W32API_VERSION( 1, 0 ) - #include + #include "wx/msw/wrapwin.h" #endif #include // for DROPFILES structure #endif @@ -47,11 +53,6 @@ #include "wx/dnd.h" -#ifndef __WIN32__ - #include - #include -#endif - #include "wx/msw/ole/oleutils.h" // ---------------------------------------------------------------------------- @@ -85,6 +86,8 @@ protected: // get default drop effect for given keyboard flags static inline DWORD GetDropEffect(DWORD flags); + + DECLARE_NO_COPY_CLASS(wxIDropTarget) }; // ---------------------------------------------------------------------------- @@ -113,7 +116,6 @@ DWORD wxIDropTarget::GetDropEffect(DWORD flags) wxIDropTarget::wxIDropTarget(wxDropTarget *pTarget) { - m_cRef = 0; m_pTarget = pTarget; m_pIDataObject = NULL; } @@ -148,7 +150,7 @@ STDMETHODIMP wxIDropTarget::DragEnter(IDataObject *pIDataSource, _T("drop target must have data object") ); // show the list of formats supported by the source data object for the - // debugging purposes + // debugging purposes, this is quite useful sometimes - please don't remove #if 0 IEnumFORMATETC *penumFmt; if ( SUCCEEDED(pIDataSource->EnumFormatEtc(DATADIR_GET, &penumFmt)) ) @@ -328,16 +330,23 @@ wxDropTarget::~wxDropTarget() bool wxDropTarget::Register(WXHWND hwnd) { - HRESULT hr = ::CoLockObjectExternal(m_pIDropTarget, TRUE, FALSE); + HRESULT hr; + + // May exist in later WinCE versions +#ifndef __WXWINCE__ + hr = ::CoLockObjectExternal(m_pIDropTarget, TRUE, FALSE); if ( FAILED(hr) ) { wxLogApiError(wxT("CoLockObjectExternal"), hr); return FALSE; } +#endif hr = ::RegisterDragDrop((HWND) hwnd, m_pIDropTarget); if ( FAILED(hr) ) { + // May exist in later WinCE versions +#ifndef __WXWINCE__ ::CoLockObjectExternal(m_pIDropTarget, FALSE, FALSE); - +#endif wxLogApiError(wxT("RegisterDragDrop"), hr); return FALSE; } @@ -356,7 +365,10 @@ void wxDropTarget::Revoke(WXHWND hwnd) wxLogApiError(wxT("RevokeDragDrop"), hr); } + // May exist in later WinCE versions +#ifndef __WXWINCE__ ::CoLockObjectExternal(m_pIDropTarget, FALSE, TRUE); +#endif m_pIDropTarget->SetHwnd(0); } @@ -402,11 +414,11 @@ bool wxDropTarget::GetData() rc = TRUE; } else { - wxLogLastError(wxT("IDataObject::SetData()")); + wxLogApiError(wxT("IDataObject::SetData()"), hr); } } else { - wxLogLastError(wxT("IDataObject::GetData()")); + wxLogApiError(wxT("IDataObject::GetData()"), hr); } return rc; @@ -484,6 +496,9 @@ static wxDragResult ConvertDragEffectToResult(DWORD dwEffect) case DROPEFFECT_COPY: return wxDragCopy; + case DROPEFFECT_LINK: + return wxDragLink; + case DROPEFFECT_MOVE: return wxDragMove; @@ -502,6 +517,9 @@ static DWORD ConvertDragResultToEffect(wxDragResult result) case wxDragCopy: return DROPEFFECT_COPY; + case wxDragLink: + return DROPEFFECT_LINK; + case wxDragMove: return DROPEFFECT_MOVE;