📄 mainfrm.cpp
字号:
{
m_pActiveView->OnUpFolder();
}
void CMainFrame::OnActiveListView(CChildView* pChildView)
{
m_pActiveView = pChildView;
}
// 点击“查看”按钮,在各种查看方式之间切换
void CMainFrame::OnViewFileList()
{
int nViewStyle = (int)m_pActiveView->GetViewStyle();
nViewStyle = (nViewStyle + 1) % 4;
m_pActiveView->ChangeViewStyle((VIEWSTYLE)nViewStyle);
}
void CMainFrame::OnViewBigIcon()
{
m_pActiveView->ChangeViewStyle(BIGICON);
}
void CMainFrame::OnViewSmallIcon()
{
m_pActiveView->ChangeViewStyle(SMALLICON);
}
void CMainFrame::OnViewlist()
{
m_pActiveView->ChangeViewStyle(LIST);
}
void CMainFrame::OnViewDetailInfo()
{
m_pActiveView->ChangeViewStyle(DETAILINFO);
}
// 点击工具栏下拉箭头,弹出菜单
void CMainFrame::OnToolbarDropDown(NMTOOLBAR *pnmh,LRESULT *plRes)
{
#define MENUISCHECKED(nView) \
(m_pActiveView->GetViewStyle() == nView ? MF_CHECKED : MF_UNCHECKED)
CRect rect;
CMenu menu;
CMenu* pSubMenu;
CWnd* pWnd = &m_wndToolBar;
switch (pnmh->iItem)//分析按钮的命令ID
{
case ID_VIEW:
menu.LoadMenu(IDR_VIEW);
if (menu.GetSafeHmenu() != NULL)
{
pSubMenu = menu.GetSubMenu(0);
if (pSubMenu != NULL)
{
int nCurrentStyle = m_pActiveView->GetViewStyle();
pSubMenu->SetDefaultItem(nCurrentStyle, TRUE);
pSubMenu->CheckMenuItem(ID_BIGICON, MENUISCHECKED(BIGICON));
pSubMenu->CheckMenuItem(ID_SMALLICON, MENUISCHECKED(SMALLICON));
pSubMenu->CheckMenuItem(ID_VIEWLIST, MENUISCHECKED(LIST));
pSubMenu->CheckMenuItem(ID_DETAILLIST, MENUISCHECKED(DETAILINFO));
pWnd->SendMessage(TB_GETRECT,pnmh->iItem,(LPARAM)&rect);
pWnd->ClientToScreen(&rect);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_VERTICAL,rect.left,rect.bottom,this,&rect);
}
}
break;
default:
return;
}
}
void CMainFrame::OnEditPaste()
{
UINT uDropEffect = RegisterClipboardFormat(CLIPBOARD_FORMAT);
UINT nFileCount = 0;
DWORD dwEffect; // 是什么操作 COPY、MOVE……
if (OpenClipboard()) // 打开剪贴板
{
HDROP hDrop = HDROP(GetClipboardData(CF_HDROP));
if (hDrop)
{
DWORD *dw = (DWORD*)(GetClipboardData(uDropEffect));
// 操作类型
if (dw == NULL)
{
dwEffect = DROPEFFECT_COPY;
}
else
{
dwEffect = *dw;
}
if (dwEffect == 0)
{
CloseClipboard();
return;
}
UINT uOpType;
if (dwEffect & DROPEFFECT_MOVE)
{
uOpType = FO_MOVE;
}
else if (dwEffect & DROPEFFECT_COPY)
{
uOpType = FO_COPY;
}
else
{
ASSERT(FALSE);
}
nFileCount = DragQueryFile(hDrop, (UINT) -1, NULL, 0);
if (nFileCount==0)
{
#ifdef _DEBUG
::MessageBox(NULL,"No File will be Cut/Copy",MAINFORMCAPTION,MB_OK);
#endif //_DEBUG
return;
}
char szFile[ MAX_PATH];
CShellFileOp op;
op.SetOperationFlags (uOpType, this,
FOF_FILESONLY | FOF_NOCONFIRMATION |
FOF_NOCONFIRMMKDIR | FOF_RENAMEONCOLLISION );
op.AddDestFile (m_pActiveView->GetCurrentPath());
for(UINT count = 0; count < nFileCount; count++ )
{
DragQueryFile(hDrop, count, szFile, sizeof(szFile));
//lstrcat(lpBuffer,szFile);
//lstrcat(lpBuffer,"\r\n");
op.AddSourceFile(szFile);
}
BOOL bSuccess;
BOOL bAPICalled = FALSE;
bSuccess = op.Go(&bAPICalled);
//m_pActiveView->RefreshFileList();
// 如果从 1 到 2,则两个都要刷新。//TODO
m_pWndUp->RefreshFileList();
m_pWndDown->RefreshFileList();
}
CloseClipboard();
}
}
void CMainFrame::OnEditCut()
{
CutOrCopyFiles(FALSE);
}
void CMainFrame::OnEditCopy()
{
CutOrCopyFiles(TRUE);
}
void CMainFrame::CutOrCopyFiles(BOOL bCopy)
{
CString strName;
vector<CString> vFileNames; // 存储选择的文件名
// 首先将所有选择的文件名保存在 vFileNames 中
m_pActiveView->GetSelectedFiles(vFileNames);
int nFileCount = vFileNames.size();
if (nFileCount > 0)
{
TCHAR* pszFiles;
UINT nTotalLen = 0;
pszFiles = new TCHAR[nFileCount * sizeof(TCHAR) * MAX_PATH];
LPTSTR lpBuffer;
UINT i;
int nPos = 0;
for(i = 0; i < nFileCount; ++i)
{
strName = vFileNames[i];
const int nSize = strName.GetLength();
lpBuffer = strName.GetBuffer(nSize);
strcpy(&pszFiles[nPos], lpBuffer);
strName.ReleaseBuffer();
nPos += nSize + 1;
nTotalLen += nSize + 1;
}
CClipboard::CutOrCopyFiles(pszFiles, nTotalLen, bCopy);
delete[] pszFiles;
m_pActiveView->RefreshFileList();
}
}
// 删除所选择的文件
void CMainFrame::OnEditDelete()
{
CString strName;
vector<CString> vFileNames; // 存储选择的文件名
// 首先将所有选择的文件名保存在 vFileNames 中
m_pActiveView->GetSelectedFiles(vFileNames);
int nFileCount = vFileNames.size();
if (nFileCount > 0)
{
UINT i;
CShellFileOp op;
op.SetProgressDlgTitle(MAINFORMCAPTION);
op.SetOperationFlags (FO_DELETE, this,
FOF_FILESONLY | FOF_NOCONFIRMATION |
FOF_NOCONFIRMMKDIR | FOF_RENAMEONCOLLISION | FOF_ALLOWUNDO);
for(i = 0; i < nFileCount; ++i)
{
strName = vFileNames[i];
op.AddSourceFile(strName);
}
BOOL bSuccess;
BOOL bAPICalled = FALSE;
bSuccess = op.Go(&bAPICalled);
m_pActiveView->RefreshFileList();
}
}
// 拖放文件
void CMainFrame::DragFiles(CListCtrl* pSourListCtrl, HWND hWndDest)
{
ASSERT (pSourListCtrl != NULL);
ASSERT (hWndDest != NULL);
// 判断源和目的地
CChildView* pSourChildView;
CChildView* pDestChildView;
if (pSourListCtrl->m_hWnd == m_pWndUp->m_ListCtrl.m_hWnd)
{
pSourChildView = m_pWndUp;
pDestChildView = m_pWndDown;
}
else
{
pSourChildView = m_pWndDown;
pDestChildView = m_pWndUp;
}
if (pDestChildView->m_hWnd != ::GetParent(hWndDest))
{
return; // 目标窗口不对
}
// 目标路径
CString strDestPath = pDestChildView->GetCurrentPath();
if (strDestPath.IsEmpty())
{
return;
}
vector<CString> vFileNames; // 存储选择的文件名
// 首先将所有选择的文件名保存在 vFileNames 中
pSourChildView->GetSelectedFiles(vFileNames);
int nFileCount = vFileNames.size();
if (nFileCount <= 0)
{
return;
}
int i;
CString strFileName;
//char* pFileName;
CShellFileOp op;
// 拖放视为复制文件
op.SetOperationFlags (FO_COPY, this,
FOF_FILESONLY | FOF_NOCONFIRMATION |
FOF_NOCONFIRMMKDIR | FOF_RENAMEONCOLLISION );
op.AddDestFile(strDestPath);
for(i = 0; i < nFileCount; ++i)
{
strFileName = vFileNames[i];
op.AddSourceFile(strFileName);
}
BOOL bSuccess;
BOOL bAPICalled = FALSE;
bSuccess = op.Go(&bAPICalled);
if (bSuccess)
{
// 刷新 todo 效率
m_pWndUp->RefreshFileList();
m_pWndDown->RefreshFileList();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -