下面是有关拖拽的源代码,但是拖拽的时候拖拽的图标离鼠标有比较大的距离,不知道是怎么回事
各位大哥大姐能不能指点一下啊??
void CXTreeCtrl::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here *pResult = 0; //Èç¹ûÊÇÎÞÒâÍÏÒ·£¬Ôò·ÅÆú²Ù×÷
if( (GetTickCount() - m_dwDragStart) < DRAG_DELAY )
return; m_hItemDragS = pNMTreeView->itemNew.hItem;
m_hItemDragD = NULL; //&micro;&Atilde;&micro;&frac12;&Oacute;&Atilde;&Oacute;&Uacute;&Iacute;&Iuml;&para;&macr;&Ecirc;±&Iuml;&Ocirc;&Ecirc;&frac34;&micro;&Auml;&Iacute;&frac14;&Iuml;ó&Aacute;&ETH;±í
m_pDragImage = CreateDragImage( m_hItemDragS );
if( !m_pDragImage )
return; m_bDragging = true;
m_pDragImage->BeginDrag ( 0, CPoint(8,8));
CPoint  pt = pNMTreeView->ptDrag;
ClientToScreen( &pt ); m_pDragImage->DragEnter ( NULL,pt);  //"this"&frac12;&laquo;&Iacute;&Iuml;&Ograve;·&para;&macr;×÷&Iuml;&THORN;&Ouml;&AElig;&Ocirc;&Uacute;&cedil;&Atilde;&acute;°&iquest;&Uacute;
SetCapture(); m_nScrollTimerID = SetTimer( 2,40,NULL );}

解决方案 »

  1.   

    BeginDrag ()怎么实现的?
      

  2.   

    这是我以前写的相关代码你参考一下
             NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
    HTREEITEM hItem = pNMTreeView->itemNew.hItem;
    int nData = m_cUserTree.GetItemData(hItem);
    if (nData == -1)
    {
    *pResult = 0;
    return;
    }
    m_hTreeItem = hItem;
    m_pDragImageList = m_cUserTree.CreateDragImage(m_hTreeItem);
    CRect rect;
    if (m_pDragImageList)
    {
    SetCapture();
    m_cUserTree.GetItemRect(m_hTreeItem, rect, TRUE);
    CPoint pt;
    pt.x = pNMTreeView->ptDrag.x - (rect.left-16);
    pt.y = pNMTreeView->ptDrag.y - rect.top;
    CImageList::DragShowNolock(TRUE);
    m_pDragImageList->BeginDrag(0, pt);
    CPoint      ptAction;

    GetCursorPos(&ptAction);
    m_cUserTree.ScreenToClient(&ptAction);
    CImageList::DragMove(ptAction);
    m_cUserTree.SelectDropTarget(m_hTreeItem);
    CImageList::DragEnter(&m_cUserTree, ptAction);
    m_pWndLocked = &m_cUserTree;
    m_bDrag = TRUE;
    }
    *pResult = 0;