📄 favtreectrl.cpp
字号:
url = "about:blank";
}
return TRUE;
}
void CFavTreeCtrl::OnRfavAddshortcut()
{
// TODO: Add your command handler code here
int d = GetItemData(m_hItem);
if(d>=0)
{
CString url;
POSITION pos = m_astrFav.FindIndex(d);
if(pos!=NULL)
GetURL(m_astrFav.GetAt(pos), url);
CSetSCDlg dlg;
dlg.m_strEdit = url;
dlg.DoModal();
}
}
void CFavTreeCtrl::OnRfavAlias()
{
// TODO: Add your command handler code here
int d = GetItemData(m_hItem);
if(d>=0)
{
CString url, alias;
POSITION pos = m_astrFav.FindIndex(d);
if(pos!=NULL)
GetURL(m_astrFav.GetAt(pos), url);
CInputAlias dlg;
dlg.m_url = url;
dlg.m_alias = GetItemText(m_hItem);
if(dlg.DoModal()==IDOK)
{
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.GetCount();
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);
}*/
if(m_hItem != GetRootItem())
{
path = "\\"+path;
path = szPath+ path + GetItemText(m_hItem) + "\\";
}
else
path = szPath + "\\";
// 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);
}
SetFileAttributes(path+strName, FILE_ATTRIBUTE_HIDDEN);
//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);
}*/
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(!((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;
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
((CMainFrame*)pMainFrame)->m_bFavDirty = TRUE;
}
}
}
}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;
/* 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;
m_bMoveIntoFolder = FALSE;
m_HalfItemHeight = GetItemHeight()/2;
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
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_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);
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 = "";
}
pMainFrame->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_nTimerID );//auto scroll
KillTimer( m_idTimer); //auto expand
m_nTimerID =0;
m_idTimer = 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(!((CMainFrame*)pMainFrame)->GetFavoriteFolder(szPath))
return ;
//update menu
((CMainFrame*)pMainFrame)->m_bFavDirty = TRUE;
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));
}
short ks=GetKeyState(VK_CONTROL);
if(ks>=0)
{
//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
((CMainFrame*)pMainFrame)->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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -