📄 treeview2.cpp
字号:
tvi.cchTextMax = MAX_PATH;
tvi.hItem = hItem;
TreeView_GetItem(m_hWnd, &tvi);
//専嶕僼僅儖僟埲奜偺応崌
if (wcscmp(szChildName, SEARCH_FOLDER_NAME) != 0)
{
OnDropEnter(hWnd, hItem);
return TRUE;
}
else
return FALSE;
} else
return FALSE;
}
///////////////////////////////////////////////////////////////
void CTreeView::OnDropEnter(HWND hWnd, HTREEITEM hItem)
{
HWND hMain = g_MainWnd.m_hWnd;
BOOL b_shortcut = FALSE;
BOOL b_cut = FALSE;
DWORD iMenuID=0;
//Shift僉乕墴壓帪偼儊僯儏乕昞帵
if(GET_KEYSTATE(VK_LSHIFT)&0x8000 ||
GET_KEYSTATE(VK_RSHIFT)&0x8000 ||
g_MainWnd.m_bShiftKey ||
g_MainWnd.m_bContextMenu)
{
DWORD dwPos = GetMessagePos();
POINT pt;
pt.x = LOWORD(dwPos);
pt.y = HIWORD(dwPos);
// ScreenToClient(m_hWnd, &pt);
HMENU hMenu;
hMenu = GetSubMenu(g_MainWnd.m_ListView.m_hMenuPopup, 4);
iMenuID = TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD, pt.x, pt.y, 0, m_hWnd, NULL);
//儊僯儏乕慖戰柍偟媦傃僉儍儞僙儖偺応崌
if(!iMenuID || iMenuID == ID_DROP_CANCEL) {
//僪儘僢僾傾僀僥儉偺忬懺傪夝彍
TreeView_SelectDropTarget(m_hWnd, NULL);
return;
}
}
//僪儘僢僾傾僀僥儉偺忬懺傪夝彍
TreeView_SelectDropTarget(m_hWnd, NULL);
//僐僺乕慜偺忬懺傪堦抂曐懚
TCHAR szFromFolder[MAX_PATH];
GetCurrentFolder(szFromFolder);
HTREEITEM hCurrent = TreeView_GetSelection(m_hWnd);
//僐僺乕/愗傝庢傝/僔儑乕僩僇僢僩嶌惉張棟幚峴
//儕僗僩價儏乕偐傜偺僪儘僢僾帪
if(hWnd != m_hWnd) {
//1.僐僺乕偺応崌(+Ctl)
if(iMenuID == ID_DROP_COPY ||
GET_KEYSTATE(VK_CONTROL)&0x8000 ||
g_MainWnd.m_bControlKey) {
g_MainWnd.m_ListView.OnEditCopy();
//2.僔儑乕僩僇僢僩嶌惉(+Alt)偺応崌
} else if(iMenuID == ID_DROP_SHORTCUT ||
GET_KEYSTATE(VK_MENU)&0x8000) {
g_MainWnd.m_ListView.OnEditCopy();
b_shortcut = TRUE;
//3.愗傝庢傝偺応崌
} else {
g_MainWnd.m_ListView.OnEditCut();
}
//僣儕乕價儏乕偐傜偺僪儘僢僾帪
} else {
//僪儔僢僌傾僀僥儉傪慖戰
TreeView_SelectItem(m_hWnd, g_MainWnd.m_hDragTree);
//1.僐僺乕偺応崌(+Ctl)
if(iMenuID == ID_DROP_COPY ||
GET_KEYSTATE(VK_CONTROL)&0x8000 ||
g_MainWnd.m_bControlKey) {
OnEditCopy();
//2.僔儑乕僩僇僢僩嶌惉(+Alt)偺応崌
} else if(iMenuID == ID_DROP_SHORTCUT ||
GET_KEYSTATE(VK_MENU)&0x8000) {
OnEditCopy();
b_shortcut = TRUE;
//3.愗傝庢傝偺応崌
} else {
OnEditCut();
b_cut = TRUE;
}
}
//僪儘僢僾傾僀僥儉傪慖戰
TreeView_SelectItem(m_hWnd, hItem);
GetCurrentFolder(g_MainWnd.m_ListView.m_szCurrentFolder);
//揬傝晅偗張棟幚峴
if(iMenuID != ID_DROP_CANCEL) {
if(b_shortcut) {
g_MainWnd.m_ListView.OnEditPasteShortcut(FALSE);
} else {
g_MainWnd.m_ListView.OnEditPaste(FALSE);
}
}
//揬傝晅偗慜偺僨傿儗僋僩儕偑側偄応崌丄忋埵僨傿儗僋僩儕傊堏摦
while(GetFileAttributes(szFromFolder) == 0xFFFFFFFF) {
LPTSTR lpszTemp = wcsrchr(szFromFolder, _T('\\'));
if(lpszTemp) *lpszTemp = 0;
else break;
} // End of while
//揬傝晅偗慜偺忬懺傊栠偡
g_MainWnd.m_ListView.LoadFolderItem(szFromFolder, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnDropCansel()
{
//僪儘僢僾廔椆
TreeView_SelectDropTarget(m_hWnd, NULL);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnViewUpFolder()
{
if(!(GET_KEYSTATE(VK_BACK)&0x8000))
{
//尰嵼偺傾僀僥儉傪庢摼
HTREEITEM hTreeItem = TreeView_GetSelection(m_hWnd);
if(hTreeItem)
{
//堦偮忋偺傾僀僥儉傪庢摼
hTreeItem = TreeView_GetParent(m_hWnd, hTreeItem);
if(hTreeItem)
//傾僀僥儉偺僴僀儔僀僩
TreeView_SelectItem(m_hWnd, hTreeItem);
}
}
//儕僗僩價儏乕偺峏怴
SetCurrentFolder();
}
///////////////////////////////////////////////////////////////
void CTreeView::OnEditCopy()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//僐僺乕張棟傪幚峴
g_MainWnd.m_ListView.OnEditCopy();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnEditCut()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//愗傝庢傝張棟傪幚峴
g_MainWnd.m_ListView.OnEditCut();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileDelete()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//嶍彍張棟傪幚峴
g_MainWnd.m_ListView.OnFileDelete();
//揬傝晅偗慜偺僨傿儗僋僩儕偑側偄応崌丄忋埵僨傿儗僋僩儕傊堏摦
while(GetFileAttributes(szPath) == 0xFFFFFFFF) {
LPTSTR lpszTemp = wcsrchr(szPath, _T('\\'));
if(lpszTemp) *lpszTemp = 0;
else break;
} // End of while
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileRename()
{
//尰嵼偺慖戰傾僀僥儉庢摼
HTREEITEM hItem = TreeView_GetSelection(m_hWnd);
if (hItem) {
#ifdef __POCKET_PC
SipShowIM(SIPF_ON);
#endif
//儔儀儖傪曇廤忬懺偵偡傞
SetFocus(m_hWnd);
TreeView_EditLabel(m_hWnd, hItem);
}
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileCreateShortcut()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//僔儑乕僩僇僢僩嶌惉張棟幚峴
g_MainWnd.m_ListView.OnFileCreateShortcut();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileProperty()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//僾儘僷僥傿張棟幚峴
g_MainWnd.m_ListView.OnFileProperty();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileIRSend()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//愒奜慄憲怣幚峴
g_MainWnd.m_ListView.OnFileIRSend();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileShortcutFolder()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//僔儑乕僩僇僢僩傪憲傞張棟幚峴
g_MainWnd.m_ListView.OnFileShortcutFolder();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileCopyFolder()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//僼傽僀儖傪僼僅儖僟傊僐僺乕張棟幚峴
g_MainWnd.m_ListView.OnFileCopyFolder();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFileMoveFolder()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//僼傽僀儖傪僼僅儖僟傊堏摦張棟幚峴
g_MainWnd.m_ListView.OnFileMoveFolder();
//揬傝晅偗慜偺僨傿儗僋僩儕偑側偄応崌丄忋埵僨傿儗僋僩儕傊堏摦
while(GetFileAttributes(szPath) == 0xFFFFFFFF) {
LPTSTR lpszTemp = wcsrchr(szPath, _T('\\'));
if(lpszTemp) *lpszTemp = 0;
else break;
} // End of while
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnEditCopyFileName()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//柤慜傪僐僺乕張棟幚峴
g_MainWnd.m_ListView.OnEditCopyFileName();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnEditCopyFilePath()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//柤慜傪僐僺乕張棟幚峴
g_MainWnd.m_ListView.OnEditCopyFilePath();
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
///////////////////////////////////////////////////////////////
BOOL CTreeView::OnFileCompress()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//埑弅張棟幚峴
BOOL bRtn = g_MainWnd.m_ListView.OnFileCompress();
//尦偺僨傿儗僋僩儕傊栠傞
if(!(g_MainWnd.m_ListView.m_Settings.bMoveDir ||
g_MainWnd.m_ListView.m_Settings.bAutoUnComp))
{
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
return bRtn;
}
///////////////////////////////////////////////////////////////
void CTreeView::OnFavoritesAdd()
{
//尰嵼偺僨傿儗僋僩儕傪傾僀僥儉偲偟偰慖戰
TCHAR szPath[MAX_PATH];
GetCurrentFolder(szPath);
g_MainWnd.m_ListView.SelectFile(szPath);
//僐僺乕張棟傪幚峴
g_MainWnd.m_ListView.OnEditCopy();
//偍婥偵擖傝偺僨傿儗僋僩儕傊堏摦
wcscpy(g_MainWnd.m_ListView.m_szCurrentFolder, g_MainWnd.m_szFavoritesPath);
//僔儑乕僩僇僢僩偺揬傝晅偗
g_MainWnd.m_ListView.OnEditPasteShortcut(FALSE);
//尦偺僨傿儗僋僩儕傊栠傞
g_MainWnd.m_ListView.LoadFolderItem(szPath, FALSE);
}
#ifdef __POCKET_PC
///////////////////////////////////////////////////////////////
void CTreeView::OnTapAndHold()
{
DWORD dwPos = GetMessagePos();
OnRClick(LOWORD(dwPos), HIWORD(dwPos), TRUE);
}
#endif
///////////////////////////////////////////////////////////////
void CTreeView::OnTapHoldBegin(DWORD dwPos)
{
SetFocus(m_hWnd);
#ifndef __POCKET_PC
if(!m_bTaping)
{
//僞僀儅偺搊榐
SetTimer(m_hWnd, ID_TIMER_TAPHOLD, (GetDoubleClickTime()), NULL);
m_bTaping = !m_bTaping;
m_dwTapPos = dwPos;
}
#endif
}
///////////////////////////////////////////////////////////////
void CTreeView::OnTapHoldCancel()
{
if(m_bTaping)
{
//僞僀儅 偺嶍彍
m_bTaping = !m_bTaping;
KillTimer(m_hWnd, ID_TIMER_TAPHOLD);
}
}
///////////////////////////////////////////////////////////////
void CTreeView::OnTapHoldEnter()
{
if(m_bTaping)
{
//僞僀儅偺嶍彍
KillTimer(m_hWnd, ID_TIMER_TAPHOLD);
//尰嵼偺僂傿儞僪僂埵抲傪庢摼
DWORD dwPos = GetMessagePos();
//僞僢僾偟偨傾僀僥儉傪庢摼
TVHITTESTINFO tv_ht;
memset(&tv_ht, 0x00, sizeof(tv_ht));
tv_ht.flags = TVHT_ONITEM;
tv_ht.pt.x = LOWORD(m_dwTapPos);
tv_ht.pt.y = HIWORD(m_dwTapPos);
HTREEITEM hFromItem = TreeView_HitTest(m_hWnd, &tv_ht);
//尰嵼偺傾僀僥儉傪庢摼
memset(&tv_ht, 0x00, sizeof(tv_ht));
tv_ht.flags = TVHT_ONITEM;
tv_ht.pt.x = LOWORD(dwPos);
tv_ht.pt.y = HIWORD(dwPos);
ScreenToClient(m_hWnd, &(tv_ht.pt));
HTREEITEM hToItem = TreeView_HitTest(m_hWnd, &tv_ht);
//嵗昗偺嵎暘
DWORD dwX = max(tv_ht.pt.x,LOWORD(m_dwTapPos))
- min(tv_ht.pt.x,LOWORD(m_dwTapPos));
DWORD dwY = max(tv_ht.pt.y,HIWORD(m_dwTapPos))
- min(tv_ht.pt.y,HIWORD(m_dwTapPos));
//傾僀僥儉偑桳岠妿偮堦抳(儂乕儖僪惉岟)
if((hFromItem && hFromItem == hToItem) &&
(dwX <= AREA_TAPHOLD && dwY <= AREA_TAPHOLD))
//儊僯儏乕昞帵
OnRClick(LOWORD(m_dwTapPos)+10, HIWORD(m_dwTapPos), FALSE);
}
}
///////////////////////////////////////////////////////////////
void CTreeView::OnExitMenuLoop()
{
//僞僢僾&儂乕儖僪拞埲奜偼柍岠
if(!m_bTaping) return;
m_bTaping = !m_bTaping;
m_bHolding = !m_bHolding;
//儊僯儏乕僉儍儞僙儖梡僞僀儅愝掕
SetTimer(m_hWnd, ID_TIMER_MENUCANCEL, 500, NULL);
}
///////////////////////////////////////////////////////////////
void CTreeView::OnSelectMenuLoop()
{
//僞僢僾&儂乕儖僪張棟拞埲奜偺応崌柍岠
if(!m_bHolding) return;
//張棟僼儔僌愝掕
static BOOL bFlg = FALSE;
bFlg = !bFlg;
//張棟偑1夞栚(張棟屇傃弌偟慜)偺応崌
if(bFlg)
{
KillTimer(m_hWnd, ID_TIMER_MENUCANCEL);
}
//曇廤忬懺偺夝彍
TreeView_EndEditLabelNow(m_hWnd, FALSE);
//張棟偑2夞栚(張棟屇傃弌偟屻)偺応崌
if(!bFlg)
{
//僞僢僾&儂乕儖僪張棟拞夝彍
m_bHolding = !m_bHolding;
}
}
//ADD END
///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -