📄 treetestdlg.cpp
字号:
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
m_dragItem = pNMTreeView->itemNew.hItem;
if(m_dragItem!=LibParent) // can't drag top-level folder
{
CImageList* pDragImage;
pDragImage = m_mytree.CreateDragImage( m_dragItem );
m_mytree.SelectItem( m_dragItem );
pDragImage->BeginDrag( 0, CPoint(0,-14) );
pDragImage->DragEnter(this, pNMTreeView->ptDrag);
SetCapture();
m_bIsDragging = TRUE;
delete pDragImage;
}
*pResult = 0;
}
void CTreetestDlg::OnBegindragMylist(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
m_dragItem = pNMTreeView->itemNew.hItem;
if(m_dragItem!=ModelParent)
{
CImageList* pDragImage;
pDragImage = m_mylist.CreateDragImage( m_dragItem );
m_mylist.SelectItem( m_dragItem );
pDragImage->BeginDrag( 0, CPoint(0,-14) );
pDragImage->DragEnter(this, pNMTreeView->ptDrag);
SetCapture();
m_bIsDragging = TRUE;
delete pDragImage;
bDragFromLibrary=FALSE;
}
*pResult = 0;
}
void CTreetestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if( m_bIsDragging != FALSE )
{
CPoint ptDrag( point );
CPoint ptTree( point );
CPoint ptList( point );
UINT uHitTest = TVHT_ONITEM;
MapWindowPoints( this, &ptDrag, 1 );
MapWindowPoints( &m_mytree, &ptTree, 1 );
MapWindowPoints( &m_mylist, &ptList, 1 );
CImageList::DragMove( ptDrag );
m_dragTargetTree = m_mytree.HitTest( ptTree, &uHitTest );
m_dragTargetList = m_mylist.HitTest( ptList, &uHitTest );
}
CDialog::OnMouseMove(nFlags, point);
}
void CTreetestDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if( m_bIsDragging != FALSE )
{
CImageList::DragLeave( &m_mytree );
CImageList::EndDrag();
ReleaseCapture();
m_bIsDragging = FALSE;
// Drop onto the Library tree
if( m_dragTargetTree != NULL )
{
CopyItemToLibrary(m_dragItem,m_dragTargetTree);
if(bDragFromLibrary) m_mytree.DeleteItem( m_dragItem );
}
// Drop onto the model materials
if( m_dragTargetList != NULL )
{
CopyItemToModel(m_dragItem,m_dragTargetList);
if(!bDragFromLibrary) m_mylist.DeleteItem( m_dragItem );
}
}
else CDialog::OnLButtonUp(nFlags, point);
}
BOOL CTreetestDlg::IsFolder(HTREEITEM hItem)
{
int nImage,nSelImage;
m_mytree.GetItemImage(hItem,nImage,nSelImage);
if (nImage==0) return TRUE;
return FALSE;
}
HTREEITEM CTreetestDlg::CopyItemToLibrary(HTREEITEM hItem, HTREEITEM hTarget)
{
HTREEITEM hResult,hParent,hChild;
CString szLabel = m_mytree.GetItemText(hItem);
int ItemData = m_mytree.GetItemData(hItem);
if(IsFolder(hTarget))
{
if (IsFolder(hItem))
{
hResult = m_mytree.InsertItem( szLabel, 0, 1, hTarget, TVI_LAST );
m_mytree.SetItemData(hResult,ItemData);
hChild=m_mytree.GetChildItem(hItem) ;
while (hChild!=NULL)
{
CopyItemToLibrary(hChild,hResult) ;
hChild = m_mytree.GetNextSiblingItem(hChild) ;
}
}
else{
hResult = m_mytree.InsertItem( szLabel, 2, 2, hTarget, TVI_LAST);
m_mytree.SetItemData(hResult,ItemData);
}
}
else
{
hParent = m_mytree.GetParentItem(hTarget);
if (IsFolder(hItem))
{
hResult = m_mytree.InsertItem( szLabel, 0, 1, hParent, hTarget );
m_mytree.SetItemData(hResult,ItemData);
hChild=m_mytree.GetChildItem(hItem) ;
while (hChild!=NULL)
{
CopyItemToLibrary(hChild,hResult) ;
hChild = m_mytree.GetNextSiblingItem(hChild) ;
}
}
else{
hResult = m_mytree.InsertItem( szLabel, 2, 2, hParent, hTarget );
m_mytree.SetItemData(hResult,ItemData);
}
}
return hResult;
}
HTREEITEM CTreetestDlg::CopyItemToModel(HTREEITEM hItem, HTREEITEM hTarget)
{
HTREEITEM hResult,hParent,hChild;
if (IsFolder(hItem))
{
hChild=m_mytree.GetChildItem(hItem) ;
hParent=hTarget;
while (hChild!=NULL)
{
hParent=CopyItemToModel(hChild,hParent) ;
hChild = m_mylist.GetNextSiblingItem(hChild);
}
hResult=hParent;
}
else{
CString szLabel = m_mylist.GetItemText( hItem );
int ItemData = m_mylist.GetItemData(hItem);
hParent = m_mylist.GetParentItem( hTarget );
if( hParent != NULL )
hResult=m_mylist.InsertItem( szLabel, 2, 2, ModelParent, hTarget);
else
hResult=m_mylist.InsertItem( szLabel, 2, 2, ModelParent, TVI_LAST );
m_mylist.SetItemData(hResult,ItemData);
}
return hResult;
}
void CTreetestDlg::AddNewProperty()
{
HTREEITEM hParent,hResult;
if(m_dragTargetList!=NULL)
{
hParent = m_mylist.GetParentItem(m_dragTargetList);
if( hParent != NULL )
hResult=m_mylist.InsertItem("New Material", 2, 2, ModelParent, m_dragTargetList);
else
hResult=m_mylist.InsertItem("New Material", 2, 2, ModelParent, TVI_LAST );
CMaterialProp MProp;
LibProps.Add(MProp);
m_mylist.SetItemData(hResult,LibProps.GetUpperBound());
}
if(m_dragTargetTree!=NULL)
{
hParent = m_mytree.GetParentItem(m_dragTargetTree);
if( hParent != NULL )
hResult=m_mytree.InsertItem("New Material", 2, 2, hParent, m_dragTargetTree);
else
hResult=m_mytree.InsertItem("New Material", 2, 2, LibParent, TVI_LAST );
CMaterialProp MProp;
LibProps.Add(MProp);
m_mytree.SetItemData(hResult,LibProps.GetUpperBound());
}
}
void CTreetestDlg::AddNewFolder()
{
HTREEITEM hParent,hResult;
if(m_dragTargetTree!=NULL)
{
hParent = m_mytree.GetParentItem(m_dragTargetTree);
if( hParent != NULL )
hResult=m_mytree.InsertItem("New Folder", 0, 1, hParent, m_dragTargetTree);
else
hResult=m_mytree.InsertItem("New Folder", 0, 1, LibParent, TVI_LAST );
CFolderProp FProp;
FProp.FolderName="New Folder";
FoldProps.Add(FProp);
m_mytree.SetItemData(hResult,LibProps.GetUpperBound());
}
}
void CTreetestDlg::Zappit()
{
if ((m_dragTargetTree!=NULL) && (m_dragTargetTree!=LibParent))
m_mytree.DeleteItem(m_dragTargetTree);
if ((m_dragTargetList!=NULL) && (m_dragTargetList!=ModelParent))
m_mylist.DeleteItem(m_dragTargetList);
}
void CTreetestDlg::OnRclickMytree(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu* pMenu = NULL;
try
{
pMenu = new CMenu;
}
catch(...)
{
pMenu = NULL;
}
ASSERT(pMenu);
VERIFY(pMenu->CreatePopupMenu());
VERIFY(pMenu->AppendMenu(MF_STRING, ID_EDIT_CUT, "Delete Selected"));
VERIFY(pMenu->AppendMenu(MF_STRING, ID_EDIT_COPY, "Add New Material"));
VERIFY(pMenu->AppendMenu(MF_STRING, ID_EDIT_PASTE, "Add New Folder"));
POINT point;
GetCursorPos(&point);
CPoint ptTree(point);
UINT uHitTest = TVHT_ONITEM;
GetDesktopWindow()->MapWindowPoints( &m_mytree, &ptTree, 1 );
m_dragTargetTree = m_mytree.HitTest( ptTree, &uHitTest );
m_dragTargetList = NULL;
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,point.x,point.y,this);
try
{
delete pMenu;
}
catch(...)
{
ASSERT(FALSE);
TRACE("CTreetestDlg::OnRclickMytree failed to destroy menu resource\n");
pMenu = FALSE;
}
*pResult = 0;
}
void CTreetestDlg::OnRclickMylist(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu* pMenu = NULL;
try
{
pMenu = new CMenu;
}
catch(...)
{
pMenu = NULL;
}
ASSERT(pMenu);
VERIFY(pMenu->CreatePopupMenu());
VERIFY(pMenu->AppendMenu(MF_STRING, ID_EDIT_CUT, "Delete Selected"));
VERIFY(pMenu->AppendMenu(MF_STRING, ID_EDIT_COPY, "Add New Material"));
POINT point;
GetCursorPos(&point);
CPoint ptList(point);
UINT uHitTest = TVHT_ONITEM;
GetDesktopWindow()->MapWindowPoints( &m_mylist, &ptList, 1 );
m_dragTargetList = m_mylist.HitTest( ptList, &uHitTest );
m_dragTargetTree = NULL;
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,point.x,point.y,this);
try
{
delete pMenu;
}
catch(...)
{
ASSERT(FALSE);
TRACE("CTreetestDlg::OnRclickMylist failed to destroy menu resource\n");
pMenu = FALSE;
}
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -