// TransFormDlg.cpp : implementation file // #include "stdafx.h" #include "BatchSaveAsFileForFolder.h" #include "resource.h" //#include #include using namespace std; // CTransFormDlg dialog IMPLEMENT_DYNAMIC(TBatchSaveAsFileForFolderDlg, CDialog) TBatchSaveAsFileForFolderDlg::TBatchSaveAsFileForFolderDlg(CWnd* pParent /*=NULL*/) : CDialog(TBatchSaveAsFileForFolderDlg::IDD, pParent), m_nTangentType(0), m_nCADType(0), m_bReplace(false) { } TBatchSaveAsFileForFolderDlg::~TBatchSaveAsFileForFolderDlg() { } void TBatchSaveAsFileForFolderDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_CMB_SAVETYPE, m_wndCmbSaveType); DDX_Control(pDX, IDC_CMB_CADTYPE, m_wndCmbCadType); DDX_Control(pDX, IDC_EDT_SOURCE, m_wndEdtSource); DDX_Control(pDX, IDC_EDT_OBJECTIVE, m_wndEdtObjective); } BOOL TBatchSaveAsFileForFolderDlg::OnInitDialog() { CDialog::OnInitDialog(); CComboBox *pComST = (CComboBox*)GetDlgItem(IDC_CMB_SAVETYPE); CComboBox *pComCT = (CComboBox*)GetDlgItem(IDC_CMB_CADTYPE); if (!pComST || ! pComCT) return FALSE; pComST->AddString(_T("上华3文件(*.dlg)")); pComCT->AddString(_T("AutoCAD R14文件")); pComST->AddString(_T("上华5文件(*.dlg)")); pComST->AddString(_T("上华6文件(*.dlg)")); pComST->AddString(_T("上华7文件(*.dlg)")); pComST->AddString(_T("上华8文件(*.dlg)")); pComST->AddString(_T("上华9文件(*.dlg)")); #if ADS >= 15 pComCT->AddString(_T("AutoCAD 2000文件")); #endif #if ADS >= 16 pComCT->AddString(_T("AutoCAD 2004文件")); #endif #if ADS >= 17 pComCT->AddString(_T("AutoCAD 2007文件")); #endif #if ADS >= 18 pComCT->AddString(_T("AutoCAD 2010文件")); #endif #if ADS >= 19 pComCT->AddString(_T("AutoCAD 2013文件")); #endif m_wndCmbSaveType.SetCurSel(m_nTangentType); m_wndCmbCadType.SetCurSel(m_nCADType); return TRUE; } CString TBatchSaveAsFileForFolderDlg::GetFolderPath() { CString sFolderPath; BROWSEINFO folderInfo; ACHAR Buffer[MAX_PATH]; //浏览文件夹对话框的父窗体句柄 folderInfo.hwndOwner = NULL; //ITEMIDLIST结构的地址,包含浏览时的初始根目录, //而且只有被指定的目录和其子目录才显示在浏览文件夹对话框中。 //该成员变量可以是NULL,在此时桌面目录将被使用。 folderInfo.pidlRoot =NULL; //用来保存用户选中的目录字符串 的内存地址。该缓冲区的大小缺省是定义的MAX_PATH常量宏。 folderInfo.pszDisplayName = Buffer; //该浏览文件夹对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。 folderInfo.lpszTitle = _T("获取文件夹路径"); //该标志位描述了对话框的选项。它可以为0,也可以是以下常量的任意组合: folderInfo.ulFlags = BIF_EDITBOX;//BIF_DONTGOBELOWDOMAIN; //应用程序定义的浏览对话框回调函数的地址。当对话框中的事件发生时, //该对话框将调用回调函数。该参数可用为NULL。 folderInfo.lpfn = NULL; //对话框传递给回调函数的一个参数指针。 folderInfo.lParam=NULL; //与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。 folderInfo.iImage=NULL;//IDR_MAINFRAME; LPITEMIDLIST pIDList = SHBrowseForFolder(&folderInfo);//调用显示选择对话框 if(pIDList) { SHGetPathFromIDList(pIDList, Buffer); sFolderPath = Buffer; } LPMALLOC lpMalloc; if(FAILED(SHGetMalloc(&lpMalloc))) return _T("0"); lpMalloc->Free(pIDList); lpMalloc->Release(); return sFolderPath; } void TBatchSaveAsFileForFolderDlg::CollectFolderFiles(const CString &strSourceFolder, const CString &strObjectiveFolder) { CFileFind filefinder; BOOL bFind=filefinder.FindFile(strSourceFolder+_T("//*.*")); while(bFind) { bFind = filefinder.FindNextFile(); if(filefinder.IsDots()) continue; if(filefinder.IsDirectory()) { CreateDirectory((strObjectiveFolder+_T("//")+filefinder.GetFileName()),NULL); CollectFolderFiles(strSourceFolder+_T("//")+filefinder.GetFileName(),strObjectiveFolder+_T("//")+filefinder.GetFileName()); } ::SetFileAttributes(strSourceFolder+_T("//")+filefinder.GetFileName(),FILE_ATTRIBUTE_NORMAL); ::AfxGetApp()->DoWaitCursor(1); //判断文件类型 if ( _T("dwg")==(strSourceFolder+_T("//")+filefinder.GetFileName()).Right(3)) { m_vecSrcPath.push_back(strSourceFolder+_T("//")+filefinder.GetFileName()); CString fName(filefinder.GetFileName()); if (m_bReplace) { fName = filefinder.GetFileName().Left(filefinder.GetFileName().GetLength()-4); fName += _T("_.dwg"); } m_vecDescPath.push_back(strObjectiveFolder+_T("//")+fName); } ::AfxGetApp()->DoWaitCursor(-1); } } BOOL TBatchSaveAsFileForFolderDlg::CheckDir(CString &strdirName, bool bCheckReadOnly) { BOOL bRel(FALSE); DWORD attr; attr = GetFileAttributes(strdirName); CString str(_T("路径存在问题,请检查.")); do { if (strdirName.IsEmpty()) { bRel = FALSE; str = _T("路径不能为空!"); break; } if (attr == (DWORD)(-1)) { bRel = FALSE; break; } if (!(attr & FILE_ATTRIBUTE_DIRECTORY)) { bRel = FALSE; str = _T("请选择一个路径!"); break; } if (bCheckReadOnly && (attr & FILE_ATTRIBUTE_READONLY)) { bRel = FALSE; str = _T("请选择一个可写的文件夹!"); break; } bRel = TRUE; } while (false); if (!bRel) AfxMessageBox(str); return bRel; } int TBatchSaveAsFileForFolderDlg::GetTangentType() { return m_nTangentType; } int TBatchSaveAsFileForFolderDlg::GetCadType() { return m_nCADType; } void TBatchSaveAsFileForFolderDlg::GetSrcFileLst( std::vector &vec ) { vec = m_vecSrcPath; } void TBatchSaveAsFileForFolderDlg::GetDescFileLst( std::vector &vec ) { vec = m_vecDescPath; } BEGIN_MESSAGE_MAP(TBatchSaveAsFileForFolderDlg, CDialog) ON_BN_CLICKED(IDC_BTN_SOURCE, &TBatchSaveAsFileForFolderDlg::OnBnClickedBtnSource) ON_BN_CLICKED(IDC_BTN_OBJECTIVE, &TBatchSaveAsFileForFolderDlg::OnBnClickedBtnObjective) ON_BN_CLICKED(IDOK, &TBatchSaveAsFileForFolderDlg::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &TBatchSaveAsFileForFolderDlg::OnBnClickedCancel) ON_CBN_SELCHANGE(IDC_CMB_CADTYPE, &TBatchSaveAsFileForFolderDlg::OnCbnSelchangeCmbCadtype) ON_CBN_SELCHANGE(IDC_CMB_SAVETYPE, &TBatchSaveAsFileForFolderDlg::OnCbnSelchangeCmbSavetype) END_MESSAGE_MAP() void TBatchSaveAsFileForFolderDlg::OnBnClickedBtnSource() { CString strSFolderPath(GetFolderPath()); m_wndEdtSource.SetWindowText(strSFolderPath); } void TBatchSaveAsFileForFolderDlg::OnBnClickedBtnObjective() { CString strTemp; m_wndEdtSource.GetWindowText(strTemp); CString strOFolderPath(GetFolderPath()); if (strOFolderPath == strTemp) { if(IDYES == ::MessageBox(NULL,_T("目的路径和源路径一样,是否替换?"),_T("注意"),MB_YESNO)) { m_wndEdtObjective.SetWindowText(strOFolderPath); m_bReplace = true; } else { return; } } m_wndEdtObjective.SetWindowText(strOFolderPath); } void TBatchSaveAsFileForFolderDlg::OnBnClickedOk() { CString strGetSourcePath; m_wndEdtSource.GetWindowText(strGetSourcePath); if (!CheckDir(strGetSourcePath)) return; CString strGetObjectPath; m_wndEdtObjective.GetWindowText(strGetObjectPath); if(!CheckDir(strGetObjectPath, true)) return; CollectFolderFiles(strGetSourcePath,strGetObjectPath); OnOK(); } void TBatchSaveAsFileForFolderDlg::OnBnClickedCancel() { OnCancel(); } CString TBatchSaveAsFileForFolderDlg::GetPostfix() { int ttype = GetTangentType(); CString str(_T("")); str.Format(_T("_t%d"), ttype); return str; } void TBatchSaveAsFileForFolderDlg::OnCbnSelchangeCmbCadtype() { m_nCADType = m_wndCmbCadType.GetCurSel() + 14; } void TBatchSaveAsFileForFolderDlg::OnCbnSelchangeCmbSavetype() { int idx = m_wndCmbSaveType.GetCurSel(); if (idx == LB_ERR) { m_nTangentType = 3; return; } switch (idx) { case 0: m_nTangentType = 3; break; case 1: m_nTangentType = 5; break; case 2: m_nTangentType = 6; break; case 3: m_nTangentType = 7; break; case 4: m_nTangentType = 8; break; case 5: m_nTangentType = 9; break; default: m_nTangentType = 3; break; } return; }