www.pudn.com > FEMS.rar > GridDropTarget.cpp


// GridDropTarget.cpp : implementation file 
// 
// CGridDropTarget is an OLE drop target for CGridCtrl. All it does 
// is handle the drag and drop windows messages and pass them 
// directly onto the grid control. 
// 
// Written by Chris Maunder  
//        mailto:chrismaunder@codeguru.com 
// 
// Copyright (c) 1998. 
 
#include "stdafx.h" 
#include "GridCtrl.h" 
 
#ifndef GRIDCONTROL_NO_DRAGDROP 
#include "GridDropTarget.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CGridDropTarget 
 
CGridDropTarget::CGridDropTarget() 
{ 
    m_pGridCtrl = NULL; 
    m_bRegistered = FALSE; 
} 
 
CGridDropTarget::~CGridDropTarget() 
{ 
} 
 
// Overloaded Register() function performs the normal COleDropTarget::Register 
// but also serves to connect this COleDropTarget with the parent grid control, 
// where all drop messages will ultimately be forwarded. 
BOOL CGridDropTarget::Register(CGridCtrl *pGridCtrl) 
{ 
    if (m_bRegistered) return FALSE; 
 
    ASSERT(pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl))); 
    ASSERT(pGridCtrl); 
 
    if (!pGridCtrl || !pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl))) 
        return FALSE; 
 
    m_pGridCtrl = pGridCtrl; 
 
    m_bRegistered = COleDropTarget::Register(pGridCtrl); 
    return m_bRegistered; 
} 
 
void CGridDropTarget::Revoke() 
{ 
    m_bRegistered = FALSE; 
    COleDropTarget::Revoke(); 
} 
 
BEGIN_MESSAGE_MAP(CGridDropTarget, COleDropTarget) 
    //{{AFX_MSG_MAP(CGridDropTarget) 
    //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CGridDropTarget message handlers 
 
DROPEFFECT CGridDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint /*point*/) 
{ 
//    TRACE("In CGridDropTarget::OnDragScroll\n"); 
    if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd()) 
    { 
        if (dwKeyState & MK_CONTROL) 
            return DROPEFFECT_COPY; 
        else 
            return DROPEFFECT_MOVE; 
    } else 
        return DROPEFFECT_NONE; 
} 
 
DROPEFFECT CGridDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject,  
                                        DWORD dwKeyState, CPoint point) 
{ 
    TRACE(_T("In CGridDropTarget::OnDragEnter\n")); 
    ASSERT(m_pGridCtrl); 
 
    if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd()) 
        return m_pGridCtrl->OnDragEnter(pDataObject, dwKeyState, point); 
    else 
        return DROPEFFECT_NONE; 
} 
 
void CGridDropTarget::OnDragLeave(CWnd* pWnd) 
{ 
    TRACE(_T("In CGridDropTarget::OnDragLeave\n")); 
    ASSERT(m_pGridCtrl); 
 
    if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd()) 
        m_pGridCtrl->OnDragLeave(); 
} 
 
DROPEFFECT CGridDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject,  
                                       DWORD dwKeyState, CPoint point) 
{ 
//    TRACE("In CGridDropTarget::OnDragOver\n"); 
    ASSERT(m_pGridCtrl); 
 
    if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd()) 
        return m_pGridCtrl->OnDragOver(pDataObject, dwKeyState, point); 
    else 
        return DROPEFFECT_NONE; 
} 
 
BOOL CGridDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject, 
                             DROPEFFECT dropEffect, CPoint point) 
{ 
    TRACE(_T("In CGridDropTarget::OnDrop\n")); 
    ASSERT(m_pGridCtrl); 
 
    if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd()) 
        return m_pGridCtrl->OnDrop(pDataObject, dropEffect, point); 
    else 
        return FALSE; 
} 
 
#endif // GRIDCONTROL_NO_DRAGDROP