⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treetestdlg.cpp

📁 一个2D电磁场FEM计算的VC++源程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	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 + -