visual studio 2010 编译错误(全程序)求解 本帖最后由 baokuishhuai 于 2012-07-12 21:01:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // FileMngDlg.cpp : 实现文件//#include "stdafx.h"#include "FileMng.h"#include "FileMngDlg.h"#include "RenameDlg.h"#include <cstringt.h>#include "afxdialogex.h"#include <tchar.h>#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx{public: CAboutDlg();// 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected: DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()// CFileMngDlg 对话框CFileMngDlg::CFileMngDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CFileMngDlg::IDD, pParent) , m_bHideFile(FALSE) , m_bSysFile(FALSE) , m_nDelOpt(0){ m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CFileMngDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_DIRPATH, m_ctrlDirPath); DDX_Control(pDX, IDC_DIRTREE, m_ctrlDirTree); DDX_Check(pDX, IDC_CHECK1, m_bHideFile); DDX_Check(pDX, IDC_CHECK2, m_bSysFile); DDX_Radio(pDX, IDC_DELOPT, m_nDelOpt); DDX_Control(pDX, IDC_FILELIST, m_ctrlFileList);}BEGIN_MESSAGE_MAP(CFileMngDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_NOTIFY(TVN_SELCHANGED, IDC_DIRTREE, &CFileMngDlg::OnTvnSelchangedDirtree) ON_NOTIFY(TVN_ITEMEXPANDING, IDC_DIRTREE, &CFileMngDlg::OnTvnItemexpandingDirtree) ON_NOTIFY(NM_CLICK, IDC_FILELIST, &CFileMngDlg::OnClickFilelist) ON_NOTIFY(NM_DBLCLK, IDC_FILELIST, &CFileMngDlg::OnDblclkFilelist) ON_BN_CLICKED(IDC_STEPTO, &CFileMngDlg::OnClickedStepto) ON_CBN_SELCHANGE(IDC_DIRPATH, &CFileMngDlg::OnSelchangeDirpath) ON_BN_CLICKED(IDC_HIDEFILE, &CFileMngDlg::OnClickedHidefile) ON_BN_CLICKED(IDC_SYSFILES, &CFileMngDlg::OnClickedSysfiles) ON_BN_CLICKED(IDC_OPENTO, &CFileMngDlg::OnBnClickedOpento) ON_BN_CLICKED(IDC_RENAME, &CFileMngDlg::OnBnClickedRename) ON_BN_CLICKED(IDC_COPYTO, &CFileMngDlg::OnBnClickedCopyto) ON_BN_CLICKED(IDC_MOVETO, &CFileMngDlg::OnBnClickedMoveto) ON_BN_CLICKED(IDC_DELETE, &CFileMngDlg::OnBnClickedDelete)END_MESSAGE_MAP()// CFileMngDlg 消息处理程序BOOL CFileMngDlg::OnInitDialog(){ CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 //初始化按钮图标 m_ctrlOpenTo.SubclassDlgItem(IDC_OPENTO, this); // “打开”按钮 m_ctrlRename.SubclassDlgItem(IDC_RENAME, this); // “重命名”按钮 m_ctrlCopyTo.SubclassDlgItem(IDC_COPYTO, this); // “复制到”按钮 m_ctrlMoveTo.SubclassDlgItem(IDC_MOVETO, this); // “移动到”按钮 m_ctrlDelete.SubclassDlgItem(IDC_DELETE, this); // “删除”按钮 m_ctrlCopyTo.LoadBitmaps(IDB_BITMAP3, IDB_BITMAP4); // 正常与按下时的位图 m_ctrlMoveTo.LoadBitmaps(IDB_BITMAP5, IDB_BITMAP6); m_ctrlDelete.LoadBitmaps(IDB_BITMAP7, IDB_BITMAP8); m_ctrlOpenTo.LoadBitmaps(IDB_BITMAP9, IDB_BITMAP10); m_ctrlRename.LoadBitmaps(IDB_BITMAP11, IDB_BITMAP12); // 初始化工具提示 m_ctrlToolTip.Create(this); // 创建工具提示 m_ctrlToolTip.Activate(TRUE); // 激活工具提示 m_ctrlToolTip.SetDelayTime(300); // 设置提示信息延迟时间300ms m_ctrlToolTip.AddTool(GetDlgItem(IDC_COPYTO), _T("复制文件(目录)到指定位置")); m_ctrlToolTip.AddTool(GetDlgItem(IDC_MOVETO), _T("移动文件(目录)到指定位置")); m_ctrlToolTip.AddTool(GetDlgItem(IDC_DELETE), _T("删除选中的文件(目录)")); m_ctrlToolTip.AddTool(GetDlgItem(IDC_OPENTO), _T("在外部打开该文件或目录")); m_ctrlToolTip.AddTool(GetDlgItem(IDC_RENAME), _T("重命名文件或目录")); // 初始化树形控件的图像列表 m_ctrlTreeImages.Create(16, 16, ILC_COLOR32, 9, 9); // 初始化图像列表 m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON1));// 0,桌面 m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON3));// 1,文件夹(正常) m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); // 2,文件夹(打开 m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON5)); // 3,本地磁盘 m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON6)); // 4,我的电脑 m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON7)); // 5,我的文档 m_ctrlDirTree.SetImageList(&m_ctrlTreeImages, TVSIL_NORMAL);// 设置图像列表 m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON7));// 5, 我的文档 // 初始化树形控件 m_hSelectItem = m_ctrlDirTree.InsertItem(_T("桌面"), 0, 0, TVI_ROOT); // 添加桌面节点 UpdateTreeItem(m_hSelectItem); // 更新桌面节点 m_strCurrPath = GetItemPath(m_hSelectItem); // 当前路径 m_ctrlDirTree.SelectItem(m_hSelectItem); // 默认选中桌面节点 m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开桌面节点 // 初始化列表控件的图像列表 m_ctrlListImages.Create(16, 16, ILC_COLOR32, 4, 4); m_ctrlListImages.Add(AfxGetApp()->LoadIcon(IDI_ICON2));// 0, 文件 m_ctrlListImages.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); // 1, 文件夹(正常) m_ctrlListImages.Add(AfxGetApp()->LoadIcon(IDI_ICON5));// 2, 本地磁盘 m_ctrlFileList.SetImageList(&m_ctrlListImages, LVSIL_SMALL);// 设置图像列表 // 初始化列表控件 m_ctrlFileList.SetExtendedStyle(LVS_EX_FULLROWSELECT); // 整行选择 m_ctrlFileList.InsertColumn(0, _T("名称"), LVCFMT_LEFT, 200); m_ctrlFileList.InsertColumn(1, _T("大小"), LVCFMT_RIGHT, 60); m_ctrlFileList.InsertColumn(2, _T("类型"), LVCFMT_CENTER, 60); m_ctrlFileList.InsertColumn(3, _T("修改日期"), LVCFMT_LEFT, 140); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}void CFileMngDlg::OnSysCommand(UINT nID, LPARAM lParam){ if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); }}// 如果向对话框添加最小化按钮,则需要下面的代码// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,// 这将由框架自动完成。void CFileMngDlg::OnPaint(){ if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); }}//当用户拖动最小化窗口时系统调用此函数取得光标//显示。HCURSOR CFileMngDlg::OnQueryDragIcon(){ return static_cast<HCURSOR>(m_hIcon);}BOOL CFileMngDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 m_ctrlToolTip.RelayEvent(pMsg); // 预处理鼠标消息 return CDialog::PreTranslateMessage(pMsg);} BOOL CFileMngDlg::DeleChildItems(HTREEITEM hItem){ HTREEITEM hChild = m_ctrlDirTree.GetChildItem(hItem); // 取得子节点 for (; hChild; hChild = m_ctrlDirTree.GetNextItem(hItem, TVGN_CHILD)) m_ctrlDirTree.DeleteItem(hChild); // 删除该节点 return TRUE;}BOOL CFileMngDlg::PathHasSubDirs(CString strPath){ CFileFind finder; if (strPath.Right(1) != "\\") strPath += "\\"; // 路径分隔符 for (BOOL bFind = finder.FindFile(strPath+"*.*"); bFind; ) { bFind = finder.FindNextFile(); // 查找下一个文件 if (finder.IsDots()) continue; // 父目录,跳过 if (!finder.IsDirectory()) continue; // 文件,跳过 else return finder.Close(), TRUE; // 文件夹,关闭并结束 } return finder.Close(), FALSE; // 不包含子文件夹}BOOL CFileMngDlg::UpdateItemDirs(HTREEITEM hItem){ CFileFind finder; CString strTemp = GetItemPath(hItem); // 取得节点的绝对路径 if (strTemp.Right(1) != "\\") strTemp += "\\"; for (BOOL bFind = finder.FindFile(strTemp+"*.*"); bFind; ) { bFind = finder.FindNextFile(); // 查找下一个文件 if (finder.IsDots() || !finder.IsDirectory()) continue; // 忽略父目录及文件 if (finder.IsHidden() && !m_bHideFile) continue; // 跳过隐藏文件夹 if (finder.IsSystem() && !m_bSysFile) continue; // 跳过系统文件夹 strTemp = finder.GetFileName(); // 取得文件夹名称 HTREEITEM hTemp = m_ctrlDirTree.InsertItem(strTemp, 1, 2, hItem); if (PathHasSubDirs(finder.GetFilePath())) // 含有子目录 m_ctrlDirTree.InsertItem(_T(""), hTemp); // 添加空节点 } finder.Close(); return TRUE;}BOOL CFileMngDlg::UpdateTreeItem(HTREEITEM hItem){ int nItem = 0; m_ctrlFileList.DeleteAllItems(); // 删除所有项 if(strPath.IsEmpty()) // 为空表示“我的电脑” { // 更新磁盘信息, …… } else { // 更新文件信息 CFileFind finder; if (strPath.Right(1) != "\\") strPath += "\\"; for (BOOL bFind = finder.FindFile(strPath +"*.*"); bFind; ) { bFind = finder.FindNextFile(); // 查找下一个文件 if (finder.IsDots()) continue; // 忽略父目录 if (finder.IsHidden() && !m_bHideFile) continue; // 显示隐藏文件? if (finder.IsSystem() && !m_bSysFile) continue; // 显示系统文件? BOOL bDir = finder.IsDirectory(); // 文件或目录 m_ctrlFileList.InsertItem(nItem,_T(""), bDir ? 1 : 0); // 插入一项 m_ctrlFileList.SetItemText(nItem, 0, finder.GetFileName()); m_ctrlFileList.SetItemText(nItem, 1, MakeSizeString(finder. GetLength())); m_ctrlFileList.SetItemText(nItem, 2, bDir ?_T("文件夹"):_T("文件")); CTime tmFile; finder.GetLastAccessTime(tmFile); // 最后访问时间 m_ctrlFileList.SetItemText(nItem, 3, tmFile.Format((_T("%Y年%m月%d日%H:%M")))); nItem++; } } CString strMsg; strMsg.Format(_T("共%d对象"), nItem); // 找到的数目 SetDlgItemText(IDC_MSGINFO, strMsg); // 设置提示信息 return TRUE;}CString CFileMngDlg::GetItemPath(HTREEITEM hItem){ CString strDir, strPath; HTREEITEM hTemp = hItem; while (hTemp != NULL) { strDir = m_ctrlDirTree.GetItemText(hTemp); // 取得节点名 hTemp = m_ctrlDirTree.GetParentItem(hTemp); // 取得父节点 if (!strDir.CompareNoCase(_T("我的电脑"))) break; // “我的电脑”根节点 CString strTemp = strDir; // 临时地址 if (strDir.Right(1)!="\\" && !strPath.IsEmpty()) strTemp += "\\"; strPath = strTemp + strPath; // 构造绝对路径 if (!strDir.CompareNoCase(_T("桌面"))) break; // “桌面”根节点 if (!strDir.CompareNoCase(_T("我的文档"))) break; // “我的文档”根节点 } char szPath[MAX_PATH] = {0}; ::SHGetSpecialFolderPath(m_hWnd, (LPWSTR)szPath, 0, FALSE); // “桌面”的绝对路径 strPath.Replace(_T("桌面"), (LPWSTR)szPath); ::SHGetSpecialFolderPath(m_hWnd, (LPWSTR)szPath, 5, FALSE); // “我的文档”的绝对路径 strPath.Replace(_T("我的文档"), (LPWSTR)szPath); return strPath; // 节点的绝对路径, 为空表示的是“我的电脑”}CString CFileMngDlg::MakeSizeString(DWORD dwSize){ CString strSize(""); if (dwSize >= 1024*1024) strSize.Format(_T("%.1fMB"), (float)dwSize/1024/1024); else if (dwSize > 0) strSize.Format(_T("%.1fKB"), (float)dwSize/1024); return strSize;}BOOL CFileMngDlg::UpdateListItem(CString strPath){ int nItem = 0; m_ctrlFileList.DeleteAllItems(); // 删除所有项 if (strPath.IsEmpty()) // 为空表示“我的电脑” { // 更新磁盘信息 char szPath[MAX_PATH] = {0}; ::GetLogicalDriveStrings(MAX_PATH, (LPWSTR)szPath); // 取得逻辑磁盘的卷标 for (char *s = szPath; *s; s += strlen(s)+1) { if (::GetDriveType(s) != DRIVE_FIXED) continue; // 本地磁盘(硬盘) m_ctrlFileList.InsertItem(nItem,_T(""), 2); // 插入一项,硬盘图标 m_ctrlFileList.SetItemText(nItem, 0, (LPCTSTR)(LPTSTR)s); // 卷标 m_ctrlFileList.SetItemText(nItem, 1, _T("")); // 大小 m_ctrlFileList.SetItemText(nItem, 2, _T("本地磁盘")); // 类型 nItem++; } } else { // 更新文件信息…… } return TRUE;}void CFileMngDlg::OnTvnSelchangedDirtree(NMHDR *pNMHDR, LRESULT *pResult){ LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0; UpdateData(TRUE); m_hSelectItem = pNMTreeView->itemNew.hItem; // 当前选中的节点 m_strCurrPath = GetItemPath(m_hSelectItem); // 该节点的绝对路径 UpdateListItem(m_strCurrPath); // 更新列表控件 m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开该节点 if (m_strCurrPath.IsEmpty()) m_ctrlDirPath.AddString(_T("我的电脑")); else m_ctrlDirPath.AddString(m_strCurrPath); // 添加到地址栏 m_ctrlDirPath.SetCurSel(m_ctrlDirPath.GetCount()-1); // 选中该地址}void CFileMngDlg::OnTvnItemexpandingDirtree(NMHDR *pNMHDR, LRESULT *pResult){ LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0; UpdateData(TRUE); HTREEITEM hItem = pNMTreeView->itemNew.hItem; // 需要展开的节点 UpdateTreeItem(hItem); // 更新该节点}HANDLE CFileMngDlg::GetNameItem(CString strName){ DeleChildItems(m_hSelectItem); // 删除所有子节点 UpdateTreeItem(m_hSelectItem); // 重新更新节点 HTREEITEM hItem = m_ctrlDirTree.GetChildItem(m_hSelectItem); while (hItem != NULL) { if (!strName.Compare(m_ctrlDirTree.GetItemText(hItem))) break; // 找到该节点 else hItem = m_ctrlDirTree.GetNextItem(hItem, TVGN_NEXT); // 取得下一节点 } return hItem; // 如果找到返回该节点,否则返回NULL} void CFileMngDlg::OnClickFilelist(NMHDR *pNMHDR, LRESULT *pResult){ LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0; if (pNMItemActivate->iItem == -1) return; int nItem = pNMItemActivate->iItem; // 选中的列表项 CString strName = m_ctrlFileList.GetItemText(nItem, 0);// 选中项的名称 if (!m_strCurrPath.IsEmpty() && m_strCurrPath.Right(1)!="\\") m_strCurrPath+="\\"; m_strCurrFile = m_strCurrPath + strName; // 该文件的全路径 m_bSelectFile = GetNameItem(strName) ? FALSE : TRUE; // 文件或文件夹 if (strName.IsEmpty()) strName("就绪"); SetDlgItemText(IDC_MSGINFO, strName); // 提示选中的文件信息}void CFileMngDlg::OnDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult){ LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0; LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE> (pNMHDR); *pResult = 0; if (pNMItemActivate->iItem == -1) return; int nItem = pNMItemActivate->iItem; // 选中的列表项 UpdateData(TRUE); CString strTemp = m_ctrlFileList.GetItemText(nItem, 0); HTREEITEM hItem = (HTREEITEM)GetNameItem(strTemp); // 是否选中文件夹 if (hItem != NULL) m_hSelectItem = hItem; // 重新设置当前节点 m_ctrlDirTree.SelectItem(m_hSelectItem); // 使该节点被选中 m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开该节点 UpdateListItem(GetItemPath(m_hSelectItem)); // 更新目录下的文件}void CFileMngDlg::OnClickedStepto(){ // TODO: 在此添加控件通知处理程序代码 UpdateTreeItem(m_hSelectItem); // 更新节点的目录结构 UpdateListItem(m_strCurrPath); // 更新路径下的文件信息}void CFileMngDlg::OnSelchangeDirpath(){ // TODO: 在此添加控件通知处理程序代码 int i = m_ctrlDirPath.GetCurSel(); // 选中项的索引 m_ctrlDirPath.GetLBText(i, m_strCurrPath); // 选中项的路径 if (!m_strCurrPath.CompareNoCase(_T("我的电脑"))); m_strCurrPath = ""; // 根路径 OnClickedStepto(); // 更新信息}void CFileMngDlg::OnClickedHidefile(){ // TODO: 在此添加控件通知处理程序代码 m_bHideFile = !m_bHideFile; UpdateTreeItem(m_hSelectItem); // 更新目录结构 m_ctrlDirTree.SelectItem(m_hSelectItem); // 选中当前节点 m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开当前节点 UpdateListItem(GetItemPath(m_hSelectItem)); // 更新文件列表}void CFileMngDlg::OnClickedSysfiles(){ // TODO: 在此添加控件通知处理程序代码 m_bSysFile = !m_bSysFile; UpdateTreeItem(m_hSelectItem); // 更新目录结构 m_ctrlDirTree.SelectItem(m_hSelectItem); // 选中当前节点 m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开当前节点 UpdateListItem(GetItemPath(m_hSelectItem)); // 更新文件列表}void CFileMngDlg::OnBnClickedOpento(){ // TODO: 在此添加控件通知处理程序代码 if (m_strCurrFile.IsEmpty()) return; ::ShellExecute(NULL, _T("open"),m_strCurrFile,_T(""),_T(""), SW_SHOWNORMAL);}void CFileMngDlg::OnBnClickedRename(){ // TODO: 在此添加控件通知处理程序代码 if (m_strCurrFile.IsEmpty()) return; // 未选中文件 CRenameDlg *pDlg = new CRenameDlg(this); pDlg->Create(IDD_RENAME_DIALOG, this); // 创建无模式对话框 int nLen = m_strCurrFile.GetLength(); int nPos = m_strCurrFile.ReverseFind('\\'); pDlg->m_strOldName = m_strCurrFile.Right(nLen-nPos-1); // 原文件名称 pDlg->m_strFilePath = m_strCurrPath; // 文件全路径 pDlg->ShowWindow(SW_SHOW); // 显示无模式对话框 pDlg->UpdateData(FALSE); // 更新控件的显示数据}BOOL CFileMngDlg::FileOperation(UINT nFlag, CString strDest, bool bUndo){ char szFromPath[MAX_PATH] = {0}; lstrcpy((LPWSTR)szFromPath, m_strCurrFile); SHFILEOPSTRUCT fo; ::ZeroMemory(&fo, sizeof(fo)); fo.hwnd = m_hWnd; // 父窗口句柄 fo.wFunc = nOpt; // 执行的操作 fo.pFrom = (LPCTSTR)(LPTSTR)szFromPath; // 源文件路径 fo.pTo = strDest; // 目的路径 fo.fFlags = FOF_SIMPLEPROGRESS; // 显示进度条 if (bUndo) fo.fFlags |= FOF_ALLOWUNDO; // 允许撤销 fo.lpszProgressTitle = strDest; // 进度条标题 return ::SHFileOperation(&fo);}void CFileMngDlg::OnBnClickedCopyto(){ // TODO: 在此添加控件通知处理程序代码 if (m_strCurrFile.IsEmpty()) return; // 未选择文件 int nLen = m_strCurrFile.GetLength(); int nPos = m_strCurrFile.ReverseFind('\\'); CFileDialog dlg(FALSE, NULL, m_strCurrFile.Right(nLen-nPos-1)); if (dlg.DoModal() != IDOK) return; // 弹出文件对话框 FileOperation(FO_COPY, dlg.GetPathName(), TRUE); // 复制文件到目的路径}void CFileMngDlg::OnBnClickedMoveto(){ // TODO: 在此添加控件通知处理程序代码 if (m_strCurrFile.IsEmpty()) return; // 未选择文件 int nLen = m_strCurrFile.GetLength(); int nPos = m_strCurrFile.ReverseFind('\\'); CFileDialog dlg(FALSE, NULL, m_strCurrFile.Right(nLen-nPos-1)); if (dlg.DoModal() != IDOK) return; // 弹出文件对话框 FileOperation(FO_MOVE, dlg.GetPathName(), TRUE); // 移动文件到目的路径}void CFileMngDlg::OnBnClickedDelete(){ // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if (m_strCurrFile.IsEmpty()) return; // 未选择文件 FileOperation(FO_DELETE, _T(""), m_nDelOpt==0); // 删除文件 UpdateListItem(m_strCurrPath); // 更新文件列表 UpdateTreeItem(m_hSelectItem); // 更新目录结构} 请问:位图压缩的算法 怎样结束另一个相同进程名的进程 VS2008 基于对话框 新建对话框问题 有人用过gui designer studio没啊 怎样做upx.exe的可视化界面 定义CString变量错误 为什么没有视图也能打印? 如何制作英文词库? 本地组件(.exe)是否得先运行,本地客户才能用? 高手留步,帮忙看一下很简单的一段读取位图并显示的代码! 如何取得整个屏幕的矩形坐标?(或者长度和宽度也行) 求VLCWrapper源码
// FileMngDlg.cpp : 实现文件
//#include "stdafx.h"
#include "FileMng.h"
#include "FileMngDlg.h"
#include "RenameDlg.h"
#include <cstringt.h>
#include "afxdialogex.h"
#include <tchar.h>#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();// 对话框数据
enum { IDD = IDD_ABOUTBOX }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:
DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CFileMngDlg 对话框
CFileMngDlg::CFileMngDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CFileMngDlg::IDD, pParent)
, m_bHideFile(FALSE)
, m_bSysFile(FALSE)
, m_nDelOpt(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CFileMngDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_DIRPATH, m_ctrlDirPath);
DDX_Control(pDX, IDC_DIRTREE, m_ctrlDirTree);
DDX_Check(pDX, IDC_CHECK1, m_bHideFile);
DDX_Check(pDX, IDC_CHECK2, m_bSysFile);
DDX_Radio(pDX, IDC_DELOPT, m_nDelOpt);
DDX_Control(pDX, IDC_FILELIST, m_ctrlFileList);
}BEGIN_MESSAGE_MAP(CFileMngDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(TVN_SELCHANGED, IDC_DIRTREE, &CFileMngDlg::OnTvnSelchangedDirtree)
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_DIRTREE, &CFileMngDlg::OnTvnItemexpandingDirtree)
ON_NOTIFY(NM_CLICK, IDC_FILELIST, &CFileMngDlg::OnClickFilelist)
ON_NOTIFY(NM_DBLCLK, IDC_FILELIST, &CFileMngDlg::OnDblclkFilelist)
ON_BN_CLICKED(IDC_STEPTO, &CFileMngDlg::OnClickedStepto)
ON_CBN_SELCHANGE(IDC_DIRPATH, &CFileMngDlg::OnSelchangeDirpath)
ON_BN_CLICKED(IDC_HIDEFILE, &CFileMngDlg::OnClickedHidefile)
ON_BN_CLICKED(IDC_SYSFILES, &CFileMngDlg::OnClickedSysfiles)
ON_BN_CLICKED(IDC_OPENTO, &CFileMngDlg::OnBnClickedOpento)
ON_BN_CLICKED(IDC_RENAME, &CFileMngDlg::OnBnClickedRename)
ON_BN_CLICKED(IDC_COPYTO, &CFileMngDlg::OnBnClickedCopyto)
ON_BN_CLICKED(IDC_MOVETO, &CFileMngDlg::OnBnClickedMoveto)
ON_BN_CLICKED(IDC_DELETE, &CFileMngDlg::OnBnClickedDelete)
END_MESSAGE_MAP()
// CFileMngDlg 消息处理程序BOOL CFileMngDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
//初始化按钮图标
m_ctrlOpenTo.SubclassDlgItem(IDC_OPENTO, this); // “打开”按钮
m_ctrlRename.SubclassDlgItem(IDC_RENAME, this); // “重命名”按钮
m_ctrlCopyTo.SubclassDlgItem(IDC_COPYTO, this); // “复制到”按钮
m_ctrlMoveTo.SubclassDlgItem(IDC_MOVETO, this); // “移动到”按钮
m_ctrlDelete.SubclassDlgItem(IDC_DELETE, this); // “删除”按钮 m_ctrlCopyTo.LoadBitmaps(IDB_BITMAP3, IDB_BITMAP4); // 正常与按下时的位图
m_ctrlMoveTo.LoadBitmaps(IDB_BITMAP5, IDB_BITMAP6);
m_ctrlDelete.LoadBitmaps(IDB_BITMAP7, IDB_BITMAP8);
m_ctrlOpenTo.LoadBitmaps(IDB_BITMAP9, IDB_BITMAP10);
m_ctrlRename.LoadBitmaps(IDB_BITMAP11, IDB_BITMAP12); // 初始化工具提示
m_ctrlToolTip.Create(this); // 创建工具提示
m_ctrlToolTip.Activate(TRUE); // 激活工具提示
m_ctrlToolTip.SetDelayTime(300); // 设置提示信息延迟时间300ms
m_ctrlToolTip.AddTool(GetDlgItem(IDC_COPYTO), _T("复制文件(目录)到指定位置"));
m_ctrlToolTip.AddTool(GetDlgItem(IDC_MOVETO), _T("移动文件(目录)到指定位置"));
m_ctrlToolTip.AddTool(GetDlgItem(IDC_DELETE), _T("删除选中的文件(目录)"));
m_ctrlToolTip.AddTool(GetDlgItem(IDC_OPENTO), _T("在外部打开该文件或目录"));
m_ctrlToolTip.AddTool(GetDlgItem(IDC_RENAME), _T("重命名文件或目录")); // 初始化树形控件的图像列表
m_ctrlTreeImages.Create(16, 16, ILC_COLOR32, 9, 9); // 初始化图像列表
m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON1));// 0,桌面
m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON3));// 1,文件夹(正常)
m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); // 2,文件夹(打开
m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON5)); // 3,本地磁盘
m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON6)); // 4,我的电脑
m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON7)); // 5,我的文档
m_ctrlDirTree.SetImageList(&m_ctrlTreeImages, TVSIL_NORMAL);// 设置图像列表 m_ctrlTreeImages.Add(AfxGetApp()->LoadIcon(IDI_ICON7));// 5, 我的文档
// 初始化树形控件
m_hSelectItem = m_ctrlDirTree.InsertItem(_T("桌面"), 0, 0, TVI_ROOT); // 添加桌面节点
UpdateTreeItem(m_hSelectItem); // 更新桌面节点
m_strCurrPath = GetItemPath(m_hSelectItem); // 当前路径
m_ctrlDirTree.SelectItem(m_hSelectItem); // 默认选中桌面节点
m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开桌面节点 // 初始化列表控件的图像列表
m_ctrlListImages.Create(16, 16, ILC_COLOR32, 4, 4);
m_ctrlListImages.Add(AfxGetApp()->LoadIcon(IDI_ICON2));// 0, 文件
m_ctrlListImages.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); // 1, 文件夹(正常)
m_ctrlListImages.Add(AfxGetApp()->LoadIcon(IDI_ICON5));// 2, 本地磁盘
m_ctrlFileList.SetImageList(&m_ctrlListImages, LVSIL_SMALL);// 设置图像列表 // 初始化列表控件
m_ctrlFileList.SetExtendedStyle(LVS_EX_FULLROWSELECT); // 整行选择
m_ctrlFileList.InsertColumn(0, _T("名称"), LVCFMT_LEFT, 200);
m_ctrlFileList.InsertColumn(1, _T("大小"), LVCFMT_RIGHT, 60);
m_ctrlFileList.InsertColumn(2, _T("类型"), LVCFMT_CENTER, 60);
m_ctrlFileList.InsertColumn(3, _T("修改日期"), LVCFMT_LEFT, 140); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}void CFileMngDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CFileMngDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CFileMngDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}BOOL CFileMngDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
m_ctrlToolTip.RelayEvent(pMsg); // 预处理鼠标消息 return CDialog::PreTranslateMessage(pMsg);
}
{
HTREEITEM hChild = m_ctrlDirTree.GetChildItem(hItem); // 取得子节点
for (; hChild; hChild = m_ctrlDirTree.GetNextItem(hItem, TVGN_CHILD))
m_ctrlDirTree.DeleteItem(hChild); // 删除该节点
return TRUE;
}BOOL CFileMngDlg::PathHasSubDirs(CString strPath)
{
CFileFind finder;
if (strPath.Right(1) != "\\") strPath += "\\"; // 路径分隔符
for (BOOL bFind = finder.FindFile(strPath+"*.*"); bFind; )
{
bFind = finder.FindNextFile(); // 查找下一个文件
if (finder.IsDots()) continue; // 父目录,跳过
if (!finder.IsDirectory()) continue; // 文件,跳过
else return finder.Close(), TRUE; // 文件夹,关闭并结束
}
return finder.Close(), FALSE; // 不包含子文件夹
}BOOL CFileMngDlg::UpdateItemDirs(HTREEITEM hItem)
{
CFileFind finder;
CString strTemp = GetItemPath(hItem); // 取得节点的绝对路径
if (strTemp.Right(1) != "\\") strTemp += "\\";
for (BOOL bFind = finder.FindFile(strTemp+"*.*"); bFind; )
{
bFind = finder.FindNextFile(); // 查找下一个文件
if (finder.IsDots() || !finder.IsDirectory()) continue; // 忽略父目录及文件
if (finder.IsHidden() && !m_bHideFile) continue; // 跳过隐藏文件夹
if (finder.IsSystem() && !m_bSysFile) continue; // 跳过系统文件夹 strTemp = finder.GetFileName(); // 取得文件夹名称
HTREEITEM hTemp = m_ctrlDirTree.InsertItem(strTemp, 1, 2, hItem);
if (PathHasSubDirs(finder.GetFilePath())) // 含有子目录
m_ctrlDirTree.InsertItem(_T(""), hTemp); // 添加空节点
}
finder.Close();
return TRUE;
}BOOL CFileMngDlg::UpdateTreeItem(HTREEITEM hItem)
{
int nItem = 0;
m_ctrlFileList.DeleteAllItems(); // 删除所有项
if(strPath.IsEmpty()) // 为空表示“我的电脑”
{ // 更新磁盘信息, ……
}
else
{ // 更新文件信息
CFileFind finder;
if (strPath.Right(1) != "\\") strPath += "\\";
for (BOOL bFind = finder.FindFile(strPath +"*.*"); bFind; )
{
bFind = finder.FindNextFile(); // 查找下一个文件
if (finder.IsDots()) continue; // 忽略父目录
if (finder.IsHidden() && !m_bHideFile) continue; // 显示隐藏文件?
if (finder.IsSystem() && !m_bSysFile) continue; // 显示系统文件?
BOOL bDir = finder.IsDirectory(); // 文件或目录
m_ctrlFileList.InsertItem(nItem,_T(""), bDir ? 1 : 0); // 插入一项
m_ctrlFileList.SetItemText(nItem, 0, finder.GetFileName());
m_ctrlFileList.SetItemText(nItem, 1, MakeSizeString(finder. GetLength()));
m_ctrlFileList.SetItemText(nItem, 2, bDir ?_T("文件夹"):_T("文件"));
CTime tmFile; finder.GetLastAccessTime(tmFile); // 最后访问时间
m_ctrlFileList.SetItemText(nItem, 3, tmFile.Format((_T("%Y年%m月%d日%H:%M"))));
nItem++;
}
}
CString strMsg;
strMsg.Format(_T("共%d对象"), nItem); // 找到的数目
SetDlgItemText(IDC_MSGINFO, strMsg); // 设置提示信息
return TRUE;
}
CString CFileMngDlg::GetItemPath(HTREEITEM hItem)
{
CString strDir, strPath;
HTREEITEM hTemp = hItem;
while (hTemp != NULL)
{
strDir = m_ctrlDirTree.GetItemText(hTemp); // 取得节点名
hTemp = m_ctrlDirTree.GetParentItem(hTemp); // 取得父节点
if (!strDir.CompareNoCase(_T("我的电脑"))) break; // “我的电脑”根节点 CString strTemp = strDir; // 临时地址
if (strDir.Right(1)!="\\" && !strPath.IsEmpty())
strTemp += "\\";
strPath = strTemp + strPath; // 构造绝对路径
if (!strDir.CompareNoCase(_T("桌面"))) break; // “桌面”根节点
if (!strDir.CompareNoCase(_T("我的文档"))) break; // “我的文档”根节点
} char szPath[MAX_PATH] = {0};
::SHGetSpecialFolderPath(m_hWnd, (LPWSTR)szPath, 0, FALSE); // “桌面”的绝对路径
strPath.Replace(_T("桌面"), (LPWSTR)szPath); ::SHGetSpecialFolderPath(m_hWnd, (LPWSTR)szPath, 5, FALSE); // “我的文档”的绝对路径
strPath.Replace(_T("我的文档"), (LPWSTR)szPath);
return strPath; // 节点的绝对路径, 为空表示的是“我的电脑”
}
CString CFileMngDlg::MakeSizeString(DWORD dwSize)
{
CString strSize("");
if (dwSize >= 1024*1024)
strSize.Format(_T("%.1fMB"), (float)dwSize/1024/1024);
else if (dwSize > 0)
strSize.Format(_T("%.1fKB"), (float)dwSize/1024);
return strSize;}BOOL CFileMngDlg::UpdateListItem(CString strPath)
{
int nItem = 0;
m_ctrlFileList.DeleteAllItems(); // 删除所有项
if (strPath.IsEmpty()) // 为空表示“我的电脑”
{ // 更新磁盘信息
char szPath[MAX_PATH] = {0};
::GetLogicalDriveStrings(MAX_PATH, (LPWSTR)szPath); // 取得逻辑磁盘的卷标
for (char *s = szPath; *s; s += strlen(s)+1)
{
if (::GetDriveType(s) != DRIVE_FIXED) continue; // 本地磁盘(硬盘)
m_ctrlFileList.InsertItem(nItem,_T(""), 2); // 插入一项,硬盘图标
m_ctrlFileList.SetItemText(nItem, 0, (LPCTSTR)(LPTSTR)s); // 卷标
m_ctrlFileList.SetItemText(nItem, 1, _T("")); // 大小
m_ctrlFileList.SetItemText(nItem, 2, _T("本地磁盘")); // 类型
nItem++;
}
}
else
{ // 更新文件信息……
}
return TRUE;
}void CFileMngDlg::OnTvnSelchangedDirtree(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
UpdateData(TRUE);
m_hSelectItem = pNMTreeView->itemNew.hItem; // 当前选中的节点
m_strCurrPath = GetItemPath(m_hSelectItem); // 该节点的绝对路径
UpdateListItem(m_strCurrPath); // 更新列表控件
m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开该节点
if (m_strCurrPath.IsEmpty()) m_ctrlDirPath.AddString(_T("我的电脑"));
else m_ctrlDirPath.AddString(m_strCurrPath); // 添加到地址栏
m_ctrlDirPath.SetCurSel(m_ctrlDirPath.GetCount()-1); // 选中该地址}
void CFileMngDlg::OnTvnItemexpandingDirtree(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
UpdateData(TRUE);
HTREEITEM hItem = pNMTreeView->itemNew.hItem; // 需要展开的节点
UpdateTreeItem(hItem); // 更新该节点}HANDLE CFileMngDlg::GetNameItem(CString strName)
{
DeleChildItems(m_hSelectItem); // 删除所有子节点
UpdateTreeItem(m_hSelectItem); // 重新更新节点
HTREEITEM hItem = m_ctrlDirTree.GetChildItem(m_hSelectItem);
while (hItem != NULL)
{
if (!strName.Compare(m_ctrlDirTree.GetItemText(hItem))) break; // 找到该节点
else hItem = m_ctrlDirTree.GetNextItem(hItem, TVGN_NEXT); // 取得下一节点
}
return hItem; // 如果找到返回该节点,否则返回NULL}
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
if (pNMItemActivate->iItem == -1) return;
int nItem = pNMItemActivate->iItem; // 选中的列表项
CString strName = m_ctrlFileList.GetItemText(nItem, 0);// 选中项的名称
if (!m_strCurrPath.IsEmpty() && m_strCurrPath.Right(1)!="\\")
m_strCurrPath+="\\";
m_strCurrFile = m_strCurrPath + strName; // 该文件的全路径
m_bSelectFile = GetNameItem(strName) ? FALSE : TRUE; // 文件或文件夹
if (strName.IsEmpty()) strName("就绪");
SetDlgItemText(IDC_MSGINFO, strName); // 提示选中的文件信息}
void CFileMngDlg::OnDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE> (pNMHDR);
*pResult = 0;
if (pNMItemActivate->iItem == -1) return;
int nItem = pNMItemActivate->iItem; // 选中的列表项
UpdateData(TRUE);
CString strTemp = m_ctrlFileList.GetItemText(nItem, 0);
HTREEITEM hItem = (HTREEITEM)GetNameItem(strTemp); // 是否选中文件夹
if (hItem != NULL) m_hSelectItem = hItem; // 重新设置当前节点
m_ctrlDirTree.SelectItem(m_hSelectItem); // 使该节点被选中
m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开该节点
UpdateListItem(GetItemPath(m_hSelectItem)); // 更新目录下的文件
}
void CFileMngDlg::OnClickedStepto()
{
// TODO: 在此添加控件通知处理程序代码
UpdateTreeItem(m_hSelectItem); // 更新节点的目录结构
UpdateListItem(m_strCurrPath); // 更新路径下的文件信息
}
void CFileMngDlg::OnSelchangeDirpath()
{
// TODO: 在此添加控件通知处理程序代码
int i = m_ctrlDirPath.GetCurSel(); // 选中项的索引
m_ctrlDirPath.GetLBText(i, m_strCurrPath); // 选中项的路径
if (!m_strCurrPath.CompareNoCase(_T("我的电脑")));
m_strCurrPath = ""; // 根路径
OnClickedStepto(); // 更新信息}
void CFileMngDlg::OnClickedHidefile()
{
// TODO: 在此添加控件通知处理程序代码
m_bHideFile = !m_bHideFile;
UpdateTreeItem(m_hSelectItem); // 更新目录结构
m_ctrlDirTree.SelectItem(m_hSelectItem); // 选中当前节点
m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开当前节点
UpdateListItem(GetItemPath(m_hSelectItem)); // 更新文件列表}
void CFileMngDlg::OnClickedSysfiles()
{
// TODO: 在此添加控件通知处理程序代码
m_bSysFile = !m_bSysFile;
UpdateTreeItem(m_hSelectItem); // 更新目录结构
m_ctrlDirTree.SelectItem(m_hSelectItem); // 选中当前节点
m_ctrlDirTree.Expand(m_hSelectItem, TVE_EXPAND); // 展开当前节点
UpdateListItem(GetItemPath(m_hSelectItem)); // 更新文件列表}
void CFileMngDlg::OnBnClickedOpento()
{
// TODO: 在此添加控件通知处理程序代码
if (m_strCurrFile.IsEmpty()) return;
::ShellExecute(NULL, _T("open"),m_strCurrFile,_T(""),_T(""), SW_SHOWNORMAL);
}
void CFileMngDlg::OnBnClickedRename()
{
// TODO: 在此添加控件通知处理程序代码
if (m_strCurrFile.IsEmpty()) return; // 未选中文件 CRenameDlg *pDlg = new CRenameDlg(this);
pDlg->Create(IDD_RENAME_DIALOG, this); // 创建无模式对话框 int nLen = m_strCurrFile.GetLength();
int nPos = m_strCurrFile.ReverseFind('\\');
pDlg->m_strOldName = m_strCurrFile.Right(nLen-nPos-1); // 原文件名称
pDlg->m_strFilePath = m_strCurrPath; // 文件全路径 pDlg->ShowWindow(SW_SHOW); // 显示无模式对话框
pDlg->UpdateData(FALSE); // 更新控件的显示数据}
BOOL CFileMngDlg::FileOperation(UINT nFlag, CString strDest, bool bUndo)
{
char szFromPath[MAX_PATH] = {0};
lstrcpy((LPWSTR)szFromPath, m_strCurrFile);
SHFILEOPSTRUCT fo;
::ZeroMemory(&fo, sizeof(fo));
fo.hwnd = m_hWnd; // 父窗口句柄
fo.wFunc = nOpt; // 执行的操作
fo.pFrom = (LPCTSTR)(LPTSTR)szFromPath; // 源文件路径
fo.pTo = strDest; // 目的路径
fo.fFlags = FOF_SIMPLEPROGRESS; // 显示进度条
if (bUndo) fo.fFlags |= FOF_ALLOWUNDO; // 允许撤销
fo.lpszProgressTitle = strDest; // 进度条标题
return ::SHFileOperation(&fo);}
void CFileMngDlg::OnBnClickedCopyto()
{
// TODO: 在此添加控件通知处理程序代码
if (m_strCurrFile.IsEmpty()) return; // 未选择文件
int nLen = m_strCurrFile.GetLength();
int nPos = m_strCurrFile.ReverseFind('\\');
CFileDialog dlg(FALSE, NULL, m_strCurrFile.Right(nLen-nPos-1));
if (dlg.DoModal() != IDOK) return; // 弹出文件对话框
FileOperation(FO_COPY, dlg.GetPathName(), TRUE); // 复制文件到目的路径
}
void CFileMngDlg::OnBnClickedMoveto()
{
// TODO: 在此添加控件通知处理程序代码
if (m_strCurrFile.IsEmpty()) return; // 未选择文件
int nLen = m_strCurrFile.GetLength();
int nPos = m_strCurrFile.ReverseFind('\\');
CFileDialog dlg(FALSE, NULL, m_strCurrFile.Right(nLen-nPos-1));
if (dlg.DoModal() != IDOK) return; // 弹出文件对话框
FileOperation(FO_MOVE, dlg.GetPathName(), TRUE); // 移动文件到目的路径
}
void CFileMngDlg::OnBnClickedDelete()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (m_strCurrFile.IsEmpty()) return; // 未选择文件
FileOperation(FO_DELETE, _T(""), m_nDelOpt==0); // 删除文件
UpdateListItem(m_strCurrPath); // 更新文件列表
UpdateTreeItem(m_hSelectItem); // 更新目录结构
}