Seltsames verhalten der Header bei Drag & Drop



  • hi,
    ich bin gerade dabei, den headern in meiner ListView das Drag & Drop beizubringen. das klappt auch so weit, das das transparente Image des Headerelementes beim ziehen mit der maus angezeigt wird.
    nur leider wird das Image im oberen linken bildschirmrand dargestellt, wärend das Tool mit der Liste sich in der mitte des Bildschirmes befindet. es ist auch keine verticale bewegung möglich sondern läst sich nur horizontal verschieben.

    hier mal mein code.

    LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;
    LPNMHEADER phdr = (LPNMHEADER) lParam;
    
    if(phdr->hdr.hwndFrom == ListView_GetHeader(hWnd))
    {
    
    	switch(phdr->hdr.code)
    	{
    
    		case HDN_BEGINDRAG:
    		{
    			LPLISTUSERDATA UserData = (LPLISTUSERDATA) GetWindowLongPtr(hWnd, GWLP_USERDATA);
    			CCtrlList *pList = (CCtrlList*)UserData->lpvClass;
    
    			pList->m_hDragItem = phdr->hdr.hwndFrom;
    			pList->m_hDropItem = NULL;
    
    			pList->m_hDragImage = pList->CreateHeaderDragImage(phdr->iItem);
    			if(pList->m_DragImage.Attach(pList->m_hDragImage))
    			{
    				pList->m_bDragging = TRUE;
    				pList->m_DragImage.BeginDrag(0,CPoint(-15,-15));
    
    				CPoint pt;
    				CRect crt;
    
    				pList->GetHeaderRect(phdr->iItem,&crt);
    
    				pt = crt.CenterPoint();
    
    				//ScreenToClient(hWndHeader,&pt);
    
    				pList->m_DragImage.DragEnter(NULL,pt);
    
    				::SetCapture(hWndHeader);
    
    			}
    			return FALSE;
    		}
    		break;
    

    das ziehen mit der maus versuche ich so

    case WM_MOUSEMOVE:
    {
    	LPLISTUSERDATA UserData = (LPLISTUSERDATA) GetWindowLongPtr(hWnd, GWLP_USERDATA);
    	CCtrlList *pList = (CCtrlList*)UserData->lpvClass;
    
    	if(pList->m_bDragging)
    	{
    		CPoint pt;
    		pt.x	= (long)LOWORD(lParam);
    		pt.y	= (long)HIWORD(lParam);
    
    		//ClientToScreen(::GetParent(hWnd),&pt);
    
    		pList->m_DragImage.DragMove(pt);
    
    		//ScreenToClient(::GetParent(hWnd),&pt);
    
    	}
    

    jemand ne idee was ich verkehrt mache?
    wäre für jede hilfe dankbar...


Log in to reply