320 lines
7.6 KiB
C++
320 lines
7.6 KiB
C++
// TransFormDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "BatchSaveAsFileForFolder.h"
|
|
#include "resource.h"
|
|
//#include <AdAChar.h>
|
|
#include <vector>
|
|
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<CString> &vec )
|
|
{
|
|
vec = m_vecSrcPath;
|
|
}
|
|
|
|
void TBatchSaveAsFileForFolderDlg::GetDescFileLst( std::vector<CString> &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;
|
|
}
|