15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Dragging between two CTreeCtrl in a Dialog Box

abramsd@RADES.HILL.AF.MIL
Friday, September 06, 1996

     
     Environment: MSVC 4.0, Windows 95, IBM PC
     
     I'm having a hard time figuring out how to drag an item from a 
     CTreeCtrl in a dialog to another CTreeCtrl in the same dialog.
     
     When I leave the rect of the first CTreeCtrl the drag item disappears.
     
     Doug Abrams




Quang Ngo -- quang@psnw.com
Saturday, September 07, 1996

[Mini-digest: 2 responses]

Doug,

When you call the following function to enter the drag state, be sure to
pass NULL to pWndLock that way the owner of the dragging image is the
desktop.  In this case, you'll always see your dragging image as you drag
it.

static BOOL DragEnter( CWnd* pWndLock, CPoint point );

-Quang

----------
> From: abramsd@RADES.HILL.AF.MIL
> To: mfc-l@netcom.com
> Subject: Dragging between two CTreeCtrl in a Dialog Box
> Date: Friday, September 06, 1996 7:16 AM
> 
>      
>      Environment: MSVC 4.0, Windows 95, IBM PC
>      
>      I'm having a hard time figuring out how to drag an item from a 
>      CTreeCtrl in a dialog to another CTreeCtrl in the same dialog.
>      
>      When I leave the rect of the first CTreeCtrl the drag item
disappears.
>      
>      Doug Abrams
> 
-----From: Jim Leavitt 

Doug:
Log into www.microsoft.com and search their site for MFCDRAG. The sample does exactly what you're trying to do.
Jim Leavitt



Niels Ull Jacobsen -- nuj@kruger.dk
Monday, September 09, 1996

At 07:16 06-09-96 MST, you wrote:
>    =20
>     Environment: MSVC 4.0, Windows 95, IBM PC
>    =20
>     I'm having a hard time figuring out how to drag an item from a=20
>     CTreeCtrl in a dialog to another CTreeCtrl in the same dialog.
>    =20
>     When I leave the rect of the first CTreeCtrl the drag item disappea=
rs.

Remember to do a m_pimagelist->DragEnter(this, ptAction); in the dialog.
This will make the dragged item "leave" the tree control and "enter" the =
dialog.

Here's some (shortened) code from my application (names changed to unclut=
ter
the code).
I hope you'll find it useful.

void CSomeDialog::OnBegindragSomeTree(NMHDR* pNMHDR, LRESULT* pResult)=20
{

	NM_TREEVIEW* pNMTreeView =3D (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
=09
	ASSERT(!m_bDragging);
=09
	CPoint ptTree =3D pNMTreeView->ptDrag;
=09
	UINT nFlags;
	HTREEITEM hItem =3D m_SomeTree.HitTest(ptTree, &nFlags);
	if (hItem =3D=3D NULL)
	{
		*pResult =3D 0;
		return;
	};

        // some internals recording information about which item is being
dragged left out here

	m_pImageList =3D m_SomeTree.CreateDragImage(hItem);  // get the image li=
st
for dragging

	m_bDragging =3D TRUE;
=09
	CPoint ptAction;
	GetCursorPos(&ptAction);
	ScreenToClient(&ptAction);
	TRACE("ptAction =3D (%d, %d)\n", ptAction.x, ptAction.y);

	ASSERT_VALID(m_pimagelist);
	m_pimagelist->DragShowNolock(TRUE);
	m_pimagelist->SetDragCursorImage(0, CPoint(0, 0));
	m_pimagelist->BeginDrag(0, CPoint(0,0));
	m_pimagelist->DragMove(ptAction);
	m_pimagelist->DragEnter(this, ptAction);
	SetCapture();

	*pResult =3D 1;
  }
Niels Ull Jacobsen [MVP], Kr=FCger A/S (nuj@kruger.dk)
Everything stated herein is THE OFFICIAL POLICY of the entire Kruger=20
group and should be taken as legally binding in every respect.=20
Pigs will grow wings and fly.









| Вернуться в корень Архива |