X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/387ebd3eb755ea6ca076708cfb25fe56249bf787..cb73e6001f891ae46b12a1e4ca39b93649cb6099:/src/msw/clipbrd.cpp diff --git a/src/msw/clipbrd.cpp b/src/msw/clipbrd.cpp index 7f07e896eb..b857b77427 100644 --- a/src/msw/clipbrd.cpp +++ b/src/msw/clipbrd.cpp @@ -5,8 +5,8 @@ // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // =========================================================================== @@ -17,7 +17,7 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "clipbrd.h" #endif @@ -52,11 +52,10 @@ #include "wx/clipbrd.h" #include -#include #include "wx/msw/private.h" -#ifndef __WXMICROWIN__ +#if wxUSE_WXDIB #include "wx/msw/dib.h" #endif @@ -68,7 +67,7 @@ #include "wx/dataobj.h" #endif -#if wxUSE_OLE +#if wxUSE_OLE && !defined(__WXWINCE__) // use OLE clipboard #define wxUSE_OLE_CLIPBOARD 1 #else // !wxUSE_DATAOBJ @@ -80,10 +79,6 @@ #include #endif // wxUSE_OLE_CLIPBOARD -#ifdef __WIN16__ - #define memcpy hmemcpy -#endif - // =========================================================================== // implementation // =========================================================================== @@ -164,7 +159,7 @@ bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat) case CF_BITMAP: return ::IsClipboardFormatAvailable(CF_DIB) != 0; -#if wxUSE_ENH_METAFILE && !defined(__WIN16__) +#if wxUSE_ENH_METAFILE && !defined(__WIN16__) && !defined(__WXWINCE__) case CF_METAFILEPICT: return ::IsClipboardFormatAvailable(CF_ENHMETAFILE) != 0; #endif // wxUSE_ENH_METAFILE @@ -174,6 +169,7 @@ bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat) } } + bool wxSetClipboardData(wxDataFormat dataFormat, const void *data, int width, int height) @@ -218,22 +214,24 @@ bool wxSetClipboardData(wxDataFormat dataFormat, break; } +#if wxUSE_WXDIB case wxDF_DIB: { -#if wxUSE_IMAGE_LOADING_IN_MSW wxBitmap *bitmap = (wxBitmap *)data; - HBITMAP hBitmap = (HBITMAP)bitmap->GetHBITMAP(); - // NULL palette means to use the system one - HANDLE hDIB = wxBitmapToDIB(hBitmap, (HPALETTE)NULL); - handle = SetClipboardData(CF_DIB, hDIB); -#endif // wxUSE_IMAGE_LOADING_IN_MSW + + HGLOBAL hDIB = wxDIB::ConvertFromBitmap(GetHbitmapOf(*bitmap)); + if ( hDIB ) + { + handle = ::SetClipboardData(CF_DIB, hDIB); + } break; } +#endif // VZ: I'm told that this code works, but it doesn't seem to work for me - // and, anyhow, I'd be highly surprized if it did. So I leave it here + // and, anyhow, I'd be highly surprised if it did. So I leave it here // but IMNSHO it is completely broken. -#if wxUSE_METAFILE && !defined(wxMETAFILE_IS_ENH) +#if wxUSE_METAFILE && !defined(wxMETAFILE_IS_ENH) && !defined(__WXWINCE__) case wxDF_METAFILE: { wxMetafile *wxMF = (wxMetafile *)data; @@ -252,7 +250,7 @@ bool wxSetClipboardData(wxDataFormat dataFormat, } #endif // wxUSE_METAFILE -#if wxUSE_ENH_METAFILE && !defined(__WIN16__) +#if wxUSE_ENH_METAFILE && !defined(__WIN16__) && !defined(__WXWINCE__) case wxDF_ENHMETAFILE: { wxEnhMetaFile *emf = (wxEnhMetaFile *)data; @@ -390,6 +388,7 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len) switch ( dataFormat ) { +#ifndef __WXWINCE__ case wxDF_BITMAP: { BITMAP bm; @@ -431,13 +430,10 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len) wxBM->SetWidth(bm.bmWidth); wxBM->SetHeight(bm.bmHeight); wxBM->SetDepth(bm.bmPlanes); -#if WXWIN_COMPATIBILITY_2 - wxBM->SetOk(TRUE); -#endif // WXWIN_COMPATIBILITY_2 retval = wxBM; break; } - +#endif case wxDF_METAFILE: case CF_SYLK: case CF_DIF: @@ -465,11 +461,11 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len) if (!s) break; - LPSTR lpGlobalMemory = (LPSTR)::GlobalLock(hGlobalMemory); + LPSTR lpGlobalMemory = (LPSTR) GlobalLock(hGlobalMemory); memcpy(s, lpGlobalMemory, hsize); - ::GlobalUnlock(hGlobalMemory); + GlobalUnlock(hGlobalMemory); retval = s; break; @@ -489,11 +485,11 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len) if ( !buf ) break; - LPSTR lpGlobalMemory = (LPSTR)::GlobalLock(hGlobalMemory); + LPSTR lpGlobalMemory = (LPSTR) GlobalLock(hGlobalMemory); memcpy(buf, lpGlobalMemory, size); - ::GlobalUnlock(hGlobalMemory); + GlobalUnlock(hGlobalMemory); retval = buf; break; @@ -534,6 +530,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxClipboard, wxObject) wxClipboard::wxClipboard() { m_clearOnExit = FALSE; + m_isOpened = FALSE; } wxClipboard::~wxClipboard() @@ -577,6 +574,7 @@ bool wxClipboard::Flush() bool wxClipboard::Open() { // OLE opens clipboard for us + m_isOpened = TRUE; #if wxUSE_OLE_CLIPBOARD return TRUE; #else @@ -587,7 +585,7 @@ bool wxClipboard::Open() bool wxClipboard::IsOpened() const { #if wxUSE_OLE_CLIPBOARD - return TRUE; + return m_isOpened; #else return wxIsClipboardOpened(); #endif @@ -680,7 +678,7 @@ bool wxClipboard::AddData( wxDataObject *data ) // This didn't compile, of course // return wxSetClipboardData(data); // TODO - wxLogError("Not implemented."); + wxLogError(wxT("Not implemented.")); return FALSE; } } @@ -691,6 +689,7 @@ bool wxClipboard::AddData( wxDataObject *data ) void wxClipboard::Close() { + m_isOpened = FALSE; // OLE closes clipboard for us #if !wxUSE_OLE_CLIPBOARD wxCloseClipboard(); @@ -806,7 +805,7 @@ bool wxClipboard::GetData( wxDataObject& data ) case CF_BITMAP: formatEtc.tymed = TYMED_GDI; break; - +#ifndef __WXWINCE__ case CF_METAFILEPICT: formatEtc.tymed = TYMED_MFPICT; break; @@ -814,7 +813,7 @@ bool wxClipboard::GetData( wxDataObject& data ) case CF_ENHMETAFILE: formatEtc.tymed = TYMED_ENHMF; break; - +#endif default: formatEtc.tymed = TYMED_HGLOBAL; } @@ -871,7 +870,7 @@ bool wxClipboard::GetData( wxDataObject& data ) if ( !s ) return FALSE; - textDataObject.SetText(s); + textDataObject.SetText(wxString::FromAscii(s)); delete [] s; return TRUE;