+class CFSTR_SHELLURLDataObject:public wxCustomDataObject
+{
+public:
+ CFSTR_SHELLURLDataObject() : wxCustomDataObject(CFSTR_SHELLURL) {}
+protected:
+ virtual size_t GetBufferOffset( const wxDataFormat& format )
+ {
+ return 0;
+ }
+
+ virtual const void* GetSizeFromBuffer( const void* buffer, size_t* size,
+ const wxDataFormat& format )
+ {
+ // CFSTR_SHELLURL is _always_ ANSI text
+ *size = strlen( (const char*)buffer );
+
+ return buffer;
+ }
+
+ virtual void* SetSizeInBuffer( void* buffer, size_t size,
+ const wxDataFormat& format )
+ {
+ return buffer;
+ }
+#if wxUSE_UNICODE
+ virtual bool GetDataHere( void* buffer ) const
+ {
+ // CFSTR_SHELLURL is _always_ ANSI!
+ wxCharBuffer char_buffer( GetDataSize() );
+ wxCustomDataObject::GetDataHere( (void*)char_buffer.data() );
+ wxString unicode_buffer( char_buffer );
+ memcpy( buffer, unicode_buffer.c_str(),
+ ( unicode_buffer.length() + 1 ) * sizeof(wxChar) );
+
+ return TRUE;
+ }
+#endif
+};
+