ClipboardSaveRestore.cpp 1.5 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. m_Clipboard.RemoveAll();
  13. bool bRet = false;
  14. COleDataObjectEx oleData;
  15. CClipFormat cf;
  16. if(::OpenClipboard(theApp.m_MainhWnd))
  17. {
  18. int nFormat = EnumClipboardFormats(0);
  19. while(nFormat != 0)
  20. {
  21. HGLOBAL hGlobal = ::GetClipboardData(nFormat);
  22. LPVOID pvData = GlobalLock(hGlobal);
  23. if(pvData)
  24. {
  25. ULONG Size = GlobalSize(hGlobal);
  26. if(Size > 0)
  27. {
  28. //Copy the data locally
  29. cf.m_hgData = NewGlobalP(pvData, Size);
  30. cf.m_cfType = nFormat;
  31. m_Clipboard.Add(cf);
  32. }
  33. GlobalUnlock(hGlobal);
  34. }
  35. nFormat = EnumClipboardFormats(nFormat);
  36. }
  37. ::CloseClipboard();
  38. bRet = true;
  39. }
  40. return bRet;
  41. }
  42. bool CClipboardSaveRestore::Restore()
  43. {
  44. bool bRet = false;
  45. if(::OpenClipboard(theApp.m_MainhWnd))
  46. {
  47. ::EmptyClipboard();
  48. SetClipboardData(theApp.m_cfIgnoreClipboard, NewGlobalP("Ignore", sizeof("Ignore")));
  49. int nSize = m_Clipboard.GetSize();
  50. for(int nPos = 0; nPos < nSize; nPos++)
  51. {
  52. CClipFormat *pCF = &m_Clipboard.ElementAt(nPos);
  53. if(pCF && pCF->m_hgData)
  54. {
  55. ::SetClipboardData(pCF->m_cfType, pCF->m_hgData);
  56. pCF->m_hgData = NULL;//clipboard now owns the data
  57. }
  58. }
  59. bRet = TRUE;
  60. ::CloseClipboard();
  61. }
  62. m_Clipboard.RemoveAll();
  63. if(bRet == FALSE)
  64. {
  65. Log(_T("CClipboardSaveRestore::Restore failed to restore clipboard"));
  66. }
  67. return bRet;
  68. }