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

📄 listview.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				sei.lpFile = _T("beam.exe");
			else 
				sei.lpFile = _T("irsquirt.exe");

			ShellExecuteEx(&sei);
			//MOD END
		}
	}
}
////////////////////////////////////////////////////////////////
void CListView::OnFileCopyFolder()
{
	TCHAR szFolderTo[MAX_PATH] = {0};
	wcscpy(szFolderTo, m_szCurrentFolder);
	CFolderDlg fd;
	if (fd.ShowFolderDlg(IDS_TITLE_COPY, szFolderTo, MAX_PATH)==IDOK)
	{
		//僼傽僀儖偺僐僺乕傪幚峴
		int nCount = ListView_GetSelectedCount(m_hWnd);
		if (nCount > 0)
		{
			LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];
			MakeSelectedItemsStrings(pliinfo, nCount);

			CCopyFileDlg cfd;
			//MOD START TODA
			int nRet = cfd.ShowCopyFileDlg(m_szCurrentFolder, szFolderTo, pliinfo, nCount, FALSE);
			//MOD END
			//ADD START TODA
			if (fd.m_bRefresh || nRet == IDOK)
			{
				g_MainWnd.m_TreeView.SetCurrentFolder(szFolderTo);
				LoadFolderItem(m_szCurrentFolder, FALSE);
			}
			//ADD END

			delete[] pliinfo;
		}
	}
	else
	{
		if (fd.m_bRefresh)
		{
			g_MainWnd.m_TreeView.SetCurrentFolder(szFolderTo);	//ADD TODA
			LoadFolderItem(m_szCurrentFolder, FALSE);			//MOD TODA
		}
	}
}
////////////////////////////////////////////////////////////////
void CListView::OnFileMoveFolder()
{
	TCHAR szFolderTo[MAX_PATH] = {0};
	wcscpy(szFolderTo, m_szCurrentFolder);
	CFolderDlg fd;
	if (fd.ShowFolderDlg(IDS_TITLE_MOVE, szFolderTo, MAX_PATH)==IDOK)
	{
		//僼傽僀儖偺僐僺乕傪幚峴
		int nCount = ListView_GetSelectedCount(m_hWnd);
		if (nCount > 0)
		{
			LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];
			MakeSelectedItemsStrings(pliinfo, nCount);

			CCopyFileDlg cfd;
			//MOD START TODA
//			if (cfd.ShowCopyFileDlg(m_szCurrentFolder, szFolderTo, pliinfo, nCount, TRUE)==IDOK)
//				LoadFolderItem(m_szCurrentFolder);
			int nRet = cfd.ShowCopyFileDlg(m_szCurrentFolder, szFolderTo, pliinfo, nCount, TRUE);
			if (fd.m_bRefresh || nRet == IDOK)
			{
				g_MainWnd.m_TreeView.SetCurrentFolder(szFolderTo);
				LoadFolderItem(m_szCurrentFolder, TRUE);
			}
			//MOD END

			delete[] pliinfo;
		}
	}
	else
	{
		if (fd.m_bRefresh)
		{
			g_MainWnd.m_TreeView.SetCurrentFolder(szFolderTo);		//ADD TODA
			LoadFolderItem(m_szCurrentFolder, TRUE);				//MOD TODA
		}
	}
}
//ADD START TODA
////////////////////////////////////////////////////////////////
void CListView::OnFileToApp()
{
	//慖戰傾僀僥儉庢摼
	int nIndex = GetSelectedItemIndex(0);
	if (nIndex == -1)
		return;

	LISTITEMCOMP* plic = GetListItemStruct(nIndex);
	if (plic->nItem != LIST_ITEM_FILE)
		return;

	//傾僾儕働乕僔儑儞慖戰僟僀傾儘僌嶌惉
	CAssociation *pDlg = new CAssociation(g_MainWnd.m_hWnd, g_hInst);

	pDlg->OpenChoose(plic->lpszPath, plic->lpszName);

	delete pDlg;
}
//ADD END
////////////////////////////////////////////////////////////////
void CListView::OnEditCut()
{
	//愗傝庢傝
	int nCount = GetValidAndSelectedCount();
	if (nCount > 0)
	{
		if (m_lpliinfo)
		{
			delete[] m_lpliinfo;
			m_lpliinfo = NULL;
			m_nCount = 0;
		}
	
		LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];
		MakeSelectedItemsStrings(pliinfo, nCount);

		wcscpy(m_szFolderFrom, m_szCurrentFolder);
		
		m_lpliinfo = pliinfo;
		m_nCount = nCount;
		m_bFileMove = TRUE;

		g_MainWnd.m_CmdBands.SetEnableEditPaste(TRUE);

		for (int i = 0; i < ListView_GetItemCount(m_hWnd); i++)
		{
			BOOL bFocused = FALSE;
			if (ListView_GetItemState(m_hWnd, i, LVIS_FOCUSED) == LVIS_FOCUSED)
				bFocused = TRUE;

			if (ListView_GetItemState(m_hWnd, i, LVIS_SELECTED) == LVIS_SELECTED)
			{
				if (bFocused)
				{
					ListView_SetItemState(m_hWnd, i, LVIS_FOCUSED | LVIS_CUT, LVIS_FOCUSED | LVIS_CUT);
				}
				else
				{
					ListView_SetItemState(m_hWnd, i, LVIS_CUT, LVIS_CUT);
				}
			}
		} //End of for
	}
}
////////////////////////////////////////////////////////////////
void CListView::OnEditCopy()
{
	//僐僺乕
	if (m_lpliinfo)
	{
		delete[] m_lpliinfo;
		m_lpliinfo = NULL;
		m_nCount = 0;
	}

	int nCount = GetValidAndSelectedCount();
	if (nCount > 0)
	{
		LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];
		MakeSelectedItemsStrings(pliinfo, nCount);

		wcscpy(m_szFolderFrom, m_szCurrentFolder);
		
		m_lpliinfo = pliinfo;
		m_nCount = nCount;
		m_bFileMove = FALSE;

		g_MainWnd.m_CmdBands.SetEnableEditPaste(TRUE);

		for (int i=0; i<ListView_GetItemCount(m_hWnd); i++)
		{
			if (ListView_GetItemState(m_hWnd, i, LVIS_SELECTED)==LVIS_SELECTED)
				ListView_SetItemState(m_hWnd, i, 0, LVIS_CUT);
		}
	}
}
////////////////////////////////////////////////////////////////
void CListView::OnEditPaste(BOOL bUpdate)		//MOD TODA
{
	//揬傝晅偗
	if (m_nCount > 0 && m_lpliinfo)
	{
		// 懚嵼妋擣
		for (int i = 0; i < m_nCount; i++)
		{
			if (m_lpliinfo[i].nItem == LIST_ITEM_UPPER)
				continue;

			TCHAR szPath[MAX_PATH];
			//MOD START TODA
//			wsprintf(szPath, _T("%s\\%s"), m_szFolderFrom, m_lpliinfo[i].szName);
			wsprintf(szPath, _T("%s\\%s"), m_lpliinfo[i].szPath, m_lpliinfo[i].szName);
			//MOD END
			if (GetFileAttributes(szPath) == 0xFFFFFFFF)
			{
				// 僄儔乕
				MessageBox(g_MainWnd.m_hWnd, IDS_MSG_PASTEERROR, NULL, MB_OK|MB_ICONSTOP);

				delete[] m_lpliinfo;
				m_lpliinfo = NULL;
				m_nCount = 0;
				wcscpy(m_szFolderFrom, _T(""));
				g_MainWnd.m_CmdBands.SetEnableEditPaste(FALSE);
				return;
			}
		} //End of for

//DEL START TODA
//		// 堏摦愭偑堏摦尦偲摨偠応崌偱愗傝庢傝偺帪偼僄儔乕
//		if (m_bFileMove && wcscmp(m_szFolderFrom, m_szCurrentFolder) == 0)
//		{
//			MessageBox(g_MainWnd.m_hWnd, IDS_MSG_PASTEERROR1, NULL, MB_OK|MB_ICONSTOP);
//			return;
//		}
//DEL END

		// 揬傝晅偗張棟
		CCopyFileDlg cfd;
		if (cfd.ShowCopyFileDlg(m_szFolderFrom, m_szCurrentFolder, m_lpliinfo, m_nCount, m_bFileMove)==IDOK)
		{
			//儕僗僩價儏乕峏怴
			if(bUpdate)										//ADD TODA
				LoadFolderItem(m_szCurrentFolder, FALSE);	//MOD TODA

			//ADD START TODA
			//専嶕僼僅儖僟側偺偐敾掕
			BOOL bSearch = FALSE;
			if(0 == wcscmp(m_szFolderFrom, SEARCH_FOLDER_NAME))
				bSearch = TRUE;

			// 僐僺乕or堏摦偟偨傕偺偵僼僅儖僟偑偁傞応崌偼僣儕乕價儏乕峏怴
			BOOL bFolders = FALSE;	//ADD TODA
			for (int i = 0; i < m_nCount; i++) {

				//ADD START TODA (専嶕寢壥僼僅儖僟帪)
				if(bSearch && m_bFileMove)
					EditSearch(m_lpliinfo[i].szPath, m_lpliinfo[i].szName, m_szCurrentFolder, m_lpliinfo[i].szName);
				//ADD END

				if (m_lpliinfo[i].nItem == LIST_ITEM_FOLDER)
				{
					g_MainWnd.m_TreeView.SetCurrentFolder(m_lpliinfo[i].szPath, TRUE, FALSE);
					bFolders = TRUE;
				}
			} //End of for

			//峏怴懳徾偑偁傞応崌
			if(bFolders)
				g_MainWnd.m_TreeView.SetCurrentFolder(m_szCurrentFolder, TRUE, bUpdate);
			//ADD END
		}

		if (m_bFileMove)
		{
			delete[] m_lpliinfo;
			m_lpliinfo = NULL;
			m_nCount = 0;
			wcscpy(m_szFolderFrom, _T(""));
			g_MainWnd.m_CmdBands.SetEnableEditPaste(FALSE);
		}
	}
}
////////////////////////////////////////////////////////////////
void CListView::OnFileDelete()
{
	//僼傽僀儖偺嶍彍
	int nCount = GetValidAndSelectedCount();
	if (nCount > 0)
	{
		LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];
		MakeSelectedItemsStrings(pliinfo, nCount);

		CDeleteFileDlg dfd;
		if (dfd.ShowDeleteFileDlg(m_szCurrentFolder, pliinfo, nCount) == IDOK) {
			//DEL START TODA (崅懍壔偺堊)
//			HWND hwndPrev = GetFocus();
//			ShowWindow(m_hWnd, SW_HIDE);
			//DEL END
			
			for (int i = nCount - 1; i >= 0; i--) {
				if (pliinfo[i].bDone) {
					LISTITEMCOMP* pDel = GetListItemStruct(pliinfo[i].nIndex);
					if (pDel->lpszDispName) delete[] pDel->lpszDispName;
					if (pDel->lpszDispSize) delete[] pDel->lpszDispSize;
					if (pDel->lpszDispType) delete[] pDel->lpszDispType;
					if (pDel->lpszDispTime) delete[] pDel->lpszDispTime;
					delete[] pDel->lpszName; 
					delete[] pDel->lpszPath;					//ADD TODA 
					delete pDel;
					ListView_DeleteItem(m_hWnd, pliinfo[i].nIndex);
					//ADD START TODA
					if (pliinfo[i].nItem == LIST_ITEM_FOLDER)
						g_MainWnd.m_TreeView.SetCurrentFolder(pliinfo[i].szPath);
					//ADD END
				}
			}
			ListView_Arrange(m_hWnd, LVA_DEFAULT);
			LoadFolderReset(m_szCurrentFolder);					//ADD TODA
			
			//DEL START TODA
//			ShowWindow(m_hWnd, SW_SHOW);
//			SetFocus(hwndPrev);
			//DEL END
		}

		delete[] pliinfo;
	}
}
//ADD START TODA
////////////////////////////////////////////////////////////////
BOOL CListView::OnFileCompress() {
	//慖戰傾僀僥儉悢傪庢摼
	int nCount = GetValidAndSelectedCount();
	//僄儔乕帪
	if (nCount <= 0) return FALSE;

	//傾僀僥儉儕僗僩嶌惉
	LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];
	MakeSelectedItemsStrings(pliinfo, nCount);

	//埑弅
	BOOL bRtn = g_MainWnd.m_Compress.OnFileCompress(
						m_szCurrentFolder,
						nCount,
						pliinfo,
						m_Settings.nCompDLL,
						m_Settings.bMoveDir,
						m_Settings.bAutoUnComp,
						m_szCompressFolder);

	//儕僗僩嶍彍
	delete[] pliinfo;

	//埑弅
	if(bRtn) {
		//僣儕乕價儏乕/儕僗僩價儏乕偺峏怴
		LoadFolderItem(m_szCurrentFolder);
		return TRUE;
	}

	return FALSE;
}

////////////////////////////////////////////////////////////////
BOOL CListView::OnFileUnCompress() {
	//慖戰傾僀僥儉悢傪庢摼
	int nCount = GetValidAndSelectedCount();
	//僄儔乕帪
	if (nCount <= 0) return FALSE;

	//傾僀僥儉儕僗僩嶌惉
	LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];
	MakeSelectedItemsStrings(pliinfo, nCount);

	//夝搥
	BOOL bRtn = g_MainWnd.m_Compress.OnFileUnCompress(
						m_szCurrentFolder,
						nCount,
						pliinfo,
						m_Settings.nCompDLL,
						m_Settings.bMoveDir,
						m_Settings.bMakeDir,
						m_Settings.bAutoUnComp,
						m_szCompressFolder);

	//儕僗僩嶍彍
	delete[] pliinfo;

	//夝搥偑偁偭偨応崌
	if(bRtn) {
		//僣儕乕價儏乕/儕僗僩價儏乕偺峏怴
		LoadFolderItem(m_szCurrentFolder);
	}

	return bRtn;
}
//ADD END
////////////////////////////////////////////////////////////////
void CListView::OnFileOpenParam()
{
	int nIndex = GetSelectedItemIndex(0);
	if (nIndex != -1)
	{
		LISTITEMCOMP* plic = GetListItemStruct(nIndex);
		if (plic->nItem == LIST_ITEM_FILE)
		{
#ifdef __POCKET_PC
			BOOL bSetSip = FALSE;
			SIPINFO si;
			memset(&si, 0, sizeof(SIPINFO));
			si.cbSize = sizeof(SIPINFO);
			SipGetInfo(&si);
			if ((si.fdwFlags&SIPF_ON)!=SIPF_ON)
			{
				SipShowIM(SIPF_ON);
				bSetSip = TRUE;
			}
#endif
			DialogBox(g_hInst, (LPCTSTR)IDD_EXECUTE_DLG, g_MainWnd.m_hWnd, (DLGPROC)FileOpenParamDlgProc);
#ifdef __POCKET_PC
			if (bSetSip)
				SipShowIM(SIPF_OFF);
#endif
		}
	}
}

//ADD START TODA
////////////////////////////////////////////////////////////////
HMENU CListView::GetOpenAppSubMenu1() 
{
	return GetSubMenu(GetSubMenu(m_hMenuPopup, 0), 2);
}
////////////////////////////////////////////////////////////////
HMENU CListView::GetOpenAppSubMenu2() 
{
#if defined(__POCKET_PC)
	//HMENU hMenu1 = (HMENU)SendMessage(g_MainWnd.m_CmdBands.m_hWnd, SHCMBM_GETSUBMENU, 0, ID_FILE);
	//HMENU hMenu2 = GetSubMenu(hMenu1,1);

	//return GetSubMenu(GetSubMenu((HMENU)SendMessage(g_MainWnd.m_CmdBands.m_hWnd, SHCMBM_GETMENU, 0, 0), 0), 8);
	return GetSubMenu((HMENU)SendMessage(g_MainWnd.m_CmdBands.m_hWnd, SHCMBM_GETSUBMENU, 0, ID_FILE), 1);//mod by kawa
#else
	return GetSubMenu(GetSubMenu(CommandBar_GetMenu(g_MainWnd.m_CmdBands.m_hMenubar, 0), 0), 8);
#endif
}
////////////////////////////////////////////////////////////////
void CListView::DeleteOpenAppSubMenuSep(HMENU hMenu)
{
	DeleteMenu(hMenu, 6, MF_BYPOSITION);
}
//ADD END

////////////////////////////////////////////////////////////////
void CListView::InitOpenAppMenu()
{
	//MOD TODA START (from GSFinder ver.1.99)
	HMENU hSubMenu1 = GetOpenAppSubMenu1();
	HMENU hSubMenu2

⌨️ 快捷键说明

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