;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
Drag & Drop & Background Image Tree Control - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> VC >> vc鎺т欢 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

Drag & Drop & Background Image Tree Control

鍙戝竷: 2008-6-26 14:29 |  浣滆: admin |   鏌ョ湅: 26娆

涓嬭浇鏈枃鎵闄勬簮浠g爜

绠浠

姝ゆ枃绔犱粙缁嶄簡浣跨敤鎴戝紑鍙戠殑cTree绫绘潵瀹屾垚鏍戞帶浠朵腑鏉$洰鐨勬嫋鎷藉拰涓烘爲鎺т欢璁剧疆鍥剧墖锛坆mp锛夎儗鏅殑鍔熻兘銆傜ず渚嬬▼搴忎腑鍙厑璁搁潪涓昏妭鐐逛腑鏉$洰鐨勬嫋鎷姐

浠g爜缁嗚妭

鎵鏈夌殑瀹炵幇杩囩▼閮藉湪鏂囦欢cTree.cpp鍜宑Tree.h涓.

鎷栨嫿瀹炵幇涓昏鍦∣nBeginDrag()鍜孫nLButtonUp()鍑芥暟涓畬鎴. 鍦∣nBeginDrag鍑芥暟涓紝鎴戝垱寤轰簡涓涓狽M_TREEVIEW 缁撴瀯锛

void cTree::OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult)

{

NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

*pResult = 0;

// So user cant drag root node

if (GetParentItem(pNMTreeView->itemNew.hItem) == NULL) return ;

// Item user started dragging ...

m_hitemDrag = pNMTreeView->itemNew.hItem;

m_hitemDrop = NULL;

// get the image list for dragging

m_pDragImage = CreateDragImage(m_hitemDrag);

// CreateDragImage() returns NULL if no image list

// associated with the tree view control

if( !m_pDragImage )

return;

m_bLDragging = TRUE;

m_pDragImage->BeginDrag(0, CPoint(-15,-15));

POINT pt = pNMTreeView->ptDrag;

ClientToScreen( &pt );

m_pDragImage->DragEnter(NULL, pt);

SetCapture();

}

鍦∟M_TREEVIEW缁撴瀯鍒涘缓鍚庯紝鎵鍋氱殑绗竴浠朵簨鎯呭氨鏄垽鏂綋鍓嶆槸鍚︽槸鏍硅妭鐐癸紝濡傛灉鏄紝灏辫繑鍥炪傚綋鐒跺鏋滈渶瑕佺殑璇濓紝浣犲彲浠ユ敞閲婃帀杩欎竴琛岋紝浣垮緱鏍硅妭鐐逛篃鍙互鎷栨嫿銆

鐒跺悗鎴戞妸閫変腑鐨勬潯鐩繚瀛樺湪鎴戠殑HTREE99vEM鍨嬫垚鍛樺彉閲弙ar m_itemDrag涓 銆傚湪鎷栨嫿寮濮嬫椂锛宮_itemDrop鍊间负NULL銆侰reateDragImage() 鍑芥暟杩斿洖涓涓狢ImageList绫诲瀷鐨勬寚閽堬紝杩欎釜鎸囬拡淇濆瓨鍦ㄥ彉閲弇_pDragImage涓

鎺ヤ笅鏉ュ湪鎷栨嫿寮濮嬫椂璁剧疆甯冨皵鍊糾_bLDraggingm涓虹湡锛屼笅闈㈡槸榧犳爣鎷栨嫿瀛愭潯鐩椂鐨勪唬鐮侊細

void cTree::OnMouseMove(UINT nFlags, CPoint point)

{

HTREE99vEM hitem;

UINT flags;

if (m_bLDragging)

{

POINT pt = point;

ClientToScreen(&pt);

CImageList::DragMove(pt);

if ((hitem = HitTest(point, &flags)) != NULL)

{

CImageList::DragShowNolock(FALSE);

// Tests if dragged item is over another child !

if ((GetParentItem(hitem) != NULL) && (cursor_no != ::GetCursor()))

{

::SetCursor(cursor_no);

// Dont want last selected target highlighted after mouse

// has moved off of it, do we now ?

SelectDropTarget(NULL);

}

// Is item we're over a root node and not parent root node ?

if ((GetParentItem(hitem) == NULL) && (GetParentItem(m_hitemDrag) != hitem ))

{

if (cursor_arr != ::GetCursor()) ::SetCursor(cursor_arr);

SelectDropTarget(hitem);

}

m_hitemDrop = hitem;

CImageList::DragShowNolock(TRUE);

}

}

else

{

// Set cursor to arrow if not dragged

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆