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

📄 favtreectrl.cpp

📁 用VC写的浏览器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	GetItemPath(m_hItem, path);
	if(m_hItem != GetRootItem())
	{
		path = "\\"+path;
		path = szPath+ path + GetItemText(m_hItem) + "\\";
	}
	else
		path = szPath + "\\";

	ShellExecute(NULL, "find", path, NULL, NULL, 0);

}

void CFavTreeCtrl::OnRfavProperty() 
{
	// TODO: Add your command handler code here
	CString strName;
	strName = GetItemText(m_hItem);
	CString path,szPath;
	if(!pmf->GetFavoriteFolder(szPath))
		return ;

	GetItemPath(m_hItem, path);
	path = "\\"+path;
	path = szPath+ path;

	try{
	SHELLEXECUTEINFO sei;
	sei.cbSize = sizeof(sei);
	sei.fMask = SEE_MASK_INVOKEIDLIST|SEE_MASK_FLAG_NO_UI ;
	sei.lpIDList = NULL;
	sei.hwnd = NULL;
	sei.lpFile = path+strName+".url";
	sei.lpVerb = "properties";
	sei.nShow = SW_SHOWDEFAULT;
	sei.lpDirectory = path;
	if(!ShellExecuteEx(&sei))
		ShellExecute(NULL, "properties", path+strName+".lnk", NULL, NULL, SW_SHOWDEFAULT );
	else
	{
		int d = GetItemData(m_hItem);
		if(d>=0)
		{
			char buf[2048];
			::GetPrivateProfileString(_T("InternetShortcut"), _T("URL"),
								  _T(""), buf, 2048, path+strName+".url");
			CString url;
			POSITION pos = m_astrFav.FindIndex(d);
			if(pos!=NULL)
				url = m_astrFav.GetAt(pos);

			if(url==buf)
				return;
			else
			{
				if(pos!=NULL)
					m_astrFav.SetAt(pos, buf);
				//update menu
				pmf->m_bFavDirty = 2;

			}
		}
	}
	}catch(...){}
}

void CFavTreeCtrl::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if(pImageList)
	{
		delete pImageList;
		pImageList = NULL;
	}
	m_hDragItem = pNMTreeView->itemNew.hItem;
	if(m_hDragItem == NULL)
		return;

	pImageList = CreateDragImage(m_hDragItem);
	if(pImageList!=NULL)
	{
		VERIFY (pImageList->BeginDrag (0, CPoint (8, 8)));
		VERIFY (pImageList->DragEnter (GetDesktopWindow (), pNMTreeView->ptDrag));
		m_bDragging = TRUE;
		m_hDropItem = NULL;
		m_hOldDropItem = NULL;
		m_bMoveIntoFolder = FALSE;
		m_HalfItemHeight = GetItemHeight()/2;
		SetCapture(); 
		m_nScrollTimer = SetTimer(1, 75, NULL); //auto scroll time
    }

	*pResult = 0;
}

void CFavTreeCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	try{
	if(m_bDragging)
	{
		if(pImageList==NULL)
		{
			m_bDragging = FALSE;
			return;
		}

		CPoint pt (point);
		ClientToScreen (&pt);

		// move the drag image
		VERIFY (pImageList->DragMove (pt));

		// unlock window updates
		VERIFY (pImageList->DragShowNolock (FALSE));

		ScreenToClient (&pt);
		UINT uFlags;
		// get the item that is below cursor
		m_hDropItem = HitTest (pt, &uFlags);

		if( m_hOldDropItem == NULL )
				m_hOldDropItem = GetDropHilightItem();

		// highlight it
		if(m_hDropItem != GetRootItem())
			pt.y-=m_HalfItemHeight;
		if(HitTest(pt, &uFlags) == m_hDropItem)
		{
			SelectDropTarget (m_hDropItem);
			m_bMoveIntoFolder = TRUE;
		}
		else
		{ 
			m_bMoveIntoFolder = FALSE;
			HTREEITEM hdi = m_hDropItem;
			m_hDropItem = GetPrevSiblingItem(m_hDropItem);
			if(m_hDropItem == NULL)
			{
				m_hDropItem = GetParentItem(hdi);
				m_bMoveIntoFolder = TRUE;
			}
			SelectDropTarget(NULL);
		}

		if( m_nExpandTimer && m_hDropItem == m_hOldDropItem )
		{
			KillTimer( m_nExpandTimer );
			m_nExpandTimer = 0;
		}

		if( !m_nExpandTimer )
			m_nExpandTimer = SetTimer( 1000, 2000, NULL );

		VERIFY (pImageList->DragShowNolock (TRUE));
	}
	else
	{
		//display url in status bar
		UINT uFlags;
		// get the item that is below cursor
		HTREEITEM hItem = HitTest (point, &uFlags);
		if(hItem != m_hOldDropItem)
		{
			CString url; 
			int img=-1, selimg=-1;
			GetItemImage(hItem, img, selimg);
			if(img != 0 && img != 5)
			{
				int d = GetItemData(hItem);
				if(d>=0)
				{
					POSITION pos = m_astrFav.FindIndex(d);
					if(pos!=NULL)
						url = m_astrFav.GetAt(pos);
				}
				else
					url = "";
			}
			pmf->SetMessageText(url);
			m_hOldDropItem = hItem;
		}
	}
	}catch(...){}

	CTreeCtrl::OnMouseMove(nFlags, point);
}

void CFavTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_bDragging)
	{
		KillTimer( m_nScrollTimer );//auto scroll
		KillTimer( m_nExpandTimer); //auto expand
		m_nScrollTimer =0;
		m_nExpandTimer = 0;

		VERIFY (pImageList->DragLeave (GetDesktopWindow ()));	
		pImageList->EndDrag ();
		// stop intercepting all mouse messages
		VERIFY (ReleaseCapture ());
 
		delete pImageList;
		pImageList = NULL;
		m_bDragging = FALSE;

		if(m_hDropItem==NULL)
			return;

		int img, selimg;
		GetItemImage(m_hDragItem, img, selimg);
		BOOL bMoveFolder=FALSE;
		if(img==0|| img == 5)
			bMoveFolder=TRUE;

		GetItemImage(m_hDropItem, img, selimg);
		BOOL bTargetFolder=FALSE;
		if((img==0|| img == 5) && m_bMoveIntoFolder)
			bTargetFolder=TRUE;

		//get source and taarget
		CString strName;
		strName = GetItemText(m_hDragItem);
		CString path,szPath;
		if(!pmf->GetFavoriteFolder(szPath))
			return ;

		//update menu
		pmf->m_bFavDirty = 2;

		GetItemPath(m_hDragItem, path);
		path = "\\"+path;
		path = szPath+ path;
		CString source;
		if(!bMoveFolder)
		{
			source = path+strName+".url";
			OFSTRUCT ofs;
			if(OpenFile(source, &ofs, OF_EXIST)==HFILE_ERROR)
			{
				source = path+strName+".lnk";
				strName += ".lnk";
			}
			else
				strName += ".url";
		}
		else
			source = path + strName;

		//get target
		CString strDir = GetItemText(m_hDropItem);

		path ="";
		GetItemPath(m_hDropItem, path);
		HTREEITEM hRoot = GetRootItem();

		path = "\\"+path;
		path = szPath+ path;
		CString target;
		if(m_hDropItem == hRoot)
			target = szPath+"\\"+strName;
		else if(!bTargetFolder)
			target = path+strName;
		else if(!m_bMoveIntoFolder)
			target = path + strName;
		else
			target = path+strDir+"\\"+strName;

		HTREEITEM hnode, hParent;
		if(!bMoveFolder)
		{
			hParent = GetParentItem(m_hDropItem);
			if(source!=target)
			{
				//copy or move here
				//get source path
				if(CopyFile(source, target, TRUE))
				{
					if(ItemHasChildren(m_hDropItem) && m_bMoveIntoFolder)//is folder
					{
						GetItemImage(m_hDragItem, img, selimg);
						hnode = InsertItem(strName.Left(strName.GetLength()-4), img, selimg, m_hDropItem, TVI_LAST);
						SetItemData(hnode, GetItemData(m_hDragItem));
					}
					else if(!bTargetFolder || !m_bMoveIntoFolder)
					{
						GetItemImage(m_hDragItem, img, selimg);
						hnode = InsertItem(strName.Left(strName.GetLength()-4), img, selimg, hParent, m_hDropItem);
						SetItemData(hnode, GetItemData(m_hDragItem));
					}

					if(!PRESS_CTRL)
					{
						//delete original
						if(DeleteFile(source))
							DeleteItem(m_hDragItem);
					}
					//update menu order
					source = source.Left(source.GetLength()-strName.GetLength());
					hParent = GetParentItem(m_hDragItem);
					BuildMenuOrder(source, hParent);
					target = target.Left(target.GetLength()-strName.GetLength());
					if(bTargetFolder)
						hParent = m_hDropItem;
					else
						hParent = GetParentItem(m_hDropItem);
					BuildMenuOrder(target, hParent);
				}
				else//not update menu
				{
					pmf->m_bFavDirty = FALSE;
				}
			}
			else
			{
				//only sort the order
				GetItemImage(m_hDragItem, img, selimg);
				if(!bTargetFolder)
					hnode = InsertItem(strName.Left(strName.GetLength()-4), img, selimg, hParent, m_hDropItem);
				else
					hnode = InsertItem(strName.Left(strName.GetLength()-4), img, selimg, m_hDropItem, TVI_FIRST);
				SetItemData(hnode, GetItemData(m_hDragItem));
				DeleteItem(m_hDragItem);

				//update menu order
				source = source.Left(source.GetLength()-strName.GetLength());
				if(bTargetFolder)
					hParent = m_hDropItem;
				else
					hParent = GetParentItem(m_hDropItem);
				BuildMenuOrder(source, hParent);
			}
		}
		else
		{
			hParent = GetParentItem(m_hDropItem);
			if(source!=target)
			{
				//copy or move here
				//get source path
				if(MoveFile(source, target))
				{
					if(ItemHasChildren(m_hDropItem))//is folder
					{
						GetItemImage(m_hDragItem, img, selimg);
						hnode = InsertItem(strName, img, selimg, m_hDropItem, TVI_LAST);
						SetItemData(hnode, GetItemData(m_hDragItem));
					}
					else if(!bTargetFolder)
					{
						GetItemImage(m_hDragItem, img, selimg);
						hnode = InsertItem(strName, img, selimg, hParent, m_hDropItem);
						SetItemData(hnode, GetItemData(m_hDragItem));
					}
					DeleteItem(m_hDragItem);

					if(source+"\\" == pmf->m_strStartFavFolder)
					{
						m_hStartFolder = hnode;
						SetItemState(hnode,TVIS_BOLD,TVIS_BOLD);
					}

					//update menu order
					source = source.Left(source.GetLength()-strName.GetLength());
					hParent = GetParentItem(m_hDragItem);
					BuildMenuOrder(source, hParent);
					target = target.Left(target.GetLength()-strName.GetLength());
					if(bTargetFolder && m_bMoveIntoFolder)
						hParent = m_hDropItem;
					else
						hParent = GetParentItem(m_hDropItem);
					BuildMenuOrder(target, hParent);

					//move sub order
					CString str;
					if(pmf->GetFavoriteFolder(str))
					{
						source = source.Mid(str.GetLength()+1);
						target = target.Mid(str.GetLength()+1);
	
						MoveSubMenuOrder(source+strName, target+strName);
					}
				}
				else//not update menu
				{
					pmf->m_bFavDirty = FALSE;
				}
			}
			else
			{
				//only sort the order
				GetItemImage(m_hDragItem, img, selimg);
				if(!bTargetFolder)
					hnode = InsertItem(strName, img, selimg, hParent, m_hDropItem);
				else
					hnode = InsertItem(strName, img, selimg, m_hDropItem, TVI_FIRST);
				SetItemData(hnode, GetItemData(m_hDragItem));
				DeleteItem(m_hDragItem);
			
				if(source+"\\" == pmf->m_strStartFavFolder)
				{
					m_hStartFolder = hnode;
					SetItemState(hnode,TVIS_BOLD,TVIS_BOLD);
				}
			
				//update menu order
				source = source.Left(source.GetLength()-strName.GetLength());
				if(bTargetFolder && m_bMoveIntoFolder)
					hParent = m_hDropItem;
				else
					hParent = GetParentItem(m_hDropItem);
				BuildMenuOrder(source, hParent);
			}
		}
	}
	CTreeCtrl::OnLButtonUp(nFlags, point);
}


#define SCROLL_BORDER  10
#define SCROLL_SPEED_ZONE_WIDTH 20

void CFavTreeCtrl::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	if( nIDEvent != m_nScrollTimer )
	{
		if( nIDEvent == m_nExpandTimer )
        {
            HTREEITEM htiFloat = GetDropHilightItem();
            if( htiFloat && htiFloat == m_hDropItem )
            {
                int img, selimg;
				GetItemImage(htiFloat, img, selimg);
				if(img == 0 || img == 5)
				{
					ExpandNode(htiFloat);
					Expand( htiFloat, TVE_EXPAND );
				}
			}
		}
		CTreeCtrl::OnTimer(nIDEvent);
		return;
	}

	HTREEITEM hitem;
	// Doesn't matter that we didn't initialize m_nTimerTicks
	m_nTimerTicks++;

	POINT pt;
	GetCursorPos( &pt );
	CRect rect;
	GetClientRect( &rect );
	ClientToScreen( &rect );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -