📄 listview.cpp
字号:
///////////////////////////////////////////////////////////////
void CListView::AddUpper()
{
// 堦偮忋偺僼僅儖僟傊傪捛壛
LISTITEMCOMP *plic = new LISTITEMCOMP;
memset(plic, 0, sizeof(LISTITEMCOMP));
plic->nItem = LIST_ITEM_UPPER;
int nLen = wcslen(IDS_UPPER) + 1;
plic->lpszName = new TCHAR[nLen];
*plic->lpszName = 0;
wcscpy(plic->lpszName, IDS_UPPER);
LVITEM li;
li.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
li.iItem = 0;
li.iSubItem = 0;
li.iImage = I_IMAGECALLBACK;
li.lParam = (DWORD)plic;
li.pszText = IDS_UPPER;
ListView_InsertItem(m_hWnd, &li);
m_dwUpperParam = li.lParam;
}
//ADD START TODA (AddFolderItem()傛傝張棟堏摦)
///////////////////////////////////////////////////////////////
void CListView::AddFolderItemSub(LPCTSTR lpszPath, LPCTSTR lpszName, DWORD dwAttr, FILETIME ft, DWORD dwSize, UINT* lpAllSize, BOOL bSelect)
{
if (FILE_ATTRIBUTE_DIRECTORY == (dwAttr & FILE_ATTRIBUTE_DIRECTORY))
{
//塀偟僼傽僀儖僠僃僢僋
if ((dwAttr & FILE_ATTRIBUTE_HIDDEN) && m_Settings.bHideHidden)
return;
// 偛傒敔僠僃僢僋
if (wcsicmp(lpszName, _T("Recycled")) == 0)
return;
//僼僅儖僟
LISTITEMCOMP *plic = new LISTITEMCOMP;
plic->nItem = LIST_ITEM_FOLDER;
int nLen = wcslen(lpszName) + 1;
plic->lpszName = new TCHAR[nLen];
*plic->lpszName = NULL;
wcscpy(plic->lpszName, lpszName);
//ADD START TODA
nLen = wcslen(lpszPath) + 1;
plic->lpszPath = new TCHAR[nLen];
*plic->lpszPath = NULL;
wcscpy(plic->lpszPath, lpszPath);
//ADD END
plic->dwSize = 0;
plic->ft = ft;
plic->dwAttr = dwAttr;
LVITEM li;
li.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
li.iItem = 0;
li.iSubItem = 0;
li.iImage = I_IMAGECALLBACK;
li.lParam = (DWORD)plic;
li.pszText = LPSTR_TEXTCALLBACK;
int nItem = ListView_InsertItem(m_hWnd, &li);
if(bSelect) {
ListView_SetItemState(m_hWnd, nItem, LVIS_SELECTED, LVIS_SELECTED);
ListView_SetItemState(m_hWnd, nItem, LVIS_FOCUSED, LVIS_FOCUSED);
}
ListView_SetItemText(m_hWnd, 0, 2, LPSTR_TEXTCALLBACK);
}
else if (FILE_ATTRIBUTE_DIRECTORY != (dwAttr & FILE_ATTRIBUTE_DIRECTORY))
{
//塀偟僼傽僀儖僠僃僢僋
if ((dwAttr & FILE_ATTRIBUTE_HIDDEN) && m_Settings.bHideHidden)
return;
//僔僗僥儉僼傽僀儖僠僃僢僋
if ((dwAttr & FILE_ATTRIBUTE_SYSTEM) && m_Settings.bHideSystem)
return;
//ROM僠僃僢僋
if ((dwAttr & FILE_ATTRIBUTE_INROM) && m_Settings.bHideROM)
return;
// 僼傽僀儖
LISTITEMCOMP *plic = new LISTITEMCOMP;
plic->nItem = LIST_ITEM_FILE;
int nLen = wcslen(lpszName) + 1;
plic->lpszName = new TCHAR[nLen];
*plic->lpszName = NULL;
wcscpy(plic->lpszName, lpszName);
//ADD START TODA
nLen = wcslen(lpszPath) + 1;
plic->lpszPath = new TCHAR[nLen];
*plic->lpszPath = NULL;
wcscpy(plic->lpszPath, lpszPath);
//ADD END
plic->dwSize = dwSize;
plic->ft = ft;
plic->dwAttr = dwAttr;
FileTimeToLocalFileTime(&plic->ft, &plic->ft);
LVITEM li;
li.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
li.iItem = 0;
li.iSubItem = 0;
li.iImage = I_IMAGECALLBACK;
li.lParam = (DWORD)plic;
li.pszText = LPSTR_TEXTCALLBACK;
int nItem = ListView_InsertItem(m_hWnd, &li);
if(bSelect) {
ListView_SetItemState(m_hWnd, nItem, LVIS_SELECTED, LVIS_SELECTED);
ListView_SetItemState(m_hWnd, nItem, LVIS_FOCUSED, LVIS_FOCUSED);
}
ListView_SetItemText(m_hWnd, 0, 1, LPSTR_TEXTCALLBACK);
ListView_SetItemText(m_hWnd, 0, 2, LPSTR_TEXTCALLBACK);
ListView_SetItemText(m_hWnd, 0, 3, LPSTR_TEXTCALLBACK);
*lpAllSize += plic->dwSize;
}
}
//ADD END
///////////////////////////////////////////////////////////////
void CListView::AddFolderItem(WIN32_FIND_DATA *finddata, LPCTSTR lpszPath, UINT* lpAllSize, BOOL bSelect)
{
//MDD START TODA (AddFolderItemSub()偺屇傃弌偟偵曄峏)
if(finddata->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
AddFolderItemSub(lpszPath,
finddata->cFileName,
finddata->dwFileAttributes,
finddata->ftCreationTime,
0,
lpAllSize,
bSelect);
}
else
{
AddFolderItemSub(lpszPath,
finddata->cFileName,
finddata->dwFileAttributes,
finddata->ftLastWriteTime,
finddata->nFileSizeLow,
lpAllSize,
bSelect);
}
//MDD END
}
//ADD START TODA (僼傽僀儖僆乕僾儞張棟嫟捠壔)
///////////////////////////////////////////////////////////////
void CListView::ComFileOpen(LPCTSTR lpszPath)
{
//奼挘巕偺傒傪僐僺乕
LPTSTR lpszExt = wcsrchr(lpszPath, _T('.'));
//嵟廔揑偵僆乕僾儞偡傞僷僗
LPTSTR lpszOpen = (LPTSTR)lpszPath;
LPTSTR lpszParam = NULL; //ADD TODA
//奼挘巕僠僃僢僋
if (wcsicmp(lpszExt, _T(".LNK"))==0)
{
//儕儞僋僼傽僀儖偲擣幆
TCHAR szPath[MAX_PATH];
if (SHGetShortcutTarget(lpszPath, szPath, MAX_PATH))
{
LPTSTR lpszStart = szPath;
if(lpszStart[0] == _T('\"'))
{
LPTSTR lpszEnd = wcschr(++lpszStart, _T('\"'));
if(lpszEnd)
{
*lpszEnd=0x00;
if(*(++lpszEnd)) lpszParam=lpszEnd;
}
}
else
{
LPTSTR lpszEnd = wcschr(lpszStart, _T(' '));
if(lpszEnd)
{
*lpszEnd=0x00;
if(*(++lpszEnd)) lpszParam=lpszEnd;
}
}
//僷儔儊乕僞抣敾掕(嬻敀嶍彍)
while(lpszParam)
{
if(!(*lpszParam))
break;
if(*lpszParam == _T(' '))
lpszParam++;
else
break;
} //End of while
HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); //ADD TODA (from GSFinder ver.1.99)
DWORD dwAttr = GetFileAttributes(lpszStart);
SetCursor(hCursor); //ADD TODA (from GSFinder ver.1.99)
//僨傿儗僋僩儕偺応崌
if (FILE_ATTRIBUTE_DIRECTORY == (dwAttr & FILE_ATTRIBUTE_DIRECTORY) && dwAttr != 0xFFFFFFFF)
{
LoadFolderItem(lpszStart);
return;
}
//僷僗傪庢摼偟偨儕儞僋愭偵愝掕
lpszOpen = lpszStart;
//奼挘巕偺傒傪嵞僐僺乕
LPTSTR lpszExt = wcsrchr(lpszStart, _T('.'));
}
}
//埑弅僼傽僀儖偐傪敾掕
if((m_Settings.bDblClick) &&
((g_MainWnd.m_Compress.IsCompress(COMPDLL_MODE_LHA) && wcsicmp(lpszExt, _T(".LZH"))==0) ||
(g_MainWnd.m_Compress.IsCompress(COMPDLL_MODE_ZIP) && wcsicmp(lpszExt, _T(".ZIP"))==0)))
{
//僼傽僀儖夝搥偺幚峴
OnFileUnCompress();
return;
}
//奐偔
SHELLEXECUTEINFO sei;
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = 0;
sei.hwnd = g_MainWnd.m_hWnd;
sei.lpVerb = _T("open");
sei.lpFile = lpszOpen;
sei.lpParameters = lpszParam;
sei.lpDirectory = NULL;
sei.nShow = SW_SHOW;
sei.hInstApp = g_hInst;
ShellExecuteEx(&sei);
}
//ADD END
///////////////////////////////////////////////////////////////
//昞帵宍幃偺曄峏
void CListView::OnChangeListStyle(UINT nCmdID)
{
// ShowWindow(m_hWnd, SW_HIDE); //DEL TODA
//m_Settings.dwListExStyle = 0; //del by kawa
//MOD START TODA (from GSFinder ver.1.99)
DWORD dwStyle = 0;
switch (nCmdID)
{
case ID_VIEW_LARGEICON:
m_Settings.dwListExStyle = 0; //add by kawa
m_Settings.dwListStyle = LVS_ICON;
break;
case ID_VIEW_SMALLICON:
m_Settings.dwListExStyle = 0; //add by kawa
m_Settings.dwListStyle = LVS_SMALLICON;
break;
case ID_VIEW_LIST:
m_Settings.dwListExStyle = 0; //add by kawa
m_Settings.dwListStyle = LVS_LIST;
break;
case ID_VIEW_REPORT:
m_Settings.dwListExStyle = 0; //add by kawa
m_Settings.dwListStyle = LVS_REPORT;
break;
//ADD START TODA
case ID_VIEW_REPORTLINE:
m_Settings.dwListExStyle = LVS_EX_FULLROWSELECT;
m_Settings.dwListStyle = LVS_REPORT;
break;
default:
//側偵傕偟側偄(愝掕偺傑傑)
break;
//ADD END
}
dwStyle = DEF_LIST_STYLE | m_Settings.dwListStyle;
//MOD END
#ifdef __POCKET_PC
if (m_Settings.dwListStyle == LVS_REPORT && m_Settings.bHideHeader)
dwStyle |= LVS_NOCOLUMNHEADER;
#endif
if ((m_Settings.dwListStyle&LVS_TYPEMASK)==LVS_ICON)
m_pFileImageList = &m_FileImageListLarge;
else
m_pFileImageList = &m_FileImageListSmall;
SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);
g_MainWnd.m_CmdBands.SetCheckListStyle(m_Settings.dwListStyle, m_Settings.dwListExStyle); //MOD TODA
//MOD START TODA (from GSFinder ver.1.99)
if (m_Settings.dwListStyle == LVS_REPORT && m_Settings.dwListExStyle)
ListView_SetExtendedListViewStyle(m_hWnd, ListView_GetExtendedListViewStyle(m_hWnd) | DEF_LIST_EXSTYLE|m_Settings.dwListExStyle);
//MOD END
else
ListView_SetExtendedListViewStyle(m_hWnd, 0);
if (m_Settings.dwListStyle == LVS_ICON)
ListView_SetIconSpacing(m_hWnd, 72, 72);
ListView_Arrange(m_hWnd, LVA_DEFAULT);
// ShowWindow(m_hWnd, SW_SHOW); //DEL TODA
// UpdateWindow(m_hWnd); //DEL TODA
// SetFocus(m_hWnd); //DEL TODA
//夋柺峏怴
InvalidateRect(g_MainWnd.m_hWnd, NULL, FALSE);
}
///////////////////////////////////////////////////////////////
//儕僗僩偺暲傋懼偊
void CListView::OnChangeSort(UINT nCmdID)
{
switch (nCmdID)
{
case ID_VIEW_SORT_NAME: m_Settings.nSort = LIST_SORT_NAME; break;
case ID_VIEW_SORT_EXT: m_Settings.nSort = LIST_SORT_EXT; break;
case ID_VIEW_SORT_SIZE: m_Settings.nSort = LIST_SORT_SIZE; break;
case ID_VIEW_SORT_TIME: m_Settings.nSort = LIST_SORT_TIME; break;
case ID_VIEW_SORT_NOT_RAISE: m_Settings.bSortRaise = !m_Settings.bSortRaise; break;
}
SortList();
g_MainWnd.m_CmdBands.SetCheckSort(m_Settings.nSort, m_Settings.bSortRaise);
}
///////////////////////////////////////////////////////////////
void CListView::OnViewUpdate(LPCTSTR lpszPath) //MOD TODA (僷儔儊乕僞捛壛)
{
TCHAR szTemp[MAX_PATH];
//MOD START TODA (僷僗巜掕帪偺張棟捛壛)
if(lpszPath)
wcscpy(szTemp, lpszPath);
else
GetWindowText(g_MainWnd.m_CmdBands.m_hComboBox, szTemp, MAX_PATH);
//MOD END
if (wcscmp(szTemp, GetRootName()) == 0 || wcscmp(szTemp, _T("\\")) == 0 ||
wcscmp(szTemp, _T("\\\\")) == 0 || wcscmp(szTemp, _T("/")) == 0 || wcslen(szTemp) == 0)
LoadFolderItem(_T(""));
else
{
//ADD START TODA
//壖憐僷僗偺応崌僠僃僢僋傪偟側偄
if(0 == wcscmp(SEARCH_FOLDER_NAME, szTemp))
{
LoadFolderItem(szTemp);
return;
}
//ADD END
//懚嵼偡傞偐偺妋擣
HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); //ADD TODA (from GSFinder ver.1.99)
DWORD dwAttr = GetFileAttributes(szTemp);
SetCursor(hCursor); //ADD TODA (from GSFinder ver.1.99)
if (dwAttr != 0xFFFFFFFF)
{
if (FILE_ATTRIBUTE_DIRECTORY == (dwAttr & FILE_ATTRIBUTE_DIRECTORY))
LoadFolderItem(szTemp);
else
{
//ADD START TODA (僼傽僀儖僆乕僾儞嫟捠張棟屇傃弌偟)
ComFileOpen(szTemp);
//ADD END
//DEL START TODA (僼傽僀儖僆乕僾儞嫟捠張棟屇傃弌偟偵曄峏)
// //僼傽僀儖傪奐偔
// 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);
//DEL END
}
}
else
MessageBox(g_MainWnd.m_hWnd, IDS_MSG_NOTFOUND_PATH, NULL, MB_OK|MB_ICONSTOP);
}
}
///////////////////////////////////////////////////////////////
void CListView::OnViewUpFolder()
{
// TCHAR szPath[MAX_PATH] = _T(""); //DEL TODA (from GSFinder ver.1.99)
if (wcscmp(m_szCurrentFolder, _T(""))!=0)
{
LPTSTR lpszTemp = wcsrchr(m_szCurrentFolder, _T('\\'));
if (lpszTemp)
{
*lpszTemp = NULL;
if (wcscmp(m_szCurrentFolder, _T("\\")) == 0)
*m_szCurrentFolder = NULL;
LoadFolderItem(m_szCurrentFolder);
}
else
LoadFolderItem(_T(""));
}
}
///////////////////////////////////////////////////////////////
void CListView::OnFileOpen()
{
int nIndex = GetSelectedItemIndex(0);
OnFileOpen(nIndex);
}
///////////////////////////////////////////////////////////////
void CListView::OnFileOpen(int nIndex)
{
if (nIndex != -1)
{
LISTITEMCOMP *plic = GetListItemStruct(nIndex);
if (plic->nItem == LIST_ITEM_FOLDER)
{
//僼僅儖僟傪奐偔
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
LoadFolderItem(szPath);
}
else if (plic->nItem == LIST_ITEM_FILE)
{
//僼傽僀儖傪奐偔
TCHAR szPath[MAX_PATH];
//MOD START TODA (僼傽僀儖僆乕僾儞嫟捠張棟屇傃弌偟)
wsprintf(szPath, _T("%s\\%s"), plic->lpszPath, plic->lpszName);
ComFileOpen(szPath);
//MOD END
}
else if (plic->nItem == LIST_ITEM_UPPER)
OnViewUpFolder();
}
}
///////////////////////////////////////////////////////////////
void CListView::OnItemChanged() //MOD TODA (堷悢嶍彍)
{
g_MainWnd.m_CmdBands.SetEnableItemSelected();
}
///////////////////////////////////////////////////////////////
void CListView::OnFileCreateFolder()
{
int nCount = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -