📄 fileview.cpp
字号:
rList.GetItemText(iItem, iName, szTemp, MAX_PATH);
strFileName = g_strCurrentDir + szTemp;
return TRUE;
}
void CFileView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
CString strFileName;
if(MakeFileNameFromListItem(strFileName))
{
if(CGlobal::IsImgFile(strFileName))
{
((CQuickImageApp*)AfxGetApp())->m_pImageTemplate->
OpenDocumentFile(strFileName);
}
else
{
WIN32_FIND_DATA stFindData;
HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
GetDirView()->ExpendItem(strFileName + _T("\\"));
}
}
FindClose(hFind);
}
}
*pResult = 0;
}
void CFileView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem > -1)
{
CPoint point = pNMListView->ptAction;
ClientToScreen(&point);
point.Offset(5, 5);
CMenu menu;
VERIFY(menu.LoadMenu(CG_IDR_POPUP_FILE_VIEW));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this;
while (pWndPopupOwner->GetStyle() & WS_CHILD)
pWndPopupOwner = pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
pWndPopupOwner);
}
*pResult = 0;
}
void CFileView::OnFileRename()
{
CDlgRename dlg;
if(dlg.DoModal() == IDOK)
{
CString strTemplate = dlg.m_strTemplate;
int iStart = dlg.m_iStart;
char *szFront = new char[strTemplate.GetLength() +1];
if(NULL == szFront)
{
return;
}
CString strBack;
strcpy(szFront, strTemplate);
char *pDevide = strchr(szFront, '*');
if(NULL == pDevide)
{
strBack = _T("");
}
else
{
*pDevide = '\0';
pDevide = strrchr(strTemplate, '*');
strBack = ++pDevide;
}
CString strNewFileName, strOldFileName;
CListCtrl &rList = GetListCtrl();
POSITION pos = rList.GetFirstSelectedItemPosition();
int iItem;
WIN32_FIND_DATA stFindData;
HANDLE hFind = NULL;
char *pNewTitle = NULL;
CDirView *pDirView = GetDirView();
ASSERT(NULL != pDirView);
while(pos)
{
iItem = rList.GetNextSelectedItem(pos);
if(!MakeFileNameFromListItem(strOldFileName, iItem))
{
break;
}
strNewFileName.Format("%s%s%0d%s",
g_strCurrentDir, szFront, iStart++, strBack);
hFind = FindFirstFile((LPCTSTR)strOldFileName, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
pNewTitle = strrchr(strNewFileName, '\\');
pDirView->SetItemText(strOldFileName, ++pNewTitle);
}
}
FindClose(hFind);
CFile::Rename(strOldFileName, strNewFileName);
}
delete szFront;
ListFiles();
}
}
void CFileView::OnUpdateFileRename(CCmdUI* pCmdUI)
{
/* CString strFileName;
if(!MakeFileNameFromListSel(strFileName))
{
pCmdUI->Enable(FALSE);
}
else
{
WIN32_FIND_DATA stFindData;
HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
pCmdUI->Enable(FALSE);
}
}
FindClose(hFind);
pCmdUI->Enable(TRUE);
}
*/ pCmdUI->Enable(GetListCtrl().GetSelectedCount() > 0);
}
void CFileView::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
CString strNew, strOldFileName, strNewFileName;
if(!MakeFileNameFromListItem(strOldFileName, pDispInfo->item.iItem))
{
return;
}
GetListCtrl().GetEditControl()->GetWindowText(strNew);
strNewFileName.Format("%s%s", g_strCurrentDir, strNew);
WIN32_FIND_DATA stFindData;
HANDLE hFind = FindFirstFile((LPCTSTR)strOldFileName, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
char *pNewTitle = strrchr(strNewFileName, '\\');
GetDirView()->SetItemText(strOldFileName, ++pNewTitle);
}
}
FindClose(hFind);
CFile::Rename(strOldFileName, strNewFileName);
GetListCtrl().SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, strNew);
*pResult = 0;
}
void CFileView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == 13)//VK_ENTER
{
CString strFileName;
if(MakeFileNameFromListItem(strFileName))
{
if(CGlobal::IsImgFile(strFileName))
{
((CQuickImageApp*)AfxGetApp())->m_pImageTemplate->
OpenDocumentFile(strFileName);
}
else
{
WIN32_FIND_DATA stFindData;
HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
GetDirView()->ExpendItem(strFileName + _T("\\"));
}
}
FindClose(hFind);;
}
}
}
else if(nChar == 46)//Delete
{
CString strFileName;
if(MakeFileNameFromListItem(strFileName))
{
WIN32_FIND_DATA stFindData;
HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
GetDirView()->DeleteItem(strFileName + _T("\\"));
}
}
DeleteFile(strFileName);
FindClose(hFind);
POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
GetListCtrl().DeleteItem(GetListCtrl().GetNextSelectedItem(pos));
}
}
CListView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CFileView::OnDirButtons(UINT nID)
{
CListCtrl &rList = GetListCtrl();
int iHot = rList.GetNextItem(-1, LVNI_SELECTED);
switch(nID)
{
case ID_DIR_UP:
GetDirView()->MoveToUpFolder();
ListFiles();
break;
case ID_DIR_HOME:
if(iHot != -1)
{
rList.SetItemState(iHot,
~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
rList.SetItemState(0,
LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
break;
case ID_DIR_PREV:
if(iHot != -1)
{
rList.SetItemState(iHot,
~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
iHot --;
if(iHot == -1)
{
iHot = rList.GetItemCount() -1;
}
rList.SetItemState(iHot,
LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
else
{
rList.SetItemState(rList.GetItemCount() -1,
LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
break;
case ID_DIR_NEXT:
if(iHot != -1)
{
rList.SetItemState(iHot,
~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
iHot ++;
if(iHot == rList.GetItemCount())
{
iHot = 0;
}
rList.SetItemState(iHot,
LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
else
{
rList.SetItemState(0,
LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
break;
case ID_DIR_END:
if(iHot != -1)
{
rList.SetItemState(iHot,
~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
rList.SetItemState(rList.GetItemCount() -1,
LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
break;
default:
break;
}
}
void CFileView::OnUpdateDirButtons(CCmdUI *pCmdUI)
{
/* switch(pCmdUI->m_nID)
{
case ID_DIR_UP:
pCmdUI->Enable(TRUE);
break;
case ID_DIR_HOME:
break;
case ID_DIR_PREV:
break;
case ID_DIR_NEXT:
break;
case ID_DIR_END:
break;
default:
break;
}*/
pCmdUI->Enable(TRUE);
}
int CALLBACK CFileView::SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, g_iSortColumn);
CString strItem2 = pListCtrl->GetItemText(lParam2, g_iSortColumn);
CString strFile1 = g_strCurrentDir + strItem1;
CString strFile2 = g_strCurrentDir + strItem2;
WIN32_FIND_DATA stFindData;
BOOL bIsFolder1, bIsFolder2;
HANDLE hFind = FindFirstFile((LPCTSTR)strFile1, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
bIsFolder1 = stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
}
hFind = FindFirstFile((LPCTSTR)strFile2, &stFindData);
if (INVALID_HANDLE_VALUE != hFind)
{
bIsFolder2 = stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
}
FindClose(hFind);
if(bIsFolder1 && !bIsFolder2)
return -1;
if(!bIsFolder1 && bIsFolder2)
return 1;
return strcmp(strItem1, strItem2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -