下面是有关拖拽的源代码,但是拖拽的时候拖拽的图标离鼠标有比较大的距离,不知道是怎么回事
各位大哥大姐能不能指点一下啊??
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; //µÃµ½ÓÃÓÚÍ϶¯Ê±ÏÔʾµÄͼÏóÁбí
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"½«ÍÏÒ·¶¯×÷ÏÞÖÆÔڸô°¿Ú
SetCapture(); m_nScrollTimerID = SetTimer( 2,40,NULL );}
各位大哥大姐能不能指点一下啊??
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; //µÃµ½ÓÃÓÚÍ϶¯Ê±ÏÔʾµÄͼÏóÁбí
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"½«ÍÏÒ·¶¯×÷ÏÞÖÆÔڸô°¿Ú
SetCapture(); m_nScrollTimerID = SetTimer( 2,40,NULL );}
解决方案 »
- 变量获取失败
- dll的资源对话框dialog有没有show事件?
- 如何获取IE发出的HTTP请求
- 请教有关StretchBlt函数出错的问题
- 处理回包的方法讨论,是不是一定要用switch?
- 如何实现把一个对话框里编辑框的数据在另外一个对话框的编辑框和静态文本(Static)中显示出来?
- 我想用FindWindow(HWND,..)找到VC的窗口,但他的ClassName是变化的
- 编译时系统提示WM_NOTIFYICON没有定义,
- 初级问题,编译通过,bulid不了?
- _+_+_+_+_+_+_+_+_+_+_+_+_+_+_+我的ActiveX控件咋这么大泥?
- 怎么通过窗口句柄得到程序名?
- 求教高手,贝塞尔曲线的绘制函数是什么?
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;