ClipboardSaveRestore.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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(0);
  20. return bRet;
  21. }
  22. oleData.EnsureClipboardObject();
  23. oleData.BeginEnumFormats();
  24. while(oleData.GetNextFormat(&fm))
  25. {
  26. cf.m_hgData = oleData.GetGlobalData(fm.cfFormat);
  27. cf.m_cfType = fm.cfFormat;
  28. if(cf.m_hgData)
  29. {
  30. int nSize = GlobalSize(cf.m_hgData);
  31. if(nSize > 0)
  32. {
  33. m_Clipboard.Add(cf);
  34. bRet = true;
  35. }
  36. else
  37. {
  38. ASSERT(FALSE); // a valid GlobalMem with 0 size is strange
  39. cf.Free();
  40. }
  41. cf.m_hgData = 0; // m_Formats owns it now
  42. }
  43. }
  44. oleData.Release();
  45. return bRet;
  46. }
  47. bool CClipboardSaveRestore::Restore()
  48. {
  49. bool bRet = false;
  50. if(::OpenClipboard(NULL))
  51. {
  52. ::EmptyClipboard();
  53. int nSize = m_Clipboard.GetSize();
  54. for(int nPos = 0; nPos < nSize; nPos++)
  55. {
  56. CClipFormat cf = m_Clipboard[nPos];
  57. if(cf.m_hgData)
  58. {
  59. ::SetClipboardData(cf.m_cfType, cf.m_hgData);
  60. cf.m_hgData = NULL;//clipboard now owns the data
  61. bRet = TRUE;
  62. }
  63. }
  64. SetClipboardData(theApp.m_cfIgnoreClipboard, NewGlobalP("Ignore", sizeof("Ignore")));
  65. ::CloseClipboard();
  66. }
  67. m_Clipboard.RemoveAll();
  68. return bRet;
  69. }