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

📄 treeview2.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		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 + -