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




发表于 2009-1-5 19:48
| 











