Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2009, 09:25   #1
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию Drag and Drop

Здравствуйте.
Имеется класс CVerticalTree, отец его CTreeCtrl. Мучает меня драг н дроп.
В классическом дереве (CTreeCtrl) реализация несложная.

Код:
void CVerticalTree::OnMouseMove(UINT nFlags, CPoint point) 
{
	HTREEITEM			hitem;
	UINT				flags;
	m_bRDragging=TRUE;
	if (m_bRDragging)
	{
		POINT pt = point;
		ClientToScreen( &pt );
		//CImageList::DragMove(pt);
		if ((hitem = HitTest(point, &flags)) != NULL)
		{
			//CImageList::DragShowNolock(FALSE);
			SelectDropTarget(hitem);
			m_hitemDrop = hitem;
			//CImageList::DragShowNolock(TRUE);
		}
	}

	CTreeCtrl::OnMouseMove(nFlags, point);
	
}


void CVerticalTree::OnLButtonUp(UINT nFlags, CPoint point) 
{    //Это к драгу не имеет отношения
      /*m_MouseDown=FALSE;
	if (m_bCustomDrawn)
	{
		HTREE2VPMAP::iterator it = m_HTree2VP.begin();
		point.x -= m_OffsetX;
		point.y -= m_OffsetY;
		
		while (it != m_HTree2VP.end())
		{
			ItemViewport *vp = (*it).second; 
			if (vp->x <= point.x && ((vp->x+vp->cx) >= point.x)
				&& vp->y <= point.y && ((vp->y+vp->cy) >= point.y))
			{   
				CString str2=CTreeCtrl::GetItemText(vp->item);
				CVerticalTree::Expand(vp->item, TVE_TOGGLE);
				Invalidate();
				return;
			}
			it++;
		}
		
	}*/

   //m_bRDragging=TRUE;  
   if (m_bRDragging)     
	{
		m_bRDragging = FALSE;
		CImageList::DragLeave(this);
		CImageList::EndDrag();
		ReleaseCapture();
//		delete m_pDragImage;

		if( m_hitemDrag == m_hitemDrop ) 
			return;

		CMenu menu;
		menu.Attach( GetRDragMenu() );
		if (( menu == NULL ) || (CVerticalTree::HitTest(point)==NULL)) return;
		CRect rect;
		       
		
			GetItemRect(CVerticalTree::HitTest(point),&rect,TRUE);	
		    if ((point.x>=rect.left) && (point.x<=rect.left+rect.Width()) && (point.y>=rect.top) && (point.y<=rect.top+rect.Height()))
			   {ClientToScreen( &point );
	     	menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
			point.x, point.y,
			this);}
		
		SelectDropTarget(NULL);
	}
		   CTreeCtrl::OnLButtonUp(nFlags, point);
	Invalidate();

}
событе Бегин драг

Код:
void CVerticalTree::OnTvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	*pResult = 0;

	CPoint		ptAction;

	GetCursorPos(&ptAction);
	ScreenToClient(&ptAction);
	m_bRDragging = TRUE;
	m_bRDragCanceled = FALSE;
	m_hitemDrag = pNMTreeView->itemNew.hItem; 
	CString str=GetItemText(m_hitemDrag);
	m_hitemDrop = NULL;
//	m_pDragImage = CreateDragImage(m_hitemDrag);	// get the image list for dragging
//	m_pDragImage->BeginDrag(0, CPoint(10,-15));
	SelectDropTarget(NULL);			// to prevent image corruption.
//	m_pDragImage->DragEnter(NULL, ptAction);
	SetCapture();
}


Итемы в CVerticalTree рисуются в помощью DC.
Но на событие BEginDrag итемы в CVerticalTree никак не реагирует ясен хрен.

Как создать обработчик события BeginDrag для класса CVerticalTree ?
Заранее благодарен.
nusik вне форума Ответить с цитированием
Старый 07.07.2009, 18:50   #2
volok-aleksej
 
Регистрация: 19.05.2009
Сообщений: 4
По умолчанию

Если ты рисуешь сам в обработчике WM_PAINT, то тогда и перенеси часть функциональности туда. или делай каждый раз инвалидейт
volok-aleksej вне форума Ответить с цитированием
Старый 09.07.2009, 11:09   #3
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Спасибо.
Drag 'n' Drop уже сделал.
nusik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15
Drag and drop. Как???? Ky3Heu, Общие вопросы Delphi 2 09.04.2009 12:43
Drag and Drop Xardas Общие вопросы Delphi 8 20.01.2008 23:09