📄 listview.cpp
字号:
}
}
if(pup) delete pup;
//m_szCurrentFolder
dwType = REG_SZ;
dwDataSize = sizeof(bString);
if (RegQueryValueEx(hKey, _T("LastFolder"), 0, &dwType, bString, &dwDataSize) == ERROR_SUCCESS)
memcpy(&m_szCurrentFolder, bString, dwDataSize);
//m_szCompressFolder
dwType = REG_SZ;
dwDataSize = sizeof(bString);
if (RegQueryValueEx(hKey, _T("CompressFolder"), 0, &dwType, bString, &dwDataSize) == ERROR_SUCCESS)
memcpy(&m_szCompressFolder, bString, dwDataSize);
//m_bTimeStump
dwType = REG_BINARY;
lpData = new BYTE[sizeof(m_bTimeStump)];
dwDataSize = sizeof(m_bTimeStump);
if (RegQueryValueEx(hKey, _T("TimeStump"), 0, &dwType, lpData, &dwDataSize) == ERROR_SUCCESS)
memcpy(&m_bTimeStump, lpData, dwDataSize);
delete[] lpData;
//m_bHideFolder
dwType = REG_BINARY;
lpData = new BYTE[sizeof(m_bHideFolder)];
dwDataSize = sizeof(m_bHideFolder);
if (RegQueryValueEx(hKey, _T("HideFolder"), 0, &dwType, lpData, &dwDataSize) == ERROR_SUCCESS)
memcpy(&m_bHideFolder, lpData, dwDataSize);
delete[] lpData;
//m_bNoExtShortcut
dwType = REG_BINARY;
lpData = new BYTE[sizeof(m_bNoExtShortcut)];
dwDataSize = sizeof(m_bNoExtShortcut);
if (RegQueryValueEx(hKey, _T("NoExtShortcut"), 0, &dwType, lpData, &dwDataSize) == ERROR_SUCCESS)
memcpy(&m_bNoExtShortcut, lpData, dwDataSize);
delete[] lpData;
RegCloseKey(hKey);
}
}
///////////////////////////////////////////////////////////////
void CListView::SaveSettings()
{
//曐懚慜偵僇儔儉僒僀僘傪庢摼
if (m_Settings.dwListStyle==LVS_REPORT)
{
m_Settings.nNameColumnSize = ListView_GetColumnWidth(m_hWnd, 0);
m_Settings.nSizeColumnSize = ListView_GetColumnWidth(m_hWnd, 1);
m_Settings.nTypeColumnSize = ListView_GetColumnWidth(m_hWnd, 2);
m_Settings.nTimeColumnSize = ListView_GetColumnWidth(m_hWnd, 3);
}
HKEY hKey = 0;
DWORD dwDisposition;
if (RegCreateKeyEx(HKEY_CURRENT_USER, REG_KEY_SETTINGS, 0,
_T(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition)==ERROR_SUCCESS)
{
//m_Settings
RegSetValueEx(hKey, _T("ListView"), 0, REG_BINARY,
(LPBYTE)&m_Settings, sizeof(m_Settings));
//m_ImageListSettings
RegSetValueEx(hKey, _T("FileImageList"), 0, REG_BINARY,
(LPBYTE)&m_ImageListSettings, sizeof(m_ImageListSettings));
//m_nOpenPthInfoCount
RegSetValueEx(hKey, _T("OpenPthInfoCount"), 0, REG_BINARY,
(LPBYTE)&m_nOpenPthInfoCount, sizeof(m_nOpenPthInfoCount));
for(int i=0; i<m_nOpenPthInfoCount; i++)
{
OPENAPPINFO* poa= m_lpOpenPthInfo[i];
TCHAR szKey[16];
wsprintf(szKey, _T("OpenPthInfo%d"), i);
RegSetValueEx(hKey, szKey, 0, REG_SZ,
(LPBYTE)poa->lpszPath, ((wcslen(poa->lpszPath)+1) * sizeof(TCHAR)));
} //End of for
//m_szCurrentFolder[MAX_PATH];
RegSetValueEx(hKey, _T("LastFolder"), 0, REG_SZ,
(LPBYTE)m_szCurrentFolder, ((wcslen(m_szCurrentFolder)+1) * sizeof(TCHAR)));
//m_szCompressFolder[MAX_PATH];
RegSetValueEx(hKey, _T("CompressFolder"), 0, REG_SZ,
(LPBYTE)m_szCompressFolder, ((wcslen(m_szCompressFolder)+1) * sizeof(TCHAR)));
//m_bTimeStump
RegSetValueEx(hKey, _T("TimeStump"), 0, REG_BINARY,
(LPBYTE)&m_bTimeStump, sizeof(m_bTimeStump));
//m_bHideFolder
RegSetValueEx(hKey, _T("HideFolder"), 0, REG_BINARY,
(LPBYTE)&m_bHideFolder, sizeof(m_bHideFolder));
//m_bNoExtShortcut
RegSetValueEx(hKey, _T("NoExtShortcut"), 0, REG_BINARY,
(LPBYTE)&m_bNoExtShortcut, sizeof(m_bNoExtShortcut));
RegCloseKey(hKey);
}
}
//ADD START TODA
///////////////////////////////////////////////////////////////
void CListView::MainWindowReset(LPCTSTR lpszPath, int nAllSize)
{
TCHAR szTemp[MAX_PATH];
//僇儗儞僩僼僅儖僟峏怴
wcscpy(m_szCurrentFolder, lpszPath);
//傾僪儗僗僶乕傊僷僗愝掕
g_MainWnd.m_CmdBands.SetFolderName(lpszPath);
//傾僀僥儉悢丄僒僀僘傪昞帵
if (g_MainWnd.m_CmdBands.m_Settings.bShowAddressBar)
{
//傾僪儗僗僶乕昞帵帪
TCHAR szItemCount[64];
TCHAR szAllSize[64];
wsprintf(szTemp, _T("%d"), (m_dwUpperParam && wcslen(lpszPath) && wcsicmp(SEARCH_FOLDER_NAME,lpszPath)!=0) ?
ListView_GetItemCount(m_hWnd) - 1 : ListView_GetItemCount(m_hWnd));
SetFormatInteger(szTemp, 64);
wsprintf(szItemCount, IDS_FMT_OBJECTSCOUNT, szTemp);
wsprintf(szTemp, _T("%d"), nAllSize);
SetFormatInteger(szTemp, 64);
wsprintf(szAllSize, IDS_FMT_TOTALBYTES, szTemp);
g_MainWnd.m_StatusWnd.SetTwoPaneText(szItemCount, szAllSize);
}
else
{
//傾僪儗僗僶乕旕昞帵帪
TCHAR szItemCount[64];
TCHAR szAllSize[64];
TCHAR szFolder[64];
wsprintf(szTemp, _T("%d"), (m_dwUpperParam && wcslen(lpszPath) && wcsicmp(SEARCH_FOLDER_NAME,lpszPath)!=0) ?
ListView_GetItemCount(m_hWnd) - 1 : ListView_GetItemCount(m_hWnd));
SetFormatInteger(szTemp, 64);
wsprintf(szItemCount, IDS_FMT_OBJECTSCOUNT_S, szTemp);
SetFormatSize(nAllSize, szAllSize, IDS_FMT_TOTALBYTES_SKB, IDS_FMT_TOTALBYTES_SMB);
LPTSTR lpszFolderName = wcsrchr(m_szCurrentFolder, _T('\\'));
if (lpszFolderName)
wcscpy(szFolder, ++lpszFolderName);
else
wcscpy(szFolder, GetRootName());
g_MainWnd.m_StatusWnd.SetThreePaneText(szFolder, szItemCount, szAllSize);
}
//MOD START TODA (from GSFinder ver.1.99)
//堦偮忋偺僼僅儖僟傊傪桳岠丒柍岠
g_MainWnd.m_CmdBands.SetEnableUpperFolder(wcslen(lpszPath) ? TRUE : FALSE);
//恑傓儃僞儞桳岠/柍岠
g_MainWnd.m_CmdBands.SetEnableFront(m_lpHistoryCurrent->lpNext ? TRUE : FALSE);
//栠傞儃僞儞桳岠/柍岠
g_MainWnd.m_CmdBands.SetEnableBack(m_lpHistoryCurrent->lpPrev ? TRUE : FALSE);
//MOD END
}
///////////////////////////////////////////////////////////////
void CListView::LoadFolderReset(LPCTSTR lpszPath)
{
//傾僀僥儉悢丄僒僀僘偺僇僂儞僩
UINT nAllSize = 0;
//僼傽僀儖偺撉傒崬傒
TCHAR szTemp[MAX_PATH];
wsprintf(szTemp, _T("%s\\*.*"), lpszPath);
WIN32_FIND_DATA finddata;
HANDLE hFind = FindFirstFile(szTemp, &finddata);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
//傾僀僥儉偑僼傽僀儖偺応崌偺傒
if(FILE_ATTRIBUTE_DIRECTORY !=
(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
//僒僀僘傪僇僂儞僩
nAllSize += finddata.nFileSizeLow;
}
while (FindNextFile(hFind, &finddata));
FindClose(hFind);
}
//夋柺嵞峔抸
MainWindowReset(lpszPath, nAllSize);
m_nFileSize = nAllSize;
}
///////////////////////////////////////////////////////////////
void CListView::LoadFolderSearch(LPCTSTR lpszPath)
{
//僇乕僜儖傪張棟拞偵偡傞
HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
//僗僥乕僞僗僶乕昞帵(張棟拞昞帵)
TCHAR szTemp[MAX_PATH];
wsprintf(szTemp, IDS_FMT_LOADING);
g_MainWnd.m_StatusWnd.SetSimpleText(szTemp);
//傾僀僥儉悢丄僒僀僘偺僇僂儞僩
UINT nAllSize = 0;
//傾僀僥儉偺嶍彍
DeleteAllItem();
//埲崀偺傾僪儗僗傪嶍彍
SEARCHDATA *pCurrent = m_lpSearchData;
while(pCurrent)
{
SEARCHDATA *pNext = pCurrent->lpNext;
TCHAR szTemp[MAX_PATH];
wsprintf(szTemp, _T("%s\\%s"), pCurrent->lpszPath, pCurrent->lpszName);
if (GetFileAttributes(szTemp) == 0xFFFFFFFF)
{
//儕僗僩偺楢寢
if(pCurrent->lpPrev) {
pCurrent->lpPrev->lpNext = pNext;
} else {
m_lpSearchData = pNext;
}
if(pCurrent->lpNext) {
pCurrent->lpNext->lpPrev = pCurrent->lpPrev;
}
//傾僀僥儉偺嶍彍
pCurrent->lpNext = NULL;
DeleteSearch(pCurrent);
}
else
{
//傾僀僥儉偺捛壛
AddFolderItemSub(pCurrent->lpszPath,
pCurrent->lpszName,
pCurrent->dwAttr,
pCurrent->ft,
pCurrent->dwSize,
&nAllSize,
FALSE);
}
//師偺儊儞僶
pCurrent = pNext;
} //End of while
// 僜乕僩
if (ListView_GetItemCount(m_hWnd))
SortList();
//夋柺嵞峔抸
MainWindowReset(lpszPath, nAllSize);
m_nFileSize = nAllSize;
//僇乕僜儖傪尦偵栠偡
SetCursor(hCursor);
//僣儕乕價儏乕峏怴
g_MainWnd.m_TreeView.SetCurrentFolder(lpszPath, FALSE, TRUE);
//傾僀僥儉慖戰
ListView_SetItemState(m_hWnd, 0, LVIS_SELECTED, LVIS_SELECTED);
ListView_SetItemState(m_hWnd, 0, LVIS_FOCUSED, LVIS_FOCUSED);
}
///////////////////////////////////////////////////////////////
void CListView::LoadFolderFiles(LPCTSTR lpszPath, BOOL bTVUpdate)
{
//僇乕僜儖傪張棟拞偵偡傞
HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
//僗僥乕僞僗僶乕昞帵(張棟拞昞帵)
TCHAR szTemp[MAX_PATH];
wsprintf(szTemp, IDS_FMT_LOADING);
g_MainWnd.m_StatusWnd.SetSimpleText(szTemp);
//棜楌捛壛
m_lpHistoryCurrent = AddHistory(m_lpHistoryCurrent, lpszPath);
if(!m_lpHistory)
m_lpHistory = m_lpHistoryCurrent;
//傾僀僥儉悢丄僒僀僘偺僇僂儞僩
UINT nAllSize = 0;
//傾僀僥儉偺嶍彍
DeleteAllItem();
// 堦偮忋偺僼僅儖僟傊傪捛壛
if (wcslen(lpszPath) && m_Settings.bAddUpper)
AddUpper();
else
m_dwUpperParam = NULL;
//慜夞偺僼僅儖僟傪敾掕
LPTSTR lpszUpprFolder = NULL;
if(wcslen(m_szOldFolder)!=0) {
if(lpszUpprFolder=wcsrchr(m_szOldFolder, _T('\\'))) {
if(wcsncmp(lpszPath, m_szOldFolder, (lpszUpprFolder-m_szOldFolder))==0) {
lpszUpprFolder++;
} else {
lpszUpprFolder=NULL;
}
}
}
//僼傽僀儖偺撉傒崬傒
BOOL bSelect=FALSE;
wsprintf(szTemp, _T("%s\\*.*"), lpszPath);
WIN32_FIND_DATA finddata;
HANDLE hFind = FindFirstFile(szTemp, &finddata);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
//僼僅儖僟旕昞帵偺応崌僼僅儖僟傪柍帇
if(m_bHideFolder &&
FILE_ATTRIBUTE_DIRECTORY ==
(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
continue;
//傾僀僥儉慖戰
BOOL bItemSelect=FALSE;
if(lpszUpprFolder) {
if(wcscmp(lpszUpprFolder, finddata.cFileName) == 0)
bSelect=bItemSelect=TRUE;
}
//傾僀僥儉捛壛
AddFolderItem(&finddata, lpszPath, &nAllSize, bItemSelect);
}
while (FindNextFile(hFind, &finddata));
FindClose(hFind);
}
// 僜乕僩
if (ListView_GetItemCount(m_hWnd))
SortList();
//夋柺嵞峔抸
MainWindowReset(lpszPath, nAllSize);
m_nFileSize = nAllSize;
//僇乕僜儖傪尦偵栠偡
SetCursor(hCursor);
//僣儕乕價儏乕峏怴
g_MainWnd.m_TreeView.SetCurrentFolder(lpszPath, bTVUpdate);
if(bSelect) {
//慖戰傾僀僥儉傪僗僋儘乕儖
ListView_EnsureVisible(m_hWnd, GetSelectedItemIndex(0), FALSE);
} else {
//愭摢傾僀僥儉傪慖戰
ListView_SetItemState(m_hWnd, 0, LVIS_SELECTED, LVIS_SELECTED);
ListView_SetItemState(m_hWnd, 0, LVIS_FOCUSED, LVIS_FOCUSED);
}
//慜夞僷僗偲偟偰僷僗傪曐懚
wcscpy(m_szOldFolder, lpszPath);
}
///////////////////////////////////////////////////////////////
void CListView::LoadFolderItem(LPCTSTR lpszPath, BOOL bTVUpdate)
{
//ADD START TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
//峏怴捠抦晄梫
DisableUpdateNotify();
//ADD END
//嵞昤夋掆巭
SendMessage(m_hWnd, WM_SETREDRAW, (WPARAM)0, (LPARAM)0);
//専嶕張棟偺応崌
if(0 == wcscmp(lpszPath, SEARCH_FOLDER_NAME))
LoadFolderSearch(lpszPath);
else
LoadFolderFiles(lpszPath, bTVUpdate);
//嵞昤夋奐巒
SendMessage(m_hWnd, WM_SETREDRAW, (WPARAM)1, (LPARAM)0);
//ADD START TODA (僼傽僀儖曄峏捠抦 from Y.Nagamidori)
SetUpdateNotify(lpszPath);
EnableUpdateNotify();
//ADD END
}
///////////////////////////////////////////////////////////////
void CListView::LoadFolderItemSub(LPCTSTR lpszPath)
{
//嵞昤夋掆巭
SendMessage(m_hWnd, WM_SETREDRAW, (WPARAM)0, (LPARAM)0);
//傾僀僥儉嶍彍
DeleteAllItem();
// 堦偮忋偺僼僅儖僟傊傪愝掕偟側偄
m_dwUpperParam = NULL;
//傾僀僥儉悢丄僒僀僘偺僇僂儞僩梡
UINT nAllSize = 0;
//僼傽僀儖偺撉傒崬傒
WIN32_FIND_DATA finddata;
HANDLE hFind = FindFirstFile(lpszPath, &finddata);
if (hFind != INVALID_HANDLE_VALUE)
{
//僷僗偲僨傿儗僋僩儕傪暘棧
TCHAR szPath[MAX_PATH];
wcscpy(szPath, lpszPath);
LPTSTR lpszTemp = wcsrchr(szPath, _T('\\'));
*lpszTemp = 0x00;
//傾僀僥儉傪捛壛
AddFolderItem(&finddata, szPath, &nAllSize);
//僴儞僪儖傪僋儘乕僘
FindClose(hFind);
}
//僇儗儞僩僼僅儖僟傪愝掕
wcscpy(m_szCurrentFolder, lpszPath);
//嵞昤夋奐巒
SendMessage(m_hWnd, WM_SETREDRAW, (WPARAM)1, (LPARAM)0);
}
///////////////////////////////////////////////////////////////
void CListView::SelectFile(LPCTSTR lpszPath)
{
//ADD START TODA (儖乕僩帪偺僷僗愝掕 - advice by Y.Nagamidori)
//儖乕僩僨傿儗僋僩儕偺応崌
if(wcslen(lpszPath) == 0 || wcscmp(lpszPath, GetRootName()) == 0)
wcscpy(m_szCurrentFolder, _T(""));
//ADD END
else
{
//僨傿儗僋僩儕傊堏摦
LoadFolderItemSub(lpszPath);
//慡偰偺傾僀僥儉傪慖戰忬懺偲偡傞
ListView_SetItemState(m_hWnd, -1, LVIS_SELECTED, LVIS_SELECTED);
}
}
//ADD END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -