00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027
00028 #include "stdafx.h"
00029 #include "GridCtrl.h"
00030
00031 #ifndef GRIDCONTROL_NO_DRAGDROP
00032 #include "GridDropTarget.h"
00033
00034 #ifdef _DEBUG
00035 #define new DEBUG_NEW
00036 #undef THIS_FILE
00037 static char THIS_FILE[] = __FILE__;
00038 #endif
00039
00041
00042
00043 CGridDropTarget::CGridDropTarget()
00044 {
00045 m_pGridCtrl = NULL;
00046 m_bRegistered = FALSE;
00047 }
00048
00049 CGridDropTarget::~CGridDropTarget()
00050 {
00051 }
00052
00053
00054
00055
00056 BOOL CGridDropTarget::Register(CGridCtrl *pGridCtrl)
00057 {
00058 if (m_bRegistered)
00059 return FALSE;
00060
00061
00062 static BOOL bInProcedure = FALSE;
00063 if (bInProcedure)
00064 return FALSE;
00065 bInProcedure = TRUE;
00066
00067 ASSERT(pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)));
00068 ASSERT(pGridCtrl);
00069
00070 if (!pGridCtrl || !pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)))
00071 {
00072 bInProcedure = FALSE;
00073 return FALSE;
00074 }
00075
00076 m_pGridCtrl = pGridCtrl;
00077
00078 m_bRegistered = COleDropTarget::Register(pGridCtrl);
00079
00080 bInProcedure = FALSE;
00081 return m_bRegistered;
00082 }
00083
00084 void CGridDropTarget::Revoke()
00085 {
00086 m_bRegistered = FALSE;
00087 COleDropTarget::Revoke();
00088 }
00089
00090 BEGIN_MESSAGE_MAP(CGridDropTarget, COleDropTarget)
00091
00092
00093 END_MESSAGE_MAP()
00094
00096
00097
00098 DROPEFFECT CGridDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint )
00099 {
00100
00101 if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
00102 {
00103 if (dwKeyState & MK_CONTROL)
00104 return DROPEFFECT_COPY;
00105 else
00106 return DROPEFFECT_MOVE;
00107 } else
00108 return DROPEFFECT_NONE;
00109 }
00110
00111 DROPEFFECT CGridDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject,
00112 DWORD dwKeyState, CPoint point)
00113 {
00114 TRACE(_T("In CGridDropTarget::OnDragEnter\n"));
00115 ASSERT(m_pGridCtrl);
00116
00117 if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
00118 return m_pGridCtrl->OnDragEnter(pDataObject, dwKeyState, point);
00119 else
00120 return DROPEFFECT_NONE;
00121 }
00122
00123 void CGridDropTarget::OnDragLeave(CWnd* pWnd)
00124 {
00125 TRACE(_T("In CGridDropTarget::OnDragLeave\n"));
00126 ASSERT(m_pGridCtrl);
00127
00128 if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
00129 m_pGridCtrl->OnDragLeave();
00130 }
00131
00132 DROPEFFECT CGridDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject,
00133 DWORD dwKeyState, CPoint point)
00134 {
00135
00136 ASSERT(m_pGridCtrl);
00137
00138 if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
00139 return m_pGridCtrl->OnDragOver(pDataObject, dwKeyState, point);
00140 else
00141 return DROPEFFECT_NONE;
00142 }
00143
00144 BOOL CGridDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject,
00145 DROPEFFECT dropEffect, CPoint point)
00146 {
00147 TRACE(_T("In CGridDropTarget::OnDrop\n"));
00148 ASSERT(m_pGridCtrl);
00149
00150 if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
00151 return m_pGridCtrl->OnDrop(pDataObject, dropEffect, point);
00152 else
00153 return FALSE;
00154 }
00155
00156 #endif // GRIDCONTROL_NO_DRAGDROP