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

📄 listview.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	TCHAR szFolderPath[MAX_PATH];
	TCHAR szFolderName[MAX_PATH];
	BOOL bRet = FALSE;
	DisableUpdateNotify();						//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
	while(!bRet)
	{
		if (nCount==1)
		{
			wsprintf(szFolderPath, _T("%s\\%s"), m_szCurrentFolder, NEW_FOLDER_NAME);
			wsprintf(szFolderName, _T("%s"), NEW_FOLDER_NAME);
		}
		else
		{
			wsprintf(szFolderPath, _T("%s\\%s(%d)"), m_szCurrentFolder, NEW_FOLDER_NAME, nCount);
			wsprintf(szFolderName, _T("%s(%d)"), NEW_FOLDER_NAME, nCount);
		}
		nCount++;
		bRet = CreateDirectory(szFolderPath, NULL);
		if (nCount > 4096)
		{
			MessageBox(g_MainWnd.m_hWnd, IDS_MSG_CANNOTCREATEFOLDER, NULL, MB_OK);
			EnableUpdateNotify();				//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
			return;
		}
	}
	LoadFolderItem(m_szCurrentFolder, TRUE);	//MOD TODA
	LVFINDINFO lvfi;
	lvfi.flags = LVFI_STRING;
	lvfi.psz = szFolderName;
#ifdef __POCKET_PC
	SipShowIM(SIPF_ON);
#endif
	SetFocus(m_hWnd);							//ADD TODA
	ListView_EditLabel(m_hWnd, ListView_FindItem(m_hWnd, -1, &lvfi));
	EnableUpdateNotify();						//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
}
///////////////////////////////////////////////////////////////
BOOL CListView::OnEndLabelEdit(LV_DISPINFO* pdi)
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pdi;

	int nIndex = pDispInfo->item.iItem;
	if (!pDispInfo->item.pszText) return FALSE;

	//僄儔乕僠僃僢僋
	if (wcschr(pDispInfo->item.pszText, _T('\\'))!=NULL || wcschr(pDispInfo->item.pszText, _T('/'))!=NULL || wcschr(pDispInfo->item.pszText, _T(':'))!=NULL || wcschr(pDispInfo->item.pszText, _T(','))!=NULL || wcschr(pDispInfo->item.pszText, _T(';'))!=NULL || wcschr(pDispInfo->item.pszText, _T('*'))!=NULL || wcschr(pDispInfo->item.pszText, _T('?'))!=NULL || wcschr(pDispInfo->item.pszText, _T('<'))!=NULL || wcschr(pDispInfo->item.pszText, _T('>'))!=NULL || wcschr(pDispInfo->item.pszText, _T('|'))!=NULL)
	{
		MessageBox(g_MainWnd.m_hWnd, IDS_MSG_CANNOTUSECHAR, NULL, MB_OK|MB_ICONSTOP);
		SetFocus(m_hWnd);							//ADD TODA
		ListView_EditLabel(m_hWnd, nIndex);
		return FALSE;
	}
	else
	{
		LISTITEMCOMP* plic = GetListItemStruct(nIndex);
		TCHAR szOldName[MAX_PATH];
		TCHAR szNewName[MAX_PATH];
		wcscpy(szOldName,  plic->lpszName);
		wcscpy(szNewName,  pDispInfo->item.pszText);

		if (plic->nItem == LIST_ITEM_UPPER)
			return FALSE;

		//奼挘巕傪昞帵偟側偄愝掕偱偼奼挘巕傪偮偗傞
		if (m_Settings.bNotShowExt && plic->nItem == LIST_ITEM_FILE)
			SetExtFromFileName(szNewName, szOldName);
		if (wcslen(pDispInfo->item.pszText))
		{
			TCHAR szNewPath[MAX_PATH];
			TCHAR szOldPath[MAX_PATH];

			//MOD START TODA
//			wsprintf(szOldPath, _T("%s\\%s"), m_szCurrentFolder, szOldName);
//			wsprintf(szNewPath, _T("%s\\%s"), m_szCurrentFolder, szNewName);
			wsprintf(szOldPath, _T("%s\\%s"), plic->lpszPath, szOldName);
			wsprintf(szNewPath, _T("%s\\%s"), plic->lpszPath, szNewName);
			//MOD END
			DisableUpdateNotify();					//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
			if (MoveFile(szOldPath, szNewPath)!=0)
			{
				EnableUpdateNotify();				//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)

				//峔憿懱偺曄峏
				delete[] plic->lpszName;
				if (plic->lpszDispName) delete[] plic->lpszDispName;
				if (plic->lpszDispSize) delete[] plic->lpszDispSize;
				if (plic->lpszDispType) delete[] plic->lpszDispType;
				if (plic->lpszDispTime) delete[] plic->lpszDispTime;
				plic->lpszDispName = NULL;
				plic->lpszDispSize = NULL;
				plic->lpszDispType = NULL;
				plic->lpszDispTime = NULL;
				plic->lpszName = new TCHAR[wcslen(szNewName)+1];
				wcscpy(plic->lpszName, szNewName);
				if (plic->nItem != LIST_ITEM_FOLDER)
					plic->nIcon = -1;
				
				//ADD START TODA (専嶕寢壥僼僅儖僟帪)
				if(0 == wcscmp(m_szCurrentFolder, SEARCH_FOLDER_NAME))
					EditSearch(plic->lpszPath, szOldName, plic->lpszPath, szNewName);
				//ADD END

				//DEL START TODA (崅懍壔偺堊)
//				//昞帵偺儕僼儗僢僔儏
//				ShowWindow(m_hWnd, SW_HIDE);
//				ShowWindow(m_hWnd, SW_SHOW);
				//DEL END
				//ADD START TODA (僣儕乕價儏乕偺峏怴張棟捛壛)
				g_MainWnd.m_TreeView.SetCurrentFolder(m_szCurrentFolder);
				//ADD END
			}
			else
			{
				MessageBox(g_MainWnd.m_hWnd, IDS_MSG_RENAMEERROR, NULL, MB_OK|MB_ICONSTOP);//幐攕
				EnableUpdateNotify();				//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
				return FALSE;
			}

		}
		else
		{
			//幐攕
			MessageBox(g_MainWnd.m_hWnd, IDS_MSG_INPUTNAME, NULL, MB_OK|MB_ICONSTOP);
			SetFocus(m_hWnd);						//ADD TODA
			ListView_EditLabel(m_hWnd, nIndex);
			return FALSE;
		}
	}
	return TRUE;
}
///////////////////////////////////////////////////////////////
void CListView::OnFileRename()
{
	int nIndex = GetSelectedItemIndex(0);
	if (nIndex != -1)
	{
#ifdef __POCKET_PC
		SipShowIM(SIPF_ON);
#endif
		SetFocus(m_hWnd);							//ADD TODA
		ListView_EditLabel(m_hWnd, nIndex);
	}
}
////////////////////////////////////////////////////////////////
int CListView::GetSelectedItemIndex(int nStart)
{
//MOD START TODA (崅懍壔偺堊)
#if 0
	int nItemCount = ListView_GetItemCount(m_hWnd);
	for (int i= nStart; i<nItemCount; i++)
	{
		if (ListView_GetItemState(m_hWnd, i, LVIS_SELECTED)==LVIS_SELECTED)
			return i;
	}
	return -1;
#endif
	return ListView_GetNextItem(m_hWnd, (nStart-1), LVNI_SELECTED);
//MOD END
}

////////////////////////////////////////////////////////////////
void CListView::OnEditCopyFileName() 
{
	int nIndex = GetSelectedItemIndex(0);
	if (nIndex != -1)
	{
		LISTITEMCOMP *plic = GetListItemStruct(nIndex);
		if (OpenClipboard(g_MainWnd.m_hWnd))
		{
			EmptyClipboard();
			HANDLE hHandle = LocalAlloc(LMEM_FIXED , sizeof(TCHAR)*(wcslen(plic->lpszName)+1));
			TCHAR* lpsz = (TCHAR*)LocalLock(hHandle);
			wcscpy(lpsz, plic->lpszName);
			LocalUnlock(hHandle);
			SetClipboardData(CF_UNICODETEXT, hHandle);
			CloseClipboard();
		}
	}
}

////////////////////////////////////////////////////////////////
LISTITEMCOMP* CListView::GetListItemStruct(int nIndex)
{
	LVITEM li;
	li.iItem = nIndex;
	li.iSubItem = 0;
	li.mask = LVIF_PARAM;
	ListView_GetItem(m_hWnd, &li);
	return (LISTITEMCOMP*)li.lParam;
}

////////////////////////////////////////////////////////////////
void CListView::OnEditCopyFilePath() 
{
	int nIndex = GetSelectedItemIndex(0);
	if (nIndex != -1)
	{
		LISTITEMCOMP *plic = GetListItemStruct(nIndex);

		TCHAR szPath[MAX_PATH];
		//MOD START TODA
//		wsprintf(szPath, _T("%s\\%s"), m_szCurrentFolder, plic->lpszName);
		wsprintf(szPath, _T("%s\\%s"), plic->lpszPath, plic->lpszName);
		//MOD END
		if (OpenClipboard(g_MainWnd.m_hWnd))
		{
			EmptyClipboard();
			HANDLE hHandle = LocalAlloc(LMEM_FIXED , sizeof(TCHAR)*(wcslen(szPath)+1));
			TCHAR* lpsz = (TCHAR*)LocalLock(hHandle);
			wcscpy(lpsz, szPath);
			LocalUnlock(hHandle);
			SetClipboardData(CF_UNICODETEXT , hHandle);
			CloseClipboard();
		}
	}
}

////////////////////////////////////////////////////////////////
void CListView::OnSelEndOK()
{
	TCHAR szTemp[MAX_PATH];
	SendMessage(g_MainWnd.m_CmdBands.m_hComboBox, CB_GETLBTEXT,
		SendMessage(g_MainWnd.m_CmdBands.m_hComboBox, CB_GETCURSEL, 0, 0), (LPARAM)szTemp);

	SetFocus(m_hWnd);

	//ADD START TODA(OnViewUpdate()屇傃弌偟捛壛)
	//傾僪儗僗僶乕偺僐儅儞僪幚峴
	OnViewUpdate(szTemp);
	//ADD END

//DEL START TODA (OnViewUpdate()屇傃弌偟偵偰廫暘側堊)
//	if (wcscmp(szTemp, GetRootName())==0 || wcscmp(szTemp, _T("\\"))==0 || wcslen(szTemp)==0)
//	{
//		LoadFolderItem(_T(""));
//		SendMessage(g_MainWnd.m_CmdBands.m_hComboBox, CB_GETLBTEXT, SendMessage(g_MainWnd.m_CmdBands.m_hComboBox, CB_GETCURSEL, 0, 0), (LPARAM)szTemp);
//	}
//	else
//	{
//		//懚嵼偡傞偐偺妋擣
//		DWORD dwAttr = GetFileAttributes(szTemp);
//		if (dwAttr != 0xFFFFFFFF)
//		{
//			if ((dwAttr&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY)
//				LoadFolderItem(szTemp);
//			else
//			{
//				//僼傽僀儖傪奐偔
//				SHELLEXECUTEINFO sei;
//				sei.cbSize = sizeof(SHELLEXECUTEINFO);
//				sei.fMask = 0;
//				sei.hwnd = g_MainWnd.m_hWnd;
//				sei.lpVerb = _T("open");
//				sei.lpFile = szTemp;
//				sei.lpParameters = NULL;
//				sei.lpDirectory = NULL;
//				sei.nShow = SW_SHOW;
//				sei.hInstApp = g_hInst;
//				ShellExecuteEx(&sei);
//			}
//		}
//		else
//			MessageBox(g_MainWnd.m_hWnd, IDS_MSG_NOTFOUND_PATH, NULL, MB_OK|MB_ICONSTOP);
//	}
//DEL END
}
//MOD START TODA (from GSFinder ver.1.99)
////////////////////////////////////////////////////////////////
void CListView::OnFileCreateShortcut()
{
	HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));

	//僔儑乕僩僇僢僩偺嶌惉
	int nIndex = GetSelectedItemIndex(0);
	while(nIndex != -1)
	{
		LISTITEMCOMP* plic = GetListItemStruct(nIndex);
		CreateShortcut(m_szCurrentFolder, plic->lpszPath, plic->lpszName); //MOD TODA
		nIndex = GetSelectedItemIndex(nIndex+1);
	}
	LoadFolderItem(m_szCurrentFolder, FALSE);	//MOD TODA

	SetCursor(hCursor);
}
////////////////////////////////////////////////////////////////
void CListView::OnFileShortcutFolder(LPTSTR lpszPath)	//MOD TODA (堷悢捛壛)
{
	TCHAR szFolder[MAX_PATH];
	BOOL bRefresh = FALSE;						//ADD TODA
	int Rtn = IDOK;								//ADD TODA
	//MOD START TODA (僷僗巜掕懳墳)
	if(lpszPath)
		wcscpy(szFolder, lpszPath);
	else
	{
		wcscpy(szFolder, m_szCurrentFolder);
		CFolderDlg fd;
		Rtn = fd.ShowFolderDlg(IDS_TITLE_SHORTCUT, szFolder, MAX_PATH);
	}
	if(Rtn==IDOK)
	//MOD END
	{
		//ADD TODA
		if(wcsicmp(szFolder, m_szCurrentFolder) == 0)
			bRefresh = TRUE;

		//ADD END
		HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));

		//僔儑乕僩僇僢僩偺嶌惉
		int nIndex = GetSelectedItemIndex(0);
		while(nIndex != -1)
		{
			LISTITEMCOMP* plic = GetListItemStruct(nIndex);
			CreateShortcut(szFolder, plic->lpszPath, plic->lpszName);	//MOD END
			nIndex = GetSelectedItemIndex(nIndex + 1);
		}
		SetCursor(hCursor);
	}

	//ADD START TODA
	if(bRefresh)
		LoadFolderItem(m_szCurrentFolder, FALSE);
	//ADD END
}
//MOD END
////////////////////////////////////////////////////////////////
void CListView::OnViewFolder()
{
	TCHAR szPath[MAX_PATH];
	wcscpy(szPath, m_szCurrentFolder);
	CFolderDlg fd;
	if (fd.ShowFolderDlg(IDS_TITLE_FOLDERVIEW, szPath, MAX_PATH)==IDOK)
	{
		LoadFolderItem(szPath);
	}
	else
	{
		if (fd.m_bRefresh)
			LoadFolderItem(m_szCurrentFolder);
	}
}
////////////////////////////////////////////////////////////////
void CListView::OnFileProperty()
{
	DisableUpdateNotify();					//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
	int nCount = GetValidAndSelectedCount();
	if (nCount > 0)
	{
		LISTITEMINFO* pliinfo = new LISTITEMINFO[nCount];

		MakeSelectedItemsStrings(pliinfo, nCount);

		CFileProperty fp;

		//MOD START TODA
//		if (fp.ShowFileProperty(m_szCurrentFolder, pliinfo, nCount))
//			LoadFolderItem(m_szCurrentFolder);
		if (fp.ShowFileProperty(pliinfo->szPath, pliinfo, nCount))
			LoadFolderItem(pliinfo->szPath);
		//MOD END

		delete[] pliinfo;
	}
	else if (wcslen(m_szCurrentFolder) && ListView_GetSelectedCount(m_hWnd) == 0) {
		LISTITEMINFO liinfo;
		TCHAR szParent[MAX_PATH];
		wcscpy(szParent, m_szCurrentFolder);
		LPTSTR psz = wcsrchr(szParent, _T('\\'));
		if (psz) *psz = _T('\0');
		//MOD START TODA (from GSFinder ver.1.99)
//		liinfo.nItem = LIST_ITEM_FILE;
		liinfo.nItem = LIST_ITEM_FOLDER;
		//MOD END
		wcscpy(liinfo.szName, ++psz);

		CFileProperty fp;
		if (fp.ShowFileProperty(szParent, &liinfo, 1)) {
			wsprintf(m_szCurrentFolder, _T("%s\\%s"), szParent, fp.m_szNewName);
			LoadFolderItem(m_szCurrentFolder);
		}
	}
	//ADD START TODA (儖乕僩帪偺僷僗愝掕 - advice by Y.Nagamidori)
	else
	{
		LISTITEMINFO liinfo;
		liinfo.nItem = LIST_ITEM_FOLDER;
		liinfo.bDone = FALSE;
		liinfo.nIndex = 1;
		wcscpy(liinfo.szPath, _T(""));
		wcscpy(liinfo.szName, GetRootName());

		CFileProperty fp;
		if (fp.ShowFileProperty(liinfo.szPath, &liinfo, 1)) {
			LoadFolderItem(liinfo.szPath);
		}
	}
	//ADD END
	EnableUpdateNotify();					//ADD TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
}

////////////////////////////////////////////////////////////////
void CListView::MakeSelectedItemsStrings(LISTITEMINFO* lpListItemComp, int nCount)
{
	int i = 0;
	int nIndex = GetSelectedItemIndex(0);
	while (nIndex != -1)
	{
		LISTITEMCOMP* plic = GetListItemStruct(nIndex);
		if (plic->nItem == LIST_ITEM_UPPER) 
		{
			nIndex = GetSelectedItemIndex(++nIndex);	
			continue;
		}

		wcscpy(lpListItemComp[i].szPath, plic->lpszPath);	//ADD TODA
		wcscpy(lpListItemComp[i].szName, plic->lpszName);
		lpListItemComp[i].nItem = plic->nItem;
		lpListItemComp[i].bDone = FALSE;
		lpListItemComp[i].nIndex = nIndex;
		i++;

		nIndex = GetSelectedItemIndex(++nIndex);
	}
}
////////////////////////////////////////////////////////////////
void CListView::OnFileIRSend()
{
	int nIndex = GetSelectedItemIndex(0);
	if (nIndex != -1)
	{
		LISTITEMCOMP* plic = GetListItemStruct(nIndex);
		if (plic->nItem == LIST_ITEM_FILE)
		{
			TCHAR szPath[MAX_PATH];
			//MOD START TODA
//			wsprintf(szPath, _T("%s\\%s"), m_szCurrentFolder, plic->lpszName);
			wsprintf(szPath, _T("%s\\%s"), plic->lpszPath, plic->lpszName);
			//MOD END

			//MOD START TODA (from GSFinder ver.1.99)
			SHELLEXECUTEINFO sei;
			sei.cbSize = sizeof(SHELLEXECUTEINFO);
			sei.fMask = 0;
			sei.hwnd = g_MainWnd.m_hWnd;
			sei.lpVerb = _T("open");
			sei.lpParameters = szPath;
			sei.lpDirectory = g_MainWnd.m_szWindowsPath;
			sei.nShow = SW_SHOW;
			sei.hInstApp = g_hInst;

			if (GetFileAttributes(_T("\\Windows\\beam.exe")) != 0xFFFFFFFF)

⌨️ 快捷键说明

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