ClipboardSaveRestore.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "stdafx.h"
  2. #include "CP_Main.h"
  3. #include ".\clipboardsaverestore.h"
  4. CClipboardSaveRestore::CClipboardSaveRestore(void)
  5. {
  6. }
  7. CClipboardSaveRestore::~CClipboardSaveRestore(void)
  8. {
  9. }
  10. bool CClipboardSaveRestore::Save()
  11. {
  12. bool bRet = false;
  13. COleDataObjectEx oleData;
  14. CClipFormat cf;
  15. FORMATETC fm;
  16. //Attach to the clipboard
  17. if(!oleData.AttachClipboard())
  18. {
  19. ASSERT(FALSE);
  20. Log(_T("CClipboardSaveRestore::Save error opening clipboard"));
  21. return bRet;
  22. }
  23. oleData.EnsureClipboardObject();
  24. oleData.BeginEnumFormats();
  25. while(oleData.GetNextFormat(&fm))
  26. {
  27. cf.m_hgData = oleData.GetGlobalData(fm.cfFormat);
  28. cf.m_cfType = fm.cfFormat;
  29. if(cf.m_hgData)
  30. {
  31. int nSize = GlobalSize(cf.m_hgData);
  32. if(nSize > 0)
  33. {
  34. m_Clipboard.Add(cf);
  35. bRet = true;
  36. }
  37. else
  38. {
  39. ASSERT(FALSE); // a valid GlobalMem with 0 size is strange
  40. cf.Free();
  41. }
  42. cf.m_hgData = 0; // m_Formats owns it now
  43. }
  44. }
  45. oleData.Release();
  46. return bRet;
  47. }
  48. bool CClipboardSaveRestore::Restore()
  49. {
  50. bool bRet = false;
  51. if(::OpenClipboard(NULL))
  52. {
  53. ::EmptyClipboard();
  54. int nSize = m_Clipboard.GetSize();
  55. for(int nPos = 0; nPos < nSize; nPos++)
  56. {
  57. CClipFormat cf = m_Clipboard[nPos];
  58. if(cf.m_hgData)
  59. {
  60. ::SetClipboardData(cf.m_cfType, cf.m_hgData);
  61. cf.m_hgData = NULL;//clipboard now owns the data
  62. bRet = TRUE;
  63. }
  64. }
  65. SetClipboardData(theApp.m_cfIgnoreClipboard, NewGlobalP("Ignore", sizeof("Ignore")));
  66. ::CloseClipboard();
  67. }
  68. m_Clipboard.RemoveAll();
  69. return bRet;
  70. }