在切分窗口之间实现拖放(2)
现在到目录树视了:
为了能访问需要的成员变量,我们还是先定义了一个帮助函数从而可以轻易的访问我们的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 );
- 上一篇:理解VC工程
- 下一篇:VC编程中如何在视图区显示工具提示

