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

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
接下来就是到了列表视了,做法和前面的差不多: CMyApp *CMyListView::GetApp() { return ( (CMyApp*)AfxGetApp() ); } CMainFrame *CKAIView::GetFrame() { return ( ((CMainFrame*)GetParen

  接下来就是到了列表视了,做法和前面的差不多:

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);

精彩图集

赞助商链接