对象在窗口间拖动

包含两个头文件可以从网上下载 OleDropTargetEx.h OleDropTargetEx.cpp

在要实现拖动功能的的头文件添加函数:

 virtual BOOL Register();

 COleDropTargetEx m_dropEx;
 virtual BOOL OnDrop(WPARAM pDropInfoClass, LPARAM lParm);
 virtual DROPEFFECT OnDropEx(WPARAM pDropInfoClass, LPARAM lParm);
 virtual DROPEFFECT OnDragOver(WPARAM pDropInfoClass,LPARAM lParm);

 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//确定拖动动作的开始

在实现文件定义如下:

void CRosterTree::OnLButtonDown(UINT nFlags, CPoint point)
{

 CTreeCtrl::OnLButtonDown(nFlags, point);
 HTREEITEM hItem = GetSelectedItem();
 if (hItem == NULL)
 {
  return;
 }
 if (ItemHasChildren(hItem))
 {
  return ;
 }
 Sleep(250);
 MSG msg;
 ::PeekMessage(&msg,GetSafeHwnd(),WM_LBUTTONUP,WM_LBUTTONUP,PM_NOREMOVE);
 if( msg.message==WM_LBUTTONUP )
  return; 
 CRosterNode *pRoserNode = (CRosterNode*)GetItemData(hItem);
 
 HGLOBAL hData = GlobalAlloc(GHND|GMEM_SHARE, sizeof(CRosterNode));
 WCHAR *pS = (WCHAR *)GlobalLock( hData );
 memcpy( pS, (LPCTSTR)pRoserNode, sizeof(CRosterNode));
 GlobalUnlock( hData );
 
 COleDataSource source;
 source.CacheGlobalData( CF_TEXT, hData );
 source.DoDragDrop( DROPEFFECT_COPY );
 GlobalFree( hData );
}

 

DROPEFFECT CRosterTree::OnDropEx(WPARAM pDropInfoClass, LPARAM lParm)
{
 return (DROPEFFECT)-1;
}

BOOL CRosterTree::OnDrop(WPARAM pDropInfoClass, LPARAM lParm)
{
 COleDropInfo* pInfo = (COleDropInfo* )pDropInfoClass;
 ASSERT(pInfo->IsKindOf(RUNTIME_CLASS(COleDropInfo)));
 return TRUE;

}

DROPEFFECT CRosterTree::OnDragOver(WPARAM pDropInfoClass, LPARAM lParm)
{
 COleDropInfo* pInfo = (COleDropInfo* )pDropInfoClass;
 ASSERT(pInfo->IsKindOf(RUNTIME_CLASS(COleDropInfo)));
 return DROPEFFECT_NONE;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值