1.Tree和List中当有文件夹Drop时,怎样让Tree和List中的文件夹象浏览器一样高亮显示?
2.能否提供SAMPLE
2.能否提供SAMPLE
解决方案 »
- 实现圆角矩形的算法//是啥???
- 谁有matlab可以发送几个文件给我么?
- Xerces中有类似MSXML的SelectNodes()这个函数吗?
- 微软太恶了,MSDN真烂,居然有这么弱智的问题。
- 向自己编写的控件里使用postMessage为什么第一次可以发进去,第二次就很久才能发进去
- 用vc的串口控件,怎么老是不能触发ComEvent事件?
- 如何获得当前鼠标的坐标?好像没有这样的函数的?
- 急救:C++调试出错
- ◆◆◆急 急 急 在线等待◆◆◆大家都是怎么做对数据表中同一ID的数据求和啊???我用CString SQL="select sum(gdsh+lssh) order by id"
- 另一菜鸟:VC好难,我该怎么办?
- 给个意见
- ******初学者的困难,很简单!请大家帮忙解决*********
//开始拖放操作时触发此消息,做拖放前的准备
void CMyTreeView::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; m_hItemDragged = pNMTreeView->itemNew.hItem;
//纪录被拖拽的项
if (!GetTreeCtrl().ItemHasChildren(m_hItemDragged))
{ //只允许拖拽标示实体的项,既没有孩子的像
m_bDraging=TRUE; //标示已进入拖放状态
m_pDragImage = GetTreeCtrl().CreateDragImage(m_hItemDragged);
//创建拖拽图像
RECT itemrect;
GetTreeCtrl().GetItemRect(m_hItemDragged,&itemrect,TRUE);
int width = itemrect.right - itemrect.left;
int height = itemrect.bottom - itemrect.top; m_pDragImage->BeginDrag(0,CPoint(width*2/3,height*2/3));
//开始拖拽
m_pDragImage->DragEnter(NULL,pNMTreeView->ptDrag);
m_pDragImage->SetDragCursorImage(0,CPoint(0,0));
//设拖放状态的鼠标
SetCapture();
ShowCursor(FALSE);
m_hDragCursor = AfxGetApp()->LoadCursor(IDC_DRAGCURSOR);
SetCursor(m_hDragCursor);
ShowCursor(TRUE);
} *pResult = 0;
}//拖放过程中,利用此消息进行一些必要的操作extern int g_iToolCount; //工具数目计数器
extern int g_bStartNav; //是否启动动态导航功能;void CMyTreeView::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bDraging)
{
POINT pt = point;
ClientToScreen(&pt);
m_pDragImage->DragMove(pt); //移动拖拽图像
UINT uFlags;
HTREEITEM hItem = GetTreeCtrl().HitTest(point, &uFlags);
//测试鼠标是否在某一项上
if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{ //在某一项上,则高亮显示该项
m_pDragImage->DragShowNolock(FALSE);
GetTreeCtrl().SelectDropTarget(hItem);
m_pDragImage->DragShowNolock(TRUE);
}
}
else if(IsInNagtiveMode())//进行动态导航;
{
UINT uFlags;
HTREEITEM hItem = GetTreeCtrl().HitTest(point, &uFlags);
//测试鼠标是否在某一项上
if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{ //在某一项上,则高亮显示该项
ENTITY_LIST entlist = ItemToEntity(hItem);
ENTITY * pEnt = entlist[0];
CMcamDoc *pDoc=GetDocument();
pDoc->NavigateOfEntity(pEnt);
}
}
CTreeView::OnMouseMove(nFlags, point);
}//处于拖放状态时,松开鼠标左键结束拖放
void CMyTreeView::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_bDraging)
{
m_pDragImage->DragLeave(this);
m_pDragImage->EndDrag(); //结束拖放
DropItem();
ReleaseCapture();
ShowCursor(TRUE);
m_bDraging = FALSE;
GetTreeCtrl().SelectDropTarget(NULL);
}
else //当用户点击空白处时,消除任何选择项;
{
CTreeCtrl &TreeCtrl=GetTreeCtrl();
UINT uFlags;
HTREEITEM hItem = GetTreeCtrl().HitTest(point, &uFlags);
//测试鼠标是否在某一项上
if ((hItem == NULL) || !(TVHT_ONITEMLABEL & uFlags))
{ //在某一项上,则高亮显示该项
TreeCtrl.SelectItem(NULL);
}
} /*****判断选择集是否为空,用于确定是否使EditBar中的ok按钮灰化****/
/* if(!InSelectMode()) //如果没有处于选择状态,忽略操作;
{
return ;
}*/
CMainFrame* pMainFrame ;
CFrameWnd* pActiveFrame;
pMainFrame = (CMainFrame*)AfxGetMainWnd(); //获得主框架指针
if( !pMainFrame->m_wndEditBar.IsWindowVisible() && !pMainFrame->m_wndProBar.IsWindowVisible())
{ //如果实体编辑工具条和实体信息工具条都没有出现则返回
return ;
}
pActiveFrame = pMainFrame->GetActiveFrame( ); //获得活动框架指针
CDocument *pdoc = pActiveFrame->GetActiveDocument();
CMcamDoc* pDoc = (CMcamDoc*) pdoc; //获得当前文档
if( pDoc == NULL) //如果当前活动文档不存在
{
return ;
}
POSITION pos = pDoc->GetFirstViewPosition();
if (pos != NULL)
{
CView* pview = pDoc->GetNextView(pos);
CMcamView * pView = (CMcamView *)pview; //获得当前视图
pView->IsSelectionNull(); //判断选择集是否为空,并且做出一些操作
}
/***********************/ CTreeView::OnLButtonUp(nFlags, point);
}//把拖动的项放入目的项的成员函数
void CMyTreeView::DropItem()
{
HTREEITEM hItemDropped = GetTreeCtrl().GetDropHilightItem();
//获得拖放的目的项
if (GetTreeCtrl().GetParentItem(hItemDropped) == m_hRootItem)
{ //只允许目的项是标示组的项,即父节点时根节点的项
if (m_hItemDragged != hItemDropped)
{
HTREEITEM hParentDraggedItem=GetTreeCtrl().GetParentItem(m_hItemDragged);
//获得被拖动项的父节点
int EntityIndex=GetChildItemIndex(hParentDraggedItem,m_hItemDragged);
//获得被拖动项在其所在组中的索引
int SourceGroupIndex=GetChildItemIndex(m_hRootItem,hParentDraggedItem);
//获得被拖动项所在组,在CDrawing中的索引号
int DestinationGroupIndex=GetChildItemIndex(m_hRootItem,hItemDropped);
//获得拖放目的项,在CDrawing中的索引
CMcamDoc_Bar_003* pDoc=GetDocument();//获得文档的指针
if(EntityIndex!=-1 && SourceGroupIndex!=-1 && DestinationGroupIndex!=-1)
{
pDoc->m_Drawing.FromGroupToGroup(EntityIndex,SourceGroupIndex,DestinationGroupIndex);
//在CDrawing中将拖动实体从源组移至目的组中*/
}
InsertDraggedItem(m_hItemDragged,hItemDropped);
//在目的项中插入被拖项
GetTreeCtrl().DeleteItem(m_hItemDragged);
//删除原有的被拖项
}
}
}//在目的项中插入被拖项的成员函数
void CMyTreeView::InsertDraggedItem(HTREEITEM hDragged, HTREEITEM hDropped)
{
CString ItemText = GetTreeCtrl().GetItemText(hDragged);
GetTreeCtrl().InsertItem(ItemText,2,2,hDropped,TVI_LAST);
// GetTreeCtrl().SortChildren(hDropped);
//取消拖动操作,把被拖项设为选中项
HTREEITEM hNextItem;
HTREEITEM hChildItem = GetTreeCtrl().GetChildItem(hDropped); while (GetTreeCtrl().GetItemText(hChildItem) != ItemText) //在组中找实体
{
hNextItem = GetTreeCtrl().GetNextItem(hChildItem, TVGN_NEXT);
hChildItem = hNextItem;
}
GetTreeCtrl().SelectItem(hChildItem);}这是我以前写的代码,其中实现了树形控件中的拖动,有点乱,希望能对你有所启示