📄 listview.cpp
字号:
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 + -