现在到目录树视了:
为了能访问需要的成员变量,我们还是先定义了一个帮助函数从而可以轻易的访问我们的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 );
//移动图象: GetApp()->cpDragImage->DragMove(pt); if ( (hitem = cTree.HitTest(point, &flags)) != NULL ) { GetApp()->cpDragImage->DragShowNolock(FALSE); cTree.SelectDropTarget(hitem); GetApp()->cTreeItemDrop = hitem; GetApp()->cpDragImage->DragShowNolock(TRUE); } }
CTreeView::OnMouseMove(nFlags, point); }
void CMyTreeView::OnLButtonUp(UINT nFlags, CPoint point) { //获得指向树型控件的指针: CTreeCtrl &cTree = GetTreeCtrl();
CTreeView::OnLButtonUp(nFlags, point);
//I如果是正在被拖动的话: if ( GetApp()->cDragging ) { //不再拖动了: GetApp()->cDragging = FALSE; GetApp()->cpDragImage->DragLeave(this); GetApp()->cpDragImage->EndDrag(); delete GetApp()->cpDragImage;
cTree.SelectDropTarget(NULL);
//验证被拖动的图象已被放下: GetApp()->cDropPoint = point; ClientToScreen(&GetApp()->cDropPoint); GetApp()->cpDropWnd = WindowFromPoint(GetApp()->cDropPoint);
//选择拖动目的资源的类型: if ( GetApp()->cpDragWnd->IsKindOf(RUNTIME_CLASS(CListView)) ) { AfxMessageBox("source is list view", MB_OK); } else if ( GetApp()->cpDragWnd->IsKindOf(RUNTIME_CLASS(CTreeView)) ) { AfxMessageBox("source is treeview", MB_OK); } else AfxMessageBox("source is something else", MB_OK); } } |
 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |