📄 folderdlgppc.cpp
字号:
//FolderDlgPPC.cpp
#include "GSFinder.h"
#include "FolderDlgPPC.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
wcscpy(szPath, _T(""));
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::OnInitDialog(HWND hDlg)
{
HWND hTreeView = GetDlgItem(hDlg, IDC_TREE_FOLDER);
m_bRefresh = FALSE;
m_hImageList = NULL;
HICON hIcon;
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
SendMessage(hTreeView, CCM_SETVERSION, COMCTL32_VERSION, 0);
if (wcslen(m_lpszTitle))
{
SetWindowText(hDlg, m_lpszTitle);
SetDlgItemText(hDlg, IDC_TITLE, m_lpszTitle);
}
//僒僀僘挷惍 (TreeView)
RECT rc;
POINT pt;
GetWindowRect(hTreeView, &rc);
pt.x = rc.left; pt.y = rc.top;
ScreenToClient(hDlg, &pt);
MoveWindow(hTreeView, pt.x, pt.y, GetSystemMetrics(SM_CXSCREEN)-2, GetSystemMetrics(SM_CYSCREEN)-77, TRUE);
//僀儊乕僕儕僗僩嶌惉
m_hImageList = ImageList_Create(16, 16, ILC_COLOR|ILC_MASK, 1, 2);
hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_ROOT, IMAGE_ICON, 16, 16, 0);
ImageList_AddIcon(m_hImageList, hIcon);
DeleteObject(hIcon);
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 | TVIF_CHILDREN;
tvis.item.pszText = (LPTSTR)GetRootName();
tvis.item.iImage = 0;
tvis.item.iSelectedImage = 0;
tvis.item.cChildren = 1;
HTREEITEM hRoot = TreeView_InsertItem(hTreeView, &tvis);
TreeView_Expand(hTreeView, hRoot, TVE_EXPAND);
//僇儗儞僩僼僅儖僟傪僙僢僩
SetCurrentFolder(hTreeView, m_lpszPath);
SipShowIM(SIPF_OFF);
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);
GetTree(hTV, hTreeItem, m_lpszPath);
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 ID_CREATE_FOLDER:
{
pfd->CreateNewFolder(hDlg);
return TRUE;
}
case ID_RENAME_FOLDER:
{
pfd->OnRenameFolder(hDlg);
return TRUE;
}
}
break;
}
case WM_NOTIFY:
{
NMHDR* lpnmh = (NMHDR*)lParam;
if (lpnmh->code == TVN_ITEMEXPANDING/* && lpnmh->idFrom == IDC_TREE_FOLDER*/)
{
pfd->OnItemExpanding((NMTREEVIEW*)lpnmh);
return TRUE;
}
if (lpnmh->code == TVN_ITEMEXPANDED/* && lpnmh->idFrom == IDC_TREE_FOLDER*/)
{
pfd->OnItemExpanded((NMTREEVIEW*)lpnmh);
return TRUE;
}
if (lpnmh->code == GN_CONTEXTMENU && lpnmh->idFrom == IDC_TREE_FOLDER)
{
if (TreeView_GetSelection(GetDlgItem(hDlg, IDC_TREE_FOLDER)))
{
NMRGINFO* lpnmri = (NMRGINFO*)lParam;
//MOD START TODA
// HMENU hMenu = GetSubMenu(g_MainWnd.m_ListView.m_hMenuPopup, 4);
HMENU hMenu = GetSubMenu(g_MainWnd.m_ListView.m_hMenuPopup, 6);
//MOD END
TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_TOPALIGN, lpnmri->ptAction.x, lpnmri->ptAction.y, 0, hDlg, NULL);
}
return TRUE;
}
break;
}
case WM_CTLCOLORSTATIC:
return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
}
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;
}
case WM_PAINT:
return DefDlgPaintProc(hDlg, wParam, lParam);
case WM_CTLCOLORSTATIC:
return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -