在切分窗口之间实现拖放(4)
接下来就是到了列表视了,做法和前面的差不多:
CMyApp *CMyListView::GetApp()
{
return ( (CMyApp*)AfxGetApp() );
}
CMainFrame *CKAIView::GetFrame()
{
return ( ((CMainFrame*)GetParentFrame()) );
}
CMyTreeView *CMyListView::GetTree()
{
return ( GetFrame()->GetLeftPane() );
}
三个消息处理函数:
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBegindrag)
把这个视所能设置的元素都设成是开始拖的状态,而目的视也许是本身,或是别的视。
void CMyListView::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
//获得指向列表控件的指针:
CListCtrl &cList = GetListCtrl();
//设置拖动资源:
GetApp()->cListItemDragIndex = ((NM_LISTVIEW *)pNMHDR)->iItem;
//建立一个被拖的条目的图象:
POINT pt;
pt.x = pt.y = 8;
GetApp()->cpDragImage = cList.CreateDragImage(GetApp()->cListItemDragIndex, &pt);
GetApp()->cpDragImage->BeginDrag(0, CPoint (8, 8));
pt = ((NM_LISTVIEW *)pNMHDR)->ptAction;
ClientToScreen( &pt );
GetApp()->cpDragImage->DragEnter(NULL, pt);
//初始化:
GetApp()->cDragging = TRUE;
GetApp()->cListItemDropIndex = -1;
GetApp()->cpDragWnd = &cList;
GetApp()->cpDropWnd = NULL;
}
void CMyListView::OnMouseMove(UINT nFlags, CPoint point)
{
//如果是正在被拖动的话
if( GetApp()->cDragging )
{
POINT pt = point;
ClientToScreen(&pt);
- 上一篇:理解VC工程
- 下一篇:VC编程中如何在视图区显示工具提示

