00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CMSWINDOWSCLIPBOARD_H
00016 #define CMSWINDOWSCLIPBOARD_H
00017
00018 #include "IClipboard.h"
00019 #include "stdvector.h"
00020 #define WIN32_LEAN_AND_MEAN
00021 #include <windows.h>
00022
00023 class IMSWindowsClipboardConverter;
00024
00026 class CMSWindowsClipboard : public IClipboard {
00027 public:
00028 CMSWindowsClipboard(HWND window);
00029 virtual ~CMSWindowsClipboard();
00030
00032
00044 bool emptyUnowned();
00045
00047 static bool isOwnedBySynergy();
00048
00049
00050 virtual bool empty();
00051 virtual void add(EFormat, const CString& data);
00052 virtual bool open(Time) const;
00053 virtual void close() const;
00054 virtual Time getTime() const;
00055 virtual bool has(EFormat) const;
00056 virtual CString get(EFormat) const;
00057
00058 private:
00059 void clearConverters();
00060
00061 UINT convertFormatToWin32(EFormat) const;
00062 HANDLE convertTextToWin32(const CString& data) const;
00063 CString convertTextFromWin32(HANDLE) const;
00064
00065 static UINT getOwnershipFormat();
00066
00067 private:
00068 typedef std::vector<IMSWindowsClipboardConverter*> ConverterList;
00069
00070 HWND m_window;
00071 mutable Time m_time;
00072 ConverterList m_converters;
00073 static UINT s_ownershipFormat;
00074 };
00075
00077
00081 class IMSWindowsClipboardConverter : public IInterface {
00082 public:
00083
00084
00085
00086 virtual IClipboard::EFormat
00087 getFormat() const = 0;
00088
00089
00090
00091 virtual UINT getWin32Format() const = 0;
00092
00093
00094
00095
00096
00097 virtual HANDLE fromIClipboard(const CString&) const = 0;
00098
00099
00100
00101 virtual CString toIClipboard(HANDLE data) const = 0;
00102 };
00103
00104 #endif