OleListDropTarget.cpp
上传用户:aini_9474
上传日期:2007-01-03
资源大小:22k
文件大小:3k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // OleListDropTarget.cpp: implementation of the COleListDropTarget class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "OleListDropTarget.h"
  6. #include "GetList.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. COleListDropTarget::COleListDropTarget(CWnd* pParent)
  16. {
  17. m_pParent = pParent;
  18. }
  19. COleListDropTarget::~COleListDropTarget()
  20. {
  21. }
  22. //
  23. // OnDragEnter is called by OLE dll's when drag cursor enters
  24. // a window that is REGISTERed with the OLE dll's
  25. //
  26. DROPEFFECT COleListDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* 
  27.            pDataObject, DWORD dwKeyState, CPoint point )
  28. {
  29. if (!pDataObject->IsDataAvailable(CF_TEXT))
  30. {
  31. return DROPEFFECT_NONE;
  32. }
  33.     // if the control key is held down, return a drop effect COPY 
  34.     if((dwKeyState&MK_CONTROL) == MK_CONTROL)
  35.         return DROPEFFECT_COPY;
  36.     // Otherwise return a drop effect of MOVE
  37.     else
  38.         return DROPEFFECT_MOVE;    
  39. }
  40. //
  41. // OnDragLeave is called by OLE dll's when drag cursor leaves
  42. // a window that is REGISTERed with the OLE dll's
  43. //
  44. void COleListDropTarget::OnDragLeave(CWnd* pWnd)
  45. {
  46.     // Call base class implementation
  47.     COleDropTarget::OnDragLeave(pWnd);
  48. }
  49. // 
  50. // OnDragOver is called by OLE dll's when cursor is dragged over 
  51. // a window that is REGISTERed with the OLE dll's
  52. //
  53. DROPEFFECT COleListDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* 
  54.            pDataObject, DWORD dwKeyState, CPoint point )
  55. {     
  56. if (!pDataObject->IsDataAvailable(CF_TEXT))
  57. return DROPEFFECT_NONE;
  58.     if((dwKeyState&MK_CONTROL) == MK_CONTROL)
  59.         return DROPEFFECT_NONE;  
  60.     else
  61.         return DROPEFFECT_MOVE;  // move source
  62. }
  63. BOOL COleListDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject, 
  64.                  DROPEFFECT dropEffect, CPoint point )
  65. {           
  66.     HGLOBAL  hGlobal;
  67.     LPCSTR   pData;                     
  68. if (pDataObject->IsDataAvailable(CF_TEXT))
  69. {
  70. STGMEDIUM Stg;
  71. BOOL bValue = pDataObject->GetData(CF_TEXT, &Stg);
  72. TCHAR *strText = (TCHAR*)GlobalLock(Stg.hGlobal);
  73. CString strUrl;
  74. strUrl.Format("%s",strText);
  75. ((CGetList *)m_pParent)->AddUrl(strUrl);
  76. GlobalUnlock(Stg.hGlobal);
  77. GlobalFree(Stg.hGlobal);
  78. }
  79.     if((dropEffect&DROPEFFECT_MOVE) != DROPEFFECT_MOVE)
  80.         return FALSE;
  81.     // Get text data from COleDataObject
  82.     hGlobal=pDataObject->GetGlobalData(CF_TEXT);
  83.     // Get pointer to data
  84.     pData=(LPCSTR)GlobalLock(hGlobal);    
  85.     ASSERT(pData!=NULL); 
  86.     // Unlock memory - Send dropped text into the "bit-bucket"
  87.     GlobalUnlock(hGlobal);
  88.     return TRUE;
  89. }
  90. void COleListDropTarget::SetParent(CWnd *pParent)
  91. {
  92. m_pParent = pParent;
  93. }