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

📄 favtreectrl.cpp

📁 myie的源程序是用VC++写自已可以扩搌使用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			alias = dlg.m_alias; url = dlg.m_url;
			alias.TrimLeft();
			url.TrimLeft();
			if(alias !="" && !alias.IsEmpty() && url!="" && !url.IsEmpty())
				((CMainFrame*)pMainFrame)->m_mapAlias.SetAt(alias, url);
		}
	}	
}

int CFavTreeCtrl::ExpandNode(HTREEITEM hItem)
{
	if ((hItem != NULL) && !ItemHasChildren(hItem))
	{
		int img, selimg;
		GetItemImage(hItem, img, selimg);
		if(img == 0 || img == 5)
		{
			int nEndPos = m_astrFav.GetSize();
			
			CString strName;
			strName = GetItemText(hItem);
			CString path,szPath;
			if(!((CMainFrame*)pMainFrame)->GetFavoriteFolder(szPath))
				return 0;

			GetItemPath(hItem, path);
			/*
			HTREEITEM hItemp = GetParentItem(hItem);
			HTREEITEM hParent = GetParentItem(hItemp);
			HTREEITEM hRoot = GetRootItem();
			while(hParent !=NULL)
			{
				path = GetItemText(hItemp)+"\\"+path;
				hItemp = hParent;
				hParent = GetParentItem(hParent);
			}*/
			path = "\\"+path;
			path = szPath+ path + strName;

			return ((CFavTree*)m_pFavTree)->BuildFavorites(path, nEndPos, hItem);
		}
	}
	return 0;
}

void CFavTreeCtrl::OnRfavMostFolder() 
{
	// TODO: Add your command handler code here
	CString strName;
	strName = "myiefolder.mic";
	CString path,szPath;
	if(!((CMainFrame*)pMainFrame)->GetFavoriteFolder(szPath))
		return ;

	GetItemPath(m_hItem, path);
	/*
	HTREEITEM hItem = GetParentItem(m_hItem);
	HTREEITEM hParent = GetParentItem(hItem);
	HTREEITEM hRoot = GetRootItem();
	while(hParent !=NULL)
	{
		path = GetItemText(hItem)+"\\"+path;
		hItem = hParent;
		hParent = GetParentItem(hParent);
	}*/
	path = "\\"+path;
	path = szPath+ path + GetItemText(m_hItem) + "\\";

//	if(CreateFile(path+strName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL)!=NULL)
	{
		int nImage, nSImage;
		GetItemImage(m_hItem, nImage, nSImage);
		if(nImage == 0)
		{
			SetItemImage(m_hItem, 5,6);
			WritePrivateProfileString("MyIE", "MostFav", "1", path+strName);
		}
		else if (nImage == 5)
		{
			SetItemImage(m_hItem, 0,2);
			WritePrivateProfileString("MyIE", "MostFav", "0", path+strName);
		}
		//update menu
		((CMainFrame*)pMainFrame)->m_bFavDirty = TRUE;
	}
}

void CFavTreeCtrl::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	HTREEITEM hItem;

	CPoint pt;
	GetCursorPos(&pt);
	ScreenToClient(&pt);
	hItem = HitTest(pt);
	m_hItem = hItem;

	if (hItem != NULL )
	{
		int img, selimg;
		GetItemImage(hItem, img, selimg);
		if(img == 0 || img == 5)
		{
			if(!ItemHasChildren(hItem))
				ExpandNode(hItem);
			OnRfavOpenall();
		}

	}

	*pResult = 0;
}

void CFavTreeCtrl::OnRfavfolderFind() 
{
	// TODO: Add your command handler code here
	CString path,szPath;
	if(!((CMainFrame*)pMainFrame)->GetFavoriteFolder(szPath))
		return ;

	GetItemPath(m_hItem, path);
	/*
	HTREEITEM hItem = GetParentItem(m_hItem);
	HTREEITEM hParent = GetParentItem(hItem);
	HTREEITEM hRoot = GetRootItem();
	while(hParent !=NULL)
	{
		path = GetItemText(hItem)+"\\"+path;
		hItem = hParent;
		hParent = GetParentItem(hParent);
	}*/
	path = "\\"+path;
	path = szPath+ path + GetItemText(m_hItem) + "\\";

	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(!((CMainFrame*)pMainFrame)->GetFavoriteFolder(szPath))
		return ;

	GetItemPath(m_hItem, path);
	/*
	HTREEITEM hItem = GetParentItem(m_hItem);
	HTREEITEM hParent = GetParentItem(hItem);
	HTREEITEM hRoot = GetRootItem();
	while(hParent !=NULL)
	{
		path = GetItemText(hItem)+"\\"+path;
		hItem = hParent;
		hParent = GetParentItem(hParent);
	}*/
	path = "\\"+path;
	path = szPath+ path;

	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");
			if(m_astrFav[d]==buf)
				return;
			else
			{
				m_astrFav[d] = buf;
				//update menu
				((CMainFrame*)pMainFrame)->m_bFavDirty = TRUE;

			}
		}
	}

}

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;

	int img, selimg;
	GetItemImage(m_hDragItem, img, selimg);
	if(img == 0 || img == 5)
	{
		//not drag folders
		*pResult = 0;
		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;
		SetCapture(); 
		SetCursor(LoadCursor(NULL, IDC_ARROW));

		m_nTimerID = 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
	if(m_bDragging)
	{
		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
		SelectDropTarget (m_hDropItem);

		int img=-1, selimg=-1;
		GetItemImage(m_hDropItem, img, selimg);
		int oldimg=-1, oldselimg=-1;
		GetItemImage(m_hOldDropItem, oldimg, oldselimg);
		if(img != 0 && img != 5)
		{
			SetCursor(LoadCursor(NULL, IDC_NO));
		}
		else
		{
			SetCursor(LoadCursor(NULL, IDC_ARROW));
		}

		if( m_idTimer && m_hDropItem == m_hOldDropItem )
			{
				KillTimer( m_idTimer );
				m_idTimer = 0;
			}
			
		if( !m_idTimer )
			m_idTimer = 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);

		// highlight it
		CString url; 
		int img=-1, selimg=-1;
		GetItemImage(hItem, img, selimg);
		if(img != 0 && img != 5)
		{
			int d = GetItemData(hItem);
			if(d>=0)
			{
				GetURL(m_astrFav[d], url);
			}
			else
				url = "";
		}


		pMainFrame->SetMessageText(url);
	}
	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_nTimerID );//auto scroll
		KillTimer( m_idTimer); //auto expand

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

		int img, selimg;
		GetItemImage(m_hDropItem, img, selimg);
		if(img == 0 || img == 5)
		{
			//copy or move here
			//get source path
			CString strName;
			strName = GetItemText(m_hDragItem);
			CString path,szPath;
			if(!((CMainFrame*)pMainFrame)->GetFavoriteFolder(szPath))
				return ;

			GetItemPath(m_hDragItem, path);
			/*
			HTREEITEM hItem = GetParentItem(m_hDragItem);
			HTREEITEM hParent = GetParentItem(hItem);
			HTREEITEM hRoot = GetRootItem();
			while(hParent !=NULL)
			{
				path = GetItemText(hItem)+"\\"+path;
				hItem = hParent;
				hParent = GetParentItem(hParent);
			}*/
			path = "\\"+path;
			path = szPath+ path;
			CString source = path+strName+".url";
			OFSTRUCT ofs;
			if(OpenFile(source, &ofs, OF_EXIST)==HFILE_ERROR)
			{
				source = path+strName+".lnk";
				strName += ".lnk";
			}
			else
				strName += ".url";

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

			path ="";
			GetItemPath(m_hDropItem, path);
			HTREEITEM hRoot = GetRootItem();
			/*
			hItem = GetParentItem(m_hDropItem);
			hParent = GetParentItem(hItem);
			while(hParent !=NULL)
			{
				path = GetItemText(hItem)+"\\"+path;
				hItem = hParent;
				hParent = GetParentItem(hParent);
			}*/
			path = "\\"+path;
			path = szPath+ path;
			CString target;
			if(m_hDropItem == hRoot)
				target = szPath+"\\"+strName;
			else
				target = path+strDir+"\\"+strName;

			if(CopyFile(source, target, TRUE))
			{
				if(ItemHasChildren(m_hDropItem))
				{
					GetItemImage(m_hDragItem, img, selimg);
					HTREEITEM hnode = InsertItem(strName.Left(strName.GetLength()-4), img, selimg, m_hDropItem, TVI_SORT);
					SetItemData(hnode, GetItemData(m_hDragItem));
				}

				short ks=GetKeyState(VK_CONTROL);
				if(ks>=0)
				{
					//delete original
					if(DeleteFile(source))
						DeleteItem(m_hDragItem);
				}
			
				//update menu
				((CMainFrame*)pMainFrame)->m_bFavDirty = TRUE;
			}

		}

	}
	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_nTimerID )
	{
		if( nIDEvent == m_idTimer )
        {
                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_timerticks
	m_timerticks++;

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

	// NOTE: Screen coordinate is being used because the call
	// to DragEnter had used the Desktop window.
	CImageList::DragMove(pt);

  	int iMaxV = GetScrollLimit(SB_VERT);
 	int iPosV = GetScrollPos(SB_VERT);
	// The cursor must not only be SOMEWHERE above/beneath the tree control
	// BUT RIGHT above or beneath it 
	// i.e. the x-coordinates must be those of the control (+/- SCROLL_BORDER)
	if ( pt.x < rect.left - SCROLL_BORDER ) 
	  ; // Too much to the left
	else if ( pt.x > rect.right + SCROLL_BORDER ) 
	  ; // Too much to the right
	else if( (pt.y < rect.top + SCROLL_BORDER) && iPosV )
	{
		hitem = GetFirstVisibleItem();
		// We need to scroll up
		// Scroll slowly if cursor near the treeview control
		int slowscroll = 6 - (rect.top + SCROLL_BORDER - pt.y) / SCROLL_SPEED_ZONE_WIDTH;
		if( 0 == ( m_timerticks % (slowscroll > 0? slowscroll : 1) ) )
		{
			CImageList::DragShowNolock(FALSE);
			SendMessage( WM_VSCROLL, SB_LINEUP);
			SelectDropTarget(hitem);
			m_hDropItem = hitem;
			CImageList::DragShowNolock(TRUE);
		}
	}
	else if( (pt.y > rect.bottom - SCROLL_BORDER) && (iPosV!=iMaxV) )
	{
		// We need to scroll down
		// Scroll slowly if cursor near the treeview control
		int slowscroll = 6 - (pt.y - rect.bottom + SCROLL_BORDER ) / SCROLL_SPEED_ZONE_WIDTH;
		if( 0 == ( m_timerticks % (slowscroll > 0? slowscroll : 1) ) )
		{
			CImageList::DragShowNolock(FALSE);
			SendMessage( WM_VSCROLL, SB_LINEDOWN);
			int nCount = GetVisibleCount();
			hitem = GetFirstVisibleItem();
			for ( int i=0; i<nCount-1; ++i )
				hitem = GetNextVisibleItem(hitem);
			if( hitem )
				SelectDropTarget(hitem);
			m_hDropItem = hitem;
			CImageList::DragShowNolock(TRUE);
		}
	}

	// The cursor must be in a small zone IN the treecontrol at the left/right
	int iPosH = GetScrollPos(SB_HORZ);
	int iMaxH = GetScrollLimit(SB_HORZ);

	if ( !rect.PtInRect(pt) ) return; // not in TreeCtrl
	else if ( (pt.x < rect.left + SCROLL_BORDER) && (iPosH != 0) )
	{
		// We need to scroll to the left
		CImageList::DragShowNolock(FALSE);
		SendMessage(WM_HSCROLL, SB_LINELEFT);
		CImageList::DragShowNolock(TRUE);
	}
	else if ( (pt.x > rect.right - SCROLL_BORDER) && (iPosH != iMaxH) )
	{
		// We need to scroll to the right
		CImageList::DragShowNolock(FALSE);
		SendMessage(WM_HSCROLL, SB_LINERIGHT);
		CImageList::DragShowNolock(TRUE);
	}
}

void CFavTreeCtrl::OnDestroy() 
{
	CTreeCtrl::OnDestroy();
	
	// TODO: Add your message handler code here
	CImageList* pImage = GetImageList( TVSIL_NORMAL );
	delete pImage;

	if( m_idTimer )
	{
		KillTimer( m_idTimer );
		m_idTimer = 0;
	}
	
}

void CFavTreeCtrl::GetItemPath(HTREEITEM hti, CString &path)
{
	HTREEITEM hItem = GetParentItem(hti);
	HTREEITEM hParent = GetParentItem(hItem);
	HTREEITEM hRoot = GetRootItem();
	while(hParent !=NULL)
	{
		path = GetItemText(hItem)+"\\"+path;
		hItem = hParent;
		hParent = GetParentItem(hParent);
	}
}

⌨️ 快捷键说明

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