📄 listview.cpp
字号:
///////////////////////////////////////////////////////////////
//ListView.cpp
//僼傽僀儖堦棗傪昞帵
///////////////////////////////////////////////////////////////
#include "GSFinder.h"
#include "ListView.h"
#ifdef __POCKET_PC
#include "CommandBandsPPC.h"
#include "FolderDlgPPC.h"
#else
#include "CommandBands.h"
#include "FolderDlg.h"
#endif
#include "FileProperty.h"
#include "CopyDlg.h"
#include "DeleteDlg.h"
#include "UserPathDlg.h" //ADD TODA
#include "FileSearch.h" //ADD TODA
#include "Association.h" //ADD TODA
///////////////////////////////////////////////////////////////
#define ID_LISTVIEW 0
//ADD START TODA (from GSFinder ver.1.99)
#ifdef __POCKET_PC
# define DEF_LIST_STYLE (WS_BORDER | WS_TABSTOP | WS_VISIBLE | WS_CHILD | \
LVS_SHAREIMAGELISTS | \
LVS_ALIGNTOP | LVS_EDITLABELS | \
LVS_SHOWSELALWAYS)
//# define DEF_LIST_EXSTYLE (LVS_EX_ONECLICKACTIVATE | LVS_EX_FULLROWSELECT)
# define DEF_LIST_EXSTYLE (LVS_EX_ONECLICKACTIVATE)
#else
# define DEF_LIST_STYLE (WS_TABSTOP | WS_VISIBLE | WS_CHILD | \
LVS_SHAREIMAGELISTS | \
LVS_ALIGNTOP | LVS_EDITLABELS | \
LVS_SHOWSELALWAYS)
//# define DEF_LIST_EXSTYLE (LVS_EX_FULLROWSELECT)
# define DEF_LIST_EXSTYLE (0)
#endif
//ADD END
//ADD START TODA
WNDPROC Org_ListViewProc = NULL;
///////////////////////////////////////////////////////////////
LRESULT CALLBACK ListViewProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
//僉乕墴壓
case WM_KEYDOWN:
{
//HOME僉乕墴壓
if(wParam == VK_HOME)
{
g_MainWnd.m_ListView.OnGoBack();
return 0;
}
//END僉乕墴壓
if(wParam == VK_END)
{
g_MainWnd.m_ListView.OnGoFront();
return 0;
}
break;
}
//僞僢僾奐巒帪
case WM_LBUTTONDOWN:
g_MainWnd.m_ListView.OnTapHoldBegin((DWORD)lParam);
break;
#ifndef __POCKET_PC
//僞僢僾廔椆帪
case WM_LBUTTONUP:
g_MainWnd.m_ListView.OnTapHoldCancel();
break;
#endif
//僞僢僾&儂乕儖僪帪(僞僀儉傾僂僩帪)
case WM_TIMER:
{
if(wParam == ID_TIMER_MENUCANCEL)
{
g_MainWnd.m_ListView.OnSelectMenuLoop();
g_MainWnd.m_ListView.OnSelectMenuLoop();
}
else if(wParam == ID_TIMER_TAPHOLD)
g_MainWnd.m_ListView.OnTapHoldEnter();
break;
}
//偦傟埲奜
default:
break;
}
return CallWindowProc((WNDPROC)Org_ListViewProc, hWnd, message, wParam, lParam);
}
//ADD END
////////////////////////////////////////////////////////////////
LRESULT CALLBACK FileOpenParamDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
#ifdef __POCKET_PC
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
#else
CenterWindow(hDlg);
#endif
int nIndex = g_MainWnd.m_ListView.GetSelectedItemIndex(0);
LISTITEMCOMP* plic = g_MainWnd.m_ListView.GetListItemStruct(nIndex);
TCHAR szTemp[MAX_PATH];
wsprintf(szTemp, IDS_FMT_OPENPARAM, plic->lpszName);
SetWindowText(GetDlgItem(hDlg, IDC_MESSAGE), szTemp);
return TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
int nIndex = g_MainWnd.m_ListView.GetSelectedItemIndex(0);
LISTITEMCOMP* plic = g_MainWnd.m_ListView.GetListItemStruct(nIndex);
TCHAR szParam[MAX_PATH];
GetWindowText(GetDlgItem(hDlg, IDC_EDIT_PATH), szParam, 512);
TCHAR szPath[MAX_PATH];
wsprintf(szPath, _T("%s\\%s"), g_MainWnd.m_ListView.m_szCurrentFolder, plic->lpszName);
SHELLEXECUTEINFO sei;
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = 0;
sei.hwnd = hDlg;
sei.lpVerb = _T("open");
sei.lpFile = szPath;
sei.lpParameters = szParam;
sei.lpDirectory = _T("");
sei.nShow = SW_SHOW;
sei.hInstApp = g_hInst;
ShellExecuteEx(&sei);
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
else if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
#ifdef __POCKET_PC
case WM_PAINT:
return DefDlgPaintProc(hDlg, wParam, lParam);
case WM_CTLCOLORSTATIC:
return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
#endif
}
return FALSE;
}
///////////////////////////////////////////////////////////////
CListView::CListView()
{
m_Settings.nSort = LIST_SORT_NAME;
m_Settings.bSortRaise = TRUE;
#ifdef __POCKET_PC
m_Settings.dwListStyle = LVS_ICON;
#else
m_Settings.dwListStyle = LVS_REPORT;
#endif
m_Settings.dwListExStyle = 0; //ADD END
m_Settings.bHideHidden = TRUE;
m_Settings.bHideSystem = FALSE;
m_Settings.bHideROM = FALSE;
m_Settings.nNameColumnSize = 145;
m_Settings.nSizeColumnSize = 75;
m_Settings.nTypeColumnSize = 75;
m_Settings.nTimeColumnSize = 75;
m_Settings.bSaveFolder = FALSE;
wcscpy(m_szCurrentFolder, _T(""));
m_Settings.bNotShortcutName = FALSE;
m_Settings.bNotShowExt = TRUE;
#ifdef __POCKET_PC
m_Settings.bSingleClick = TRUE;
m_Settings.bAddUpper = TRUE;
#else
m_Settings.bSingleClick = FALSE;
m_Settings.bAddUpper = FALSE;
#endif
//ADD START TODA
m_Settings.bHideHeader = FALSE;
m_Settings.nCompDLL = COMPDLL_MODE_ZIP;
m_Settings.bAutoUnComp = FALSE;
m_Settings.bMakeDir = FALSE;
m_Settings.bMoveDir = FALSE;
m_Settings.bDblClick = FALSE;
wcscpy(m_szCompressFolder, _T("\\Temp"));
wcscpy(m_szOldFolder, _T(""));
m_bTimeStump = FALSE;
m_bHideFolder = FALSE;
m_bNoExtShortcut = TRUE;
m_bTaping = FALSE;
m_bHolding = FALSE;
m_bMenu = FALSE;
m_lpHistory = NULL;
m_lpHistoryCurrent = NULL;
m_lpSearchData = NULL;
m_lpFavorites = NULL;
m_lpFavoritesCurrent = NULL;
m_nFavoritesCount = 0;
//ADD END
m_nCount = 0;
m_bFileMove = FALSE;
m_lpliinfo = NULL;
wcscpy(m_szFolderFrom, _T(""));
m_nFileSize = 0;
m_hMenuPopup = NULL;
m_pFileImageList = NULL;
m_bEditing = FALSE;
m_dwUpperParam = NULL;
m_nOpenPthInfoCount = 0; //ADD TODA
m_ImageListSettings.bNotLoadFileIcon = FALSE;
m_ImageListSettings.bNotLoadROMIcon = TRUE;
m_ImageListSettings.bNotLoadCompIcon = TRUE; //ADD TODA
}
///////////////////////////////////////////////////////////////
CListView::~CListView()
{
//ADD START TODA (棜楌/専嶕偺嶍彍傪捛壛)
//棜楌偺嶍彍
DeleteHistory(m_lpHistory);
//専嶕寢壥偺嶍彍
DeleteSearch(m_lpSearchData);
//ADD END
}
///////////////////////////////////////////////////////////////
void CListView::Init(HWND hwndParent)
{
//愝掕撉傒崬傒
GetSettings();
//MOD START TODA (from GSFinder ver.1.99)
DWORD dwStyle = DEF_LIST_STYLE /*| m_Settings.dwListStyle*/;
DWORD dwExStyle = NULL;//WS_EX_CLIENTEDGE;
#ifdef __POCKET_PC
dwExStyle = 0;
//DEL START TODA (昞帵愝掕張棟傪偁偲偱幚峴)
// if (m_Settings.dwListStyle == LVS_REPORT && m_Settings.bHideHeader)
// dwStyle |= LVS_NOCOLUMNHEADER;
//DEL END
#endif
m_hWnd = CreateWindowEx(dwExStyle,
WC_LISTVIEW,
NULL, dwStyle, 0, 0, 0, 0,
hwndParent, (HMENU)ID_LISTVIEW,
g_hInst, NULL);
//MOD END
//ADD START TODA (僞僢僾&儂乕儖僪梡)
Org_ListViewProc = (WNDPROC)GetWindowLong(m_hWnd, GWL_WNDPROC);
SetWindowLong(m_hWnd, GWL_WNDPROC, (DWORD)ListViewProc);
//ADD END
//DEL START TODA (昞帵愝掕張棟傪偁偲偱幚峴)
// //MOD START TODA (from GSFinder ver.1.99)
// if (m_Settings.dwListStyle == LVS_REPORT)
// ListView_SetExtendedListViewStyle(m_hWnd, ListView_GetExtendedListViewStyle(m_hWnd) | (DEF_LIST_EXSTYLE|m_Settings.dwListExStyle));
// //MOD END
//
// if (m_Settings.dwListStyle == LVS_ICON)
// ListView_SetIconSpacing(m_hWnd, 72, 72);
//
//#ifdef __POCKET_PC
// SendMessage(m_hWnd, CCM_SETVERSION, COMCTL32_VERSION, 0);
//#endif
//DEL END
//弶婜壔
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = m_Settings.nNameColumnSize;
lvc.pszText = IDS_COLUMN_NAME;
lvc.iSubItem = 0;
ListView_InsertColumn(m_hWnd, 0, &lvc);
lvc.fmt = LVCFMT_RIGHT;
lvc.cx = m_Settings.nSizeColumnSize;
lvc.pszText = IDS_COLUMN_SIZE;
lvc.iSubItem = 1;
ListView_InsertColumn(m_hWnd, 1, &lvc);
lvc.fmt = LVCFMT_LEFT;
lvc.cx = m_Settings.nTypeColumnSize;
lvc.pszText = IDS_COLUMN_TYPE;
lvc.iSubItem = 2;
ListView_InsertColumn(m_hWnd, 2, &lvc);
lvc.fmt = LVCFMT_LEFT;
lvc.cx = m_Settings.nTimeColumnSize;
lvc.pszText = IDS_COLUMN_DATE;
lvc.iSubItem = 3;
ListView_InsertColumn(m_hWnd, 3, &lvc);
SetImageList();
if (g_lpszFirstLoadFolder == NULL)
{
//僐儅儞僪儔僀儞僷儔儊乕僞旕巜掕帪
if (m_Settings.bSaveFolder)
{
DWORD dwAttr = GetFileAttributes(m_szCurrentFolder);
if (dwAttr == 0xFFFFFFFF || (dwAttr & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
wcscpy(m_szCurrentFolder, _T(""));
}
else
wcscpy(m_szCurrentFolder, _T(""));
}
else
{
DWORD dwAttr = GetFileAttributes(g_lpszFirstLoadFolder);
if (dwAttr != 0xFFFFFFFF && (dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
wcscpy(m_szCurrentFolder, g_lpszFirstLoadFolder);
}
//DEL START TODA
// g_MainWnd.m_CmdBands.SetCheckListStyle(m_Settings.dwListStyle, m_Settings.dwListExStyle); //MOD TODA
//DEL END
g_MainWnd.m_CmdBands.SetCheckSort(m_Settings.nSort, m_Settings.bSortRaise);
g_MainWnd.m_CmdBands.SetEnableEditPaste(FALSE);
m_hMenuPopup = LoadMenu(g_hInst, (LPCTSTR)IDR_POPUP);
InitOpenAppMenu();
InitUserPathMenu(); //ADD TODA
InitFavoritesMenu(); //ADD TODA
//昞帵宍幃愝掕
OnChangeListStyle(0); //ADD TODA
}
///////////////////////////////////////////////////////////////
void CListView::Destroy()
{
//愝掕傪曐懚
SaveSettings();
if (m_lpliinfo)
{
delete[] m_lpliinfo;
m_lpliinfo = NULL;
m_nCount = 0;
}
int i;
for (i = 0; i < m_nOpenAppInfoCount; i++)
{
OPENAPPINFO* poa= m_lpOpenAppInfo[i];
if (poa)
{
delete poa->lpszPath;
delete poa;
m_lpOpenAppInfo[i] = NULL;
}
}
m_nOpenAppInfoCount = NULL;
DeleteAllItem();
DeleteUserPathMenu(); //ADD TODA
DeleteFavoritesMenu(); //ADD TODA
DestroyMenu(m_hMenuPopup);
m_FileImageListLarge.Destroy();
m_FileImageListSmall.Destroy();
DestroyWindow(m_hWnd);
}
///////////////////////////////////////////////////////////////
void CListView::SetImageList()
{
m_FileImageListSmall.InitImageList(FALSE);
ListView_SetImageList(m_hWnd, m_FileImageListSmall.m_hImageList, LVSIL_SMALL);
m_FileImageListLarge.InitImageList(TRUE);
ListView_SetImageList(m_hWnd, m_FileImageListLarge.m_hImageList, LVSIL_NORMAL);
if ((m_Settings.dwListStyle&LVS_TYPEMASK)==LVS_ICON)
m_pFileImageList = &m_FileImageListLarge;
else
m_pFileImageList = &m_FileImageListSmall;
}
///////////////////////////////////////////////////////////////
void CListView::GetSettings()
{
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)
{
DWORD dwType;
BYTE* lpData;
DWORD dwDataSize;
BYTE bString[MAX_PATH*2];
//m_Settings
dwType = REG_BINARY;
lpData = new BYTE[sizeof(m_Settings)];
dwDataSize = sizeof(m_Settings);
if (RegQueryValueEx(hKey, _T("ListView"), 0, &dwType, lpData, &dwDataSize) == ERROR_SUCCESS)
{
if(dwDataSize == sizeof(m_Settings)) //ADD TODA (僒僀僘僠僃僢僋捛壛)
memcpy(&m_Settings, lpData, sizeof(m_Settings));
}
delete[] lpData;
//m_ImageListSettings
dwType = REG_BINARY;
lpData = new BYTE[sizeof(m_ImageListSettings)];
dwDataSize = sizeof(m_ImageListSettings);
if (RegQueryValueEx(hKey, _T("FileImageList"), 0, &dwType, lpData, &dwDataSize) == ERROR_SUCCESS)
memcpy(&m_ImageListSettings, lpData, dwDataSize);
delete[] lpData;
//m_nOpenPthInfoCount
dwType = REG_BINARY;
lpData = new BYTE[sizeof(m_nOpenPthInfoCount)];
dwDataSize = sizeof(m_nOpenPthInfoCount);
int iTemp = 0;
if (RegQueryValueEx(hKey, _T("OpenPthInfoCount"), 0, &dwType, lpData, &dwDataSize) == ERROR_SUCCESS)
memcpy(&iTemp, lpData, dwDataSize);
delete[] lpData;
//m_lpOpenPthInfo
CUserPathDlg *pup = new CUserPathDlg((HWND)0, (HINSTANCE)0);
for(int i=0; i<iTemp; i++)
{
BYTE bString[MAX_PATH*sizeof(TCHAR)];
dwType = REG_SZ;
dwDataSize = sizeof(bString);
TCHAR szKey[16];
wsprintf(szKey, _T("OpenPthInfo%d"), i);
if (RegQueryValueEx(hKey, szKey, 0, &dwType, bString, &dwDataSize) == ERROR_SUCCESS)
{
pup->AddPath(i, (LPTSTR)bString);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -