龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

在切分窗口之间实现拖放(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
现在到目录树视了: 为了能访问需要的成员变量,我们还是先定义了一个帮助函数从而可以轻易的访问我们的app类: CMyApp *CMyTreeView::GetApp() { return ( (CMy

  现在到目录树视了:

  为了能访问需要的成员变量,我们还是先定义了一个帮助函数从而可以轻易的访问我们的app类:

CMyApp *CMyTreeView::GetApp()
{
 return ( (CMyApp*)AfxGetApp() );
}

  三个消息处理函数:

ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBegindrag)

  把这个视所能设置的元素都设成是开始拖的状态,而目的视也许是本身,或是别的视。

void CMyTreeView::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult)
{
 NM_TREEVIEW *pTreeView = (NM_TREEVIEW*)pNMHDR;

 *pResult = 0;

 //获得指向树型控件的指针:
 CTreeCtrl &cTree = GetTreeCtrl();

 GetApp()->cTreeItemDrag = pTreeView->itemNew.hItem;
 GetApp()->cTreeItemDrop = NULL;

 //建立一个被拖的条目的图象:
 GetApp()->cpDragImage = cTree.CreateDragImage(GetApp()->cTreeItemDrag);
 GetApp()->cpDragImage->BeginDrag(0, CPoint(-15,-15));
 POINT pt = pTreeView->ptDrag;
 ClientToScreen( &pt );
 GetApp()->cpDragImage->DragEnter(NULL, pt);

 //初始化:
 GetApp()->cDragging = TRUE;
 GetApp()->cpDragWnd = &cTree;
 GetApp()->cpDropWnd = NULL;
 }

void CMyTreeView::OnMouseMove(UINT nFlags, CPoint point)
{
 HTREEITEM hitem;
 UINT flags;

 //获得指向树型控件的指针:
 CTreeCtrl &cTree = GetTreeCtrl();

 //如果是正在被拖动的话:
 if ( GetApp()->cDragging )
 {
  POINT pt = point;
  ClientToScreen( &pt );

精彩图集

赞助商链接