📄 folderdlg.cpp
字号:
//FolderDlg.cpp
#include "GSFinder.h"
#include "FolderDlg.h"
CFolderDlg* pfd;
///////////////////////////////////////////////////////////////
void CFolderDlg::CreateNewFolder(HWND hDlg)
{
HWND hTV = GetDlgItem(hDlg, IDC_TREE_FOLDER);
TCHAR szPath[MAX_PATH] = _T("");
TCHAR szTemp[MAX_PATH] = _T("");
TCHAR szName[MAX_PATH] = _T("");
HTREEITEM hTreeItem = TreeView_GetSelection(hTV);
TVITEM tvi;
tvi.mask = TVIF_TEXT | TVIF_HANDLE;
tvi.pszText = szName;
tvi.cchTextMax = MAX_PATH;
tvi.hItem = hTreeItem;
TreeView_GetItem(hTV, &tvi);
if (wcscmp(szName, GetRootName()) != 0)
{
wcscpy(szPath, szName);
hTreeItem = TreeView_GetParent(hTV, hTreeItem);
while (hTreeItem)
{
tvi.hItem = hTreeItem;
TreeView_GetItem(hTV, &tvi);
if (wcscmp(szName, GetRootName()) != 0)
wsprintf(szTemp, _T("%s\\%s"), szName, szPath);
else
wsprintf(szTemp, _T("\\%s"), szPath);
wcscpy(szPath, szTemp);
hTreeItem = TreeView_GetParent(hTV, hTreeItem);
}
}
else
{
//MOD TODA
// wcscpy(szPath, _T(""));
szPath[0] = 0x00;
}
int nCount = 1;
BOOL bCreate = FALSE;
TCHAR szNewFolderName[MAX_PATH];
while (!bCreate)
{
TCHAR szNewFolderPath[MAX_PATH] = _T("");
if (nCount>1)
wsprintf(szNewFolderName, IDS_FMT_NEWFOLDERNAME1, nCount);
else
wsprintf(szNewFolderName, IDS_FMT_NEWFOLDERNAME);
wsprintf(szNewFolderPath, _T("%s\\%s"), szPath, szNewFolderName);
bCreate = CreateDirectory(szNewFolderPath, NULL);
nCount++;
if (nCount > 1024)
{
MessageBox(hDlg, IDS_MSG_CANNOTCREATEFOLDER, NULL, MB_OK|MB_ICONSTOP);
return;
}
}
HTREEITEM hParent = TreeView_GetSelection(hTV);
TVINSERTSTRUCT tvis;
tvis.hParent = hParent;
tvis.hInsertAfter = TVI_SORT;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvis.item.pszText = szNewFolderName;
tvis.item.iImage = 1;
tvis.item.iSelectedImage = 1;
hTreeItem = TreeView_InsertItem(hTV, &tvis);
TreeView_Expand(hTV, hParent, TVE_EXPAND);
TreeView_SelectItem(hTV, hTreeItem);
SetFocus(hTV);
m_bRefresh = TRUE;
}
///////////////////////////////////////////////////////////////
void CFolderDlg::LoadChildFolder(HWND hDlg, HTREEITEM hParent, LPCTSTR szPath)
{
HWND hTreeView = GetDlgItem(hDlg, IDC_TREE_FOLDER);
WIN32_FIND_DATA finddata;
TCHAR szTemp[MAX_PATH];
HTREEITEM hTreeItem;
wsprintf(szTemp, _T("%s\\*.*"), szPath);
HANDLE hFind = FindFirstFile(szTemp, &finddata);
if (hFind != INVALID_HANDLE_VALUE)
{
BOOL bRet = TRUE;
do
{
if (wcsicmp(finddata.cFileName, _T("Recycled")) != 0 &&
(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
TVINSERTSTRUCT tvis;
tvis.hParent = hParent;
tvis.hInsertAfter = TVI_SORT;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvis.item.pszText = finddata.cFileName;
if (finddata.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {
tvis.item.iImage = 3;
tvis.item.iSelectedImage = 3;
}
//MOD TODA
// else if (wcsicmp(finddata.cFileName, _T("My Documents")) == 0) {
else if (wcsicmp(finddata.cFileName, g_MainWnd.m_lpszMyDocument) == 0) {
tvis.item.iImage = 4;
tvis.item.iSelectedImage = 4;
}
else {
tvis.item.iImage = 1;
tvis.item.iSelectedImage = 2;
}
hTreeItem = TreeView_InsertItem(hTreeView, &tvis);
wsprintf(szTemp, _T("%s\\%s"), szPath, finddata.cFileName);
LoadChildFolder(hDlg, hTreeItem, szTemp);
}
}
while (FindNextFile(hFind, &finddata));
FindClose(hFind);
}
TreeView_SortChildren(hTreeView, hParent, 0);
}
///////////////////////////////////////////////////////////////
void CFolderDlg::OnInitDialog(HWND hDlg)
{
HWND hTreeView = GetDlgItem(hDlg, IDC_TREE_FOLDER);
m_bRefresh = FALSE;
m_hImageList = NULL;
HICON hIcon;
CenterWindow(hDlg);
if (wcslen(m_lpszTitle))
SetWindowText(hDlg, m_lpszTitle);
//僀儊乕僕儕僗僩嶌惉
m_hImageList = ImageList_Create(16, 16, ILC_COLOR|ILC_MASK, 1, 2);
AddRootIcon(m_hImageList);
hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_FOLDER_S, IMAGE_ICON, 16, 16, 0);
ImageList_AddIcon(m_hImageList, hIcon);
DestroyIcon(hIcon);
hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_FOLDERO_S, IMAGE_ICON, 16, 16, 0);
ImageList_AddIcon(m_hImageList, hIcon);
DestroyIcon(hIcon);
hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_TEMP_S, IMAGE_ICON, 16, 16, 0);
ImageList_AddIcon(m_hImageList, hIcon);
DestroyIcon(hIcon);
hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_MYDOCUMENTS_S, IMAGE_ICON, 16, 16, 0);
ImageList_AddIcon(m_hImageList, hIcon);
DestroyIcon(hIcon);
TreeView_SetImageList(hTreeView, m_hImageList, TVSIL_NORMAL);
SetWindowLong(hTreeView, GWL_STYLE, GetWindowLong(hTreeView, GWL_STYLE)|TVS_HASBUTTONS|TVS_HASLINES|TVS_SHOWSELALWAYS);
//僼僅儖僟撉傒崬傒
HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
TVINSERTSTRUCT tvis;
tvis.hParent = NULL;
tvis.hInsertAfter = TVI_SORT;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvis.item.pszText = (LPTSTR)GetRootName();
tvis.item.iImage = 0;
tvis.item.iSelectedImage = 0;
HTREEITEM hRoot = TreeView_InsertItem(hTreeView, &tvis);
LoadChildFolder(hDlg, hRoot, _T(""));
TreeView_Expand(hTreeView, hRoot, TVE_EXPAND);
//僇儗儞僩僼僅儖僟傪僙僢僩
LPCTSTR lpszStart = wcschr(g_MainWnd.m_ListView.m_szCurrentFolder, _T('\\'));
HTREEITEM hParent = hRoot;
while (lpszStart)
{
TCHAR szName[MAX_PATH] = _T("");
LPCTSTR lpszEnd = wcschr(lpszStart + 1, _T('\\'));
if (lpszEnd)
wcsncpy(szName, ++lpszStart, lpszEnd - lpszStart);
else
wcscpy(szName, ++lpszStart);
HTREEITEM hChild = TreeView_GetChild(hTreeView, hParent);
while (hChild)
{
TCHAR szChildName[MAX_PATH] = _T("");
TVITEM tvi;
tvi.mask = TVIF_TEXT | TVIF_HANDLE;
tvi.pszText = szChildName;
tvi.cchTextMax = MAX_PATH;
tvi.hItem = hChild;
TreeView_GetItem(hTreeView, &tvi);
if (wcscmp(szName, szChildName) == 0)
{
TreeView_SelectItem(hTreeView, hChild);
hParent = hChild;
break;
}
hChild = TreeView_GetNextItem(hTreeView, hChild, TVGN_NEXT);
}
if (!hChild) break;
lpszStart = wcschr(lpszStart, _T('\\'));
}
SetCursor(hCursor);
}
///////////////////////////////////////////////////////////////
void CFolderDlg::OnOK(HWND hDlg)
{
HWND hTV = GetDlgItem(hDlg, IDC_TREE_FOLDER);
TCHAR szPath[MAX_PATH] = _T("");
TCHAR szTemp[MAX_PATH] = _T("");
TCHAR szName[MAX_PATH] = _T("");
HTREEITEM hTreeItem = TreeView_GetSelection(hTV);
TVITEM tvi;
tvi.mask = TVIF_TEXT | TVIF_HANDLE;
tvi.pszText = szName;
tvi.cchTextMax = MAX_PATH;
tvi.hItem = hTreeItem;
TreeView_GetItem(hTV, &tvi);
if (wcscmp(szName, GetRootName()) != 0)
{
wcscpy(szPath, szName);
hTreeItem = TreeView_GetParent(hTV, hTreeItem);
while (hTreeItem)
{
tvi.hItem = hTreeItem;
TreeView_GetItem(hTV, &tvi);
if (wcscmp(szName, GetRootName()) != 0)
wsprintf(szTemp, _T("%s\\%s"), szName, szPath);
else
wsprintf(szTemp, _T("\\%s"), szPath);
wcscpy(szPath, szTemp);
hTreeItem = TreeView_GetParent(hTV, hTreeItem);
}
wcscpy(m_lpszPath, szPath);
}
else
{
//MOD TODA
// wcscpy(m_lpszPath, _T(""));
m_lpszPath[0] = 0x00;
}
EndDialog(hDlg, IDOK);
}
///////////////////////////////////////////////////////////////
LRESULT CALLBACK FolderDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
switch (message)
{
case WM_INITDIALOG:
{
pfd->OnInitDialog(hDlg);
return TRUE;
}
case WM_COMMAND:
{
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDOK :
{
pfd->OnOK(hDlg);
return TRUE;
}
case IDCANCEL:
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
case IDC_CREATE_FOLDER:
{
pfd->CreateNewFolder(hDlg);
return TRUE;
}
case IDC_RENAME_FOLDER:
{
pfd->OnRenameFolder(hDlg);
return TRUE;
}
}
break;
}
}
return FALSE;
}
///////////////////////////////////////////////////////////////
int CFolderDlg::ShowFolderDlg(LPCTSTR szTitle, LPTSTR szPath, int nSize)
{
pfd = this;
m_lpszTitle = szTitle;
m_lpszPath = szPath;
m_nSize = nSize;
int nRet = DialogBox(g_hInst, (LPCTSTR)IDD_FOLDER_DLG, g_MainWnd.m_hWnd, (DLGPROC)FolderDlgProc);
pfd = NULL;
return nRet;
}
///////////////////////////////////////////////////////////////
LRESULT CALLBACK RenameDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
switch (message)
{
case WM_INITDIALOG:
{
CenterWindow(hDlg);
SetWindowText(GetDlgItem(hDlg, IDC_EDIT_OLDNAME), pfd->m_lpszName);
SetWindowText(GetDlgItem(hDlg, IDC_EDIT_NEWNAME), pfd->m_lpszName);
SetFocus(GetDlgItem(hDlg, IDC_EDIT_NEWNAME));
SendMessage(GetDlgItem(hDlg, IDC_EDIT_NEWNAME), EM_SETSEL, 0, -1);
return FALSE;
}
case WM_COMMAND:
{
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 儊僯儏乕崁栚傪暘椶暿偵嬫愗傝傑偡:
switch (wmId)
{
case IDOK :
{
GetWindowText(GetDlgItem(hDlg, IDC_EDIT_NEWNAME), pfd->m_lpszName, MAX_PATH);
EndDialog(hDlg, IDOK);
return TRUE;
}
case IDCANCEL:
{
EndDialog(hDlg, IDCANCEL);
return TRUE;
}
}
break;
}
case WM_CLOSE:
{
EndDialog(hDlg, IDCANCEL);
return TRUE;
}
}
return FALSE;
}
///////////////////////////////////////////////////////////////
void CFolderDlg::OnRenameFolder(HWND hDlg)
{
HWND hTV = GetDlgItem(hDlg, IDC_TREE_FOLDER);
TCHAR szOldName[MAX_PATH] = _T("");
TCHAR szNewName[MAX_PATH] = _T("");
m_lpszName = szNewName;
HTREEITEM hSelItem = TreeView_GetSelection(hTV);
TVITEM tvi;
tvi.mask = TVIF_TEXT | TVIF_HANDLE;
tvi.pszText = szOldName;
tvi.cchTextMax = MAX_PATH;
tvi.hItem = hSelItem;
TreeView_GetItem(hTV, &tvi);
wcscpy(szNewName, szOldName);
if (wcscmp(m_lpszName, GetRootName())!=0)
{
if (DialogBox(g_hInst, (LPCTSTR)IDD_RENAME_DLG, hDlg, (DLGPROC)RenameDlgProc)==IDOK)
{
if (wcscmp(szOldName, szNewName)!=0)
{
//柤慜偺曄峏
TCHAR szName[MAX_PATH] = _T("");
TCHAR szPath[MAX_PATH] = _T("");
TCHAR szTemp[MAX_PATH] = _T("");
HTREEITEM hTreeItem = TreeView_GetParent(hTV, hSelItem);
TVITEM tvi;
tvi.mask = TVIF_TEXT | TVIF_HANDLE;
tvi.pszText = szName;
tvi.cchTextMax = MAX_PATH;
while (hTreeItem)
{
tvi.hItem = hTreeItem;
TreeView_GetItem(hTV, &tvi);
if (wcscmp(szName, GetRootName()) != 0)
wsprintf(szTemp, _T("%s\\%s"), szName, szPath);
else
wsprintf(szTemp, _T("\\%s"), szPath);
wcscpy(szPath, szTemp);
hTreeItem = TreeView_GetParent(hTV, hTreeItem);
}
wcscpy(szName, szOldName);
wsprintf(szOldName, _T("%s%s"), szPath, szName);
wcscpy(szName, szNewName);
wsprintf(szNewName, _T("%s%s"), szPath, szName);
if (MoveFile(szOldName, szNewName))
{
TVITEM tvi;
tvi.mask = TVIF_TEXT | TVIF_HANDLE;
tvi.pszText = szName;
tvi.cchTextMax = MAX_PATH;
tvi.hItem = hSelItem;
TreeView_SetItem(hTV, &tvi);
m_bRefresh = TRUE;
}
else
{
MessageBox(hDlg, IDS_MSG_CANNOTCHANGENAME1, NULL, MB_OK|MB_ICONSTOP);
}
}
}
}
else
{
wcscat(m_lpszName, IDS_FMT_RENAME);
MessageBox(hDlg, m_lpszName, NULL, MB_OK|MB_ICONEXCLAMATION);
}
SetFocus(hTV);
}
///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -