#include "stdafx.h" #include "TExportFileDlg.h" //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 全局变量定义 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int g_nFilterType = 0; int g_nDividerFilter = 2; int g_nCurtainFilter = 2; int g_nFillFilter = 2; int g_nFill1Filter = 2; int g_nFill2Filter = 2; int g_nBrickFilter = 1; int g_nPostFix = 1; int g_nBatchSaveTgVer = 7; //change by jsx 20160824 新增版本 6-->7 /*wlw 2013.10.11 以后导出旧版从cad2004版本开始。cad2000版本存在图形变大 // R16平台,不能保存成R14版本 #if (ADS == 16) int g_nDownGradeSaveCadVer = 0; int g_nBatchSaveCadVer = 0; #else int g_nDownGradeSaveCadVer = 1; int g_nBatchSaveCadVer = 1; #endif */ #if (ADS == 16) int g_nDownGradeSaveCadVer = 0; int g_nBatchSaveCadVer = 0; #else int g_nDownGradeSaveCadVer = 2; int g_nBatchSaveCadVer = 2; #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // “图形导出”中的“配置”对话框 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CSaveFilter::CSaveFilter(CWnd* pParent): CDialog(IDD_FILTER, pParent) { m_nDividerFilter=g_nDividerFilter; m_nCurtainFilter=g_nCurtainFilter; m_nFillFilter=g_nFillFilter; m_nFill1Filter=g_nFill1Filter; m_nFill2Filter=g_nFill2Filter; m_nBrickFilter=g_nBrickFilter; } void CSaveFilter::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSaveFilter) DDX_CBIndex(pDX, IDC_COMBO_DIVIDER, m_nDividerFilter); DDX_CBIndex(pDX, IDC_COMBO_CURTAIN, m_nCurtainFilter); DDX_CBIndex(pDX, IDC_COMBO_FILL, m_nFillFilter); DDX_CBIndex(pDX, IDC_COMBO_FILL1, m_nFill1Filter); DDX_CBIndex(pDX, IDC_COMBO_FILL2, m_nFill2Filter); DDX_CBIndex(pDX, IDC_COMBO_BRICK, m_nBrickFilter); //}}AFX_DATA_MAP } BOOL CSaveFilter::OnInitDialog() { BOOL bRet=CDialog::OnInitDialog(); return bRet; } void CSaveFilter::OnOK() { UpdateData(); g_nDividerFilter=m_nDividerFilter; g_nCurtainFilter=m_nCurtainFilter; g_nFillFilter=m_nFillFilter; g_nFill1Filter=m_nFill1Filter; g_nFill2Filter=m_nFill2Filter; g_nBrickFilter=m_nBrickFilter; CDialog::OnOK(); CRegProperty regProp(::GetRegLocation(), _T("Settings\\Export")); regProp.SetTopRootKey(HKEY_CURRENT_USER); regProp.SetValue(_T("Divider"),g_nDividerFilter); regProp.SetValue(_T("Curtain"),g_nCurtainFilter); regProp.SetValue(_T("Fill"),g_nFillFilter); regProp.SetValue(_T("Fill1"),g_nFill1Filter); regProp.SetValue(_T("Fill2"),g_nFill2Filter); regProp.SetValue(_T("Brick"),g_nBrickFilter); } void CSaveFilter::PreSave(AcDbDatabase* pDb) { if(g_nFilterType!=0) { DList lstId; GetEntityFromDatabase(lstId,*pDb,_T("ATS_DIMENSION,ATS_DIMENSION2,DIMENSION"),1,ACDB_MODEL_SPACE); for(long i=0;ilayer(); if(_tcsicmp(pLayer,LAY_DIMAX)!=0)//不是轴线图层 pDim->erase(); pDim->close(); acutDelString(pLayer); } } } switch(g_nFilterType) { case 1://三维模型 { // //去二维对象 // DList lstId; // GetEntityFromDatabase(lstId,*pDb,_T("ATS_DIMENSION,ATS_DIMENSION2,ATS_TEXT"),1,ACDB_MODEL_SPACE); // for(long i=0;ierase(); // pOpening->close(); // } // } } break; case 2://结构基础条件图 { //去门窗房间 DList lstId; GetEntityFromDatabase(lstId,*pDb,_T("ATS_OPENING,ATS_CORNER_WINDOW,ATS_SPACE"),1,ACDB_MODEL_SPACE); for(long i=0;ierase(); pOpening->close(); } } //处理墙 lstId.Reset(); GetEntityFromDatabase(lstId,*pDb,_T("ATS_WALL,ATS_CURTAIN_WALL"),1,ACDB_MODEL_SPACE); for(i=0;iGetUsageFlag()!=TWallData::kNormal) nOp=2; else { switch(pWall->GetStyle()) { case TWallData::kDivider:nOp=g_nDividerFilter;break; case TWallData::kCurtain:nOp=g_nCurtainFilter;break; case TWallData::kFill:nOp=g_nFillFilter;break; case TWallData::kFill1:nOp=g_nFill1Filter;break; case TWallData::kFill2:nOp=g_nFill2Filter;break; case TWallData::kBrick:nOp=g_nBrickFilter;break; } } if(nOp==1) pWall->setLayer(InitLayer(LAY_BEAM,pDb)); else if(nOp==2) { pWall->PreErase(); pWall->erase(); } pWall->close(); } } //去矮柱 lstId.Reset(); GetEntityFromDatabase(lstId,*pDb,_T("ATS_COLUMN"),1,ACDB_MODEL_SPACE); for(i=0;iIsShortColumn()) { pColumn->PreErase(); pColumn->erase(); } pColumn->close(); } } } break; case 3://结构平面条件图, { //处理门窗,门窗变洞口 DList lstId; GetEntityFromDatabase(lstId,*pDb,_T("ATS_OPENING,ATS_CORNER_WINDOW"),1,ACDB_MODEL_SPACE); for(long i=0;iisKindOf(TDbOpening::desc()))//没有处理组合门窗! { TDbOpening*pWin=TDbOpening::cast(pOpening); pWin->SetLabelVisible(false); if(!(pWin->GetKind()==TDbOpening::OP_PROWIN&&pWin->GetElevation()<1))//不是落地突窗 { bool bWin=!pWin->IsDoor(); pWin->SetKind(TDbOpening::OP_HOLE); if(bWin) { pWin->m_nOpStyle |= OPS_HOLE_FLAG1; pWin->m_nOpStyle &= ~OPS_HOLE_FLAG2; pWin->m_nOpStyle &= ~ OPS_ATHIGH; } } } else { TDbCornerWin*pWin=TDbCornerWin::cast(pOpening); pWin->SetHideLabel(true); } pOpening->close(); } } //去房间对象 lstId.Reset(); GetEntityFromDatabase(lstId,*pDb,_T("ATS_SPACE"),1,ACDB_MODEL_SPACE); for(i=0;ierase(); pOpening->close(); } } //处理墙 lstId.Reset(); GetEntityFromDatabase(lstId,*pDb,_T("ATS_WALL,ATS_CURTAIN_WALL"),1,ACDB_MODEL_SPACE); for(i=0;iGetUsageFlag()!=TWallData::kNormal) nOp=2; else { switch(pWall->GetStyle()) { case TWallData::kDivider:nOp=g_nDividerFilter;break; case TWallData::kCurtain:nOp=g_nCurtainFilter;break; case TWallData::kFill:nOp=g_nFillFilter;break; case TWallData::kFill1:nOp=g_nFill1Filter;break; case TWallData::kFill2:nOp=g_nFill2Filter;break; case TWallData::kBrick:nOp=g_nBrickFilter;break; } } if(nOp==1) { const DList &lstOpening=pWall->GetOpeningIdList(); for(long i=0;ierase(); pOpen->close(); } } pWall->setLayer(InitLayer(LAY_BEAM,pDb)); } else if(nOp==2) { pWall->PreErase(); pWall->erase(); } pWall->close(); } } //去矮柱 lstId.Reset(); GetEntityFromDatabase(lstId,*pDb,_T("ATS_COLUMN"),1,ACDB_MODEL_SPACE); for(i=0;iIsShortColumn()) { pColumn->PreErase(); pColumn->erase(); } pColumn->close(); } } } break; case 4://设备专业门窗编号 { DList lstId; GetEntityFromDatabase(lstId,*pDb,_T("ATS_OPENING,ATS_CORNER_WINDOW"),1,ACDB_MODEL_SPACE); for(long i=0;iisKindOf(TDbOpening::desc())) { TDbOpening*pWin=TDbOpening::cast(pOpening); pWin->SetLabelVisible(false); } else { TDbCornerWin*pWin=TDbCornerWin::cast(pOpening); pWin->SetHideLabel(true); } pOpening->close(); } } } break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 导出内容下拉列表 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL CFilterCombo::OnCommand(WPARAM wParam,LPARAM lParam) { BOOL bRet=CComboBox::OnCommand(wParam,lParam); if(HIWORD(wParam)==CBN_SELCHANGE) { if(GetCurSel()==GetCount()-1) { CSaveFilter dlg(this); dlg.DoModal(); SetCurSel(g_nFilterType); } else { g_nFilterType=GetCurSel(); if(g_nFilterType==1)//三维模型 { if(m_pDialog!=NULL) // sg modify 111206,增加导出T9 //m_pDialog->ChangeType(5);//TArch3格式 m_pDialog->ChangeType(6);//TArch3格式 } } } return bRet; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CAD版本选择下拉列表 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL CSelCADCombo::OnCommand(WPARAM wParam, LPARAM lParam) { BOOL bRet = CComboBox::OnCommand(wParam,lParam); if (HIWORD(wParam) == CBN_SELCHANGE) { int nIndex = GetCurSel(); if (nDlgType == 0) // 图形导出 g_nDownGradeSaveCadVer = nIndex; else // 批量转旧 g_nBatchSaveCadVer = nIndex; } return bRet; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 自动添加文件名后缀的CHECK BOX //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP(CPostFixCheck, CButton) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() void CPostFixCheck::OnLButtonDown(UINT nFlags, CPoint point) { g_nPostFix = !g_nPostFix; CButton::OnLButtonDown(nFlags, point); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // “图形导出”中的“配置”对话框 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CTArchFileDialog::CTArchFileDialog(const TCHAR *szDefault, int idx) :CFileDialog(FALSE, _T("*.dwg"), szDefault, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ENABLESIZING, g_nProductId==kTARCH ? _T("AutoCAD文件 (*.dwg)|*.dwg||"):_T("AutoCAD文件 (*.dwg)|*.dwg||") //_T("AutoCAD文件 (*.dwg) |*.dwg|上华9文件 (*.dwg) |*.dwg|上华8文件 (*.dwg) |*.dwg|上华7文件 (*.dwg) |*.dwg|上华6文件 (*.dwg) |*.dwg|上华5文件 (*.dwg) |*.dwg|上华3文件 (*.dwg) |*.dwg||") , acedGetAcadFrame() #if ADS>17 ,0,FALSE #endif ) { m_comboFilter.m_pDialog = this; m_nFileType = 0; m_ofn.nFilterIndex = idx; m_comboCADVer.nDlgType = 0; CRegProperty regProp(::GetRegLocation(), _T("Settings\\Export")); regProp.SetTopRootKey(HKEY_CURRENT_USER); regProp.GetValue(_T("Divider"),g_nDividerFilter); regProp.GetValue(_T("Curtain"),g_nCurtainFilter); regProp.GetValue(_T("Fill"),g_nFillFilter); regProp.GetValue(_T("Fill1"),g_nFill1Filter); regProp.GetValue(_T("Fill2"),g_nFill2Filter); regProp.GetValue(_T("Brick"),g_nBrickFilter); } BOOL CTArchFileDialog::OnInitDialog() { BOOL bRet = CFileDialog::OnInitDialog(); // sg modify 111124,新增加的“CAD版本”选择部分,设备专业也要求可以选择,因此把这部分内容挪到专业判断外面来 CRect rect1, rect2, rect3, rect; GetParent()->GetDlgItem(0x441)->GetWindowRect(rect1); // 保存类型 GetParent()->GetDlgItem(0x470)->GetWindowRect(rect2); // 保存类型选择列表 GetParent()->GetDlgItem(IDCANCEL)->GetWindowRect(rect3); // 取消 GetParent()->ScreenToClient(rect1); GetParent()->ScreenToClient(rect2); GetParent()->ScreenToClient(rect3); GetWindowRect(rect); // 对话框大小 long cy = (long)(rect2.Height()*5/4); // sg modify 111123,根据9.0的需求,在对话框上增加了CAD版本选择,需要对应调整对话框及部分控件的尺寸 // rect.bottom += cy; rect.bottom += cy*1; rect1.top+=cy; rect1.bottom+=cy; rect2.top+=cy; rect2.bottom+=cy*5; // ?5 //rect3.bottom+=cy; //rect3.top+=cy; rect3.bottom+=cy*2; rect3.top+=cy*2; // sg modify 120409,解决16平台下,对话框下面有一大片空白的问题 //#if ADS<16 #if ADS<17 rect.bottom-=20; #endif GetParent()->ScreenToClient(rect); MoveWindow(rect); #if ADS>15 CWnd *pWnd=GetParent()->GetDlgItem(0x4A0); // 高版本左侧出现的工具条 if(pWnd!=NULL) { CRect rectLeft; pWnd->GetWindowRect(rectLeft); GetParent()->ScreenToClient(rectLeft); // sg modify 111123,根据9.0的需求,在对话框上增加了CAD版本选择,需要调整部分控件的尺寸 // rectLeft.bottom+=cy; rectLeft.bottom+=cy*2; pWnd->MoveWindow(rectLeft); } #endif // sg modify 111123,根据9.0的需求,在对话框上增加了一行CAD版本选择 m_staticCADVer.Create(_T("CAD版本:"), WS_VISIBLE|WS_CHILD, rect1, GetParent(), IDC_CADVER_TYPE); m_staticCADVer.SetFont(GetParent()->GetFont()); rect1.top+=cy; rect1.bottom+=cy; m_comboCADVer.Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST,rect2,GetParent(),IDC_CMB_CADVER_TYPE); m_comboCADVer.SetFont(GetParent()->GetFont()); // sg add 111206,根据当前软件的版本,确定可以支持导出的CAD版本文件格式 CStringArray aryCADVer; GetDownloadACADVer(aryCADVer); for (int i = 0; i < (int)aryCADVer.GetSize(); i++) { m_comboCADVer.AddString(aryCADVer[i]); } m_comboCADVer.SetCurSel(g_nDownGradeSaveCadVer); // 默认选择2000版本的格式,支持记忆 rect2.top+=cy; rect2.bottom+=cy*5; // ?5 if (g_nProductId == kTARCH) // 仅仅建筑专业增加“导出内容”及下拉列表 { //m_staticFilter.Create(_T("导出内容:"), WS_VISIBLE|WS_CHILD, rect1, GetParent(), IDC_FILTER_DESC); //m_staticFilter.SetFont(GetParent()->GetFont()); //m_comboFilter.Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST, rect2, GetParent(), IDC_FILTER_TYPE); //m_comboFilter.SetFont(GetParent()->GetFont()); //m_comboFilter.AddString(_T("全部内容")); //m_comboFilter.AddString(_T("三维模型")); //m_comboFilter.AddString(_T("结构基础条件图")); //m_comboFilter.AddString(_T("结构平面条件图")); //m_comboFilter.AddString(_T("设备专业条件图")); //m_comboFilter.AddString(_T("配置...")); //m_comboFilter.SetCurSel(g_nFilterType); } GetParent()->SetWindowText(_T("图形导出")); CenterWindow(); return bRet; } // sg add 111206,根据当前软件的版本,确定可以支持导出的CAD版本文件格式 void CTArchFileDialog::GetDownloadACADVer(CStringArray &aryCADVer) const { #if (ADS != 16) aryCADVer.Add(_T("AutoCAD R14文件")); #endif #if (ADS == 15) aryCADVer.Add(_T("AutoCAD 2000文件")); #elif (ADS == 16) aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); #elif (ADS == 17) aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); aryCADVer.Add(_T("AutoCAD 2007文件")); #elif (ADS == 18) aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); aryCADVer.Add(_T("AutoCAD 2007文件")); aryCADVer.Add(_T("AutoCAD 2010文件")); #else aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); aryCADVer.Add(_T("AutoCAD 2007文件")); aryCADVer.Add(_T("AutoCAD 2010文件")); aryCADVer.Add(_T("AutoCAD 2013文件")); #endif } void CTArchFileDialog::ChangeType(int type) { //CWnd* pWnd=GetParent()->GetDlgItem(0x470); // 保存类型选择列表 CWnd* pWnd=GetParent()->GetDlgItem(0x470); if (pWnd!=NULL) pWnd->SendMessage(CB_SETCURSEL, type-1, 0); m_ofn.nFilterIndex = type; OnTypeChange(); } void CTArchFileDialog::OnTypeChange() { m_nFileType = !m_nFileType; CString strFile = GetFileName(); // 处理一下路径问题 返回的字符串里可能有路径 strFile = strFile.Right(strFile.GetLength() - strFile.ReverseFind(_T('\\')) - 1); strFile = strFile.Left(strFile.ReverseFind(_T('.'))); if (strFile.GetLength() < 4) return; CString sPostfix(_T("")); bool bArch(g_nProductId == kTARCH); if (m_ofn.nFilterIndex==1) // T20 sPostfix = bArch ? _T("_t20V3") : _T("_t20V2"); if (m_ofn.nFilterIndex==2) // T9 sPostfix = bArch ? _T("_t20V2") : _T("_t9"); else if (m_ofn.nFilterIndex==3) // T8 sPostfix = bArch ? _T("_t9") : _T("_t8"); else if (m_ofn.nFilterIndex==4) // T7 sPostfix = bArch ? _T("_t8") : _T("_t7"); else if (m_ofn.nFilterIndex==5) // T6 sPostfix = bArch ? _T("_t7") : _T("_t6"); else if (m_ofn.nFilterIndex==6) // T5 sPostfix = bArch ? _T("_t6") : _T("_t5"); else if (m_ofn.nFilterIndex==7) // T3 sPostfix = bArch ? _T("_t5") : _T("_t3"); else if (m_ofn.nFilterIndex==8) // T3 sPostfix = bArch ? _T("_t3") : _T(""); // 判断后 3 或 4 个字符为 _t3,_t5,_t6,_t7,_t8,_t9,_t20 CString str4 = strFile.Right(6), str3 = strFile.Right(3), str5 = strFile.Right(6); bool b3(false), b4(false), b5(false); if (str4 == _T("_t20V3")) b4 = true; if (str5 == _T("_t20V2")) b5 = true; if (str3 == _T("_t3") || str3 == _T("_t5") || str3 == _T("_t6") || str3 == _T("_t7") || str3 == _T("_t8") || str3 == _T("_t9")) b3 = true; if (b3) strFile = strFile.Left(strFile.GetLength()-3) + sPostfix; else if(b4) strFile = strFile.Left(strFile.GetLength()-6) + sPostfix; else if(b5) strFile = strFile.Left(strFile.GetLength()-6) + sPostfix; strFile += _T(".dwg"); SetControlText(1152, strFile); } int CTArchFileDialog::GetSaveVersion() const { return 3; // sg modify 111206,分别增加导出T9、T8的功能,考虑到后续版本好升级,这个地方整体调整一下 int nSaveVersion = 12; // 只需用修改默认值,比最高版本大1就可以了 if (g_nProductId != kTARCH) nSaveVersion--; nSaveVersion = nSaveVersion - m_ofn.nFilterIndex; if (nSaveVersion == 4) // 没有T4的版本,T5后,直接就是T3 nSaveVersion--; return nSaveVersion; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // sg add 120307,根据9.0需求,需要对批量转旧命令的对话框也进行一下修改,参考图形导出来做 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CTArchBatchSaveAsFileDialog::CTArchBatchSaveAsFileDialog(const TCHAR *szFolder, const TCHAR *szTitle) :CFileDialog(TRUE, _T("DWG"), NULL, OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY|OFN_ENABLESIZING, _T("上华T20V2文件(*.dwg)|*.dwg|上华9文件 (*.dwg) |*.dwg|上华8文件 (*.dwg) |*.dwg|上华7文件 (*.dwg) |*.dwg|上华6文件 (*.dwg) |*.dwg|上华5文件 (*.dwg) |*.dwg|上华3文件 (*.dwg) |*.dwg||"), acedGetAcadFrame() #if ADS>17 ,0,FALSE #endif ) { const TCHAR * szDlgTitle = szTitle; m_ofn.lpstrTitle = szDlgTitle; m_ofn.lpstrInitialDir = szFolder; m_ofn.nFilterIndex = g_nBatchSaveTgVer; //LH 2012.9.7 添加文件列表缓存变量解决批量转图多选文件失败的问题 m_lpFile = new TCHAR[2562]; m_ofn.nMaxFile = 2562; m_ofn.lpstrFile = m_lpFile; m_ofn.lpstrFile[0] = NULL; m_comboCADVer.nDlgType = 1; } CTArchBatchSaveAsFileDialog::~CTArchBatchSaveAsFileDialog() { delete[] m_lpFile; } BOOL CTArchBatchSaveAsFileDialog::OnInitDialog() { BOOL bRet = CFileDialog::OnInitDialog(); GetParent()->GetDlgItem(0x441)->SetWindowText(_T("上华版本:")); // 将“文件类型”的文字替换为“上华版本:” CRect rectDlg, rect1, rect2, rect3; GetWindowRect(rectDlg); // 对话框大小 GetParent()->GetDlgItem(0x441)->GetWindowRect(rect1); // 文件类型 GetParent()->GetDlgItem(0x470)->GetWindowRect(rect2); // 文件类型选择列表 GetParent()->ScreenToClient(rect1); GetParent()->ScreenToClient(rect2); long cy = (long)(rect2.Height()*5/4); // 根据观察订的调整对话框及控件大小的比例 rectDlg.bottom += cy*2; // sg modify 120409,解决16平台下,对话框下面有一大片空白的问题 //#if ADS<16 #if ADS<17 rectDlg.bottom-=20; #endif GetParent()->ScreenToClient(rectDlg); MoveWindow(rectDlg); // 调整对话框大小 #if ADS>15 CWnd *pWnd = GetParent()->GetDlgItem(0x4A0); if (pWnd != NULL) { CRect rectLeft; pWnd->GetWindowRect(rectLeft); GetParent()->ScreenToClient(rectLeft); rectLeft.bottom += cy*2; pWnd->MoveWindow(rectLeft); // 调整高版本左侧工具条的大小 } #endif rect1.top += cy; rect1.bottom += cy; m_staticCADVer.Create(_T("CAD版本:"), WS_VISIBLE|WS_CHILD, rect1, GetParent(), IDC_CADVER_TYPE); // 在对话框上增加“CAD版本”选择 m_staticCADVer.SetFont(GetParent()->GetFont()); rect2.top += cy; rect2.bottom += cy*5; m_comboCADVer.Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST, rect2, GetParent(), IDC_CMB_CADVER_TYPE); // 在对话框上增加“CAD版本”选择列表 m_comboCADVer.SetFont(GetParent()->GetFont()); CStringArray aryCADVer; GetDownloadACADVer(aryCADVer); // 根据当前软件的版本,确定可以支持导出的CAD版本文件格式 for (int i = 0; i < (int)aryCADVer.GetSize(); i++) { m_comboCADVer.AddString(aryCADVer[i]); } m_comboCADVer.SetCurSel(g_nBatchSaveCadVer); // 默认选择2000版本的格式,支持记忆 // 在对话框上增加是否“自动添加文件名后缀”的复选框 rect1.top += cy; rect1.bottom += cy; #if (ADS < 17) rect1.right *= 4; #else rect1.right *= 2; #endif m_chkPostFix.Create(_T("导出后的文件自动添加文件名后缀"), WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, rect1, GetParent(), IDC_CHK_POSTFIX); m_chkPostFix.SetFont(GetParent()->GetFont()); m_chkPostFix.SetCheck(g_nPostFix); return bRet; } void CTArchBatchSaveAsFileDialog::OnTypeChange() { g_nBatchSaveTgVer = m_ofn.nFilterIndex; } // 根据当前软件的版本,确定可以支持导出的CAD版本文件格式 void CTArchBatchSaveAsFileDialog::GetDownloadACADVer(CStringArray &aryCADVer) const { #if (ADS != 16) aryCADVer.Add(_T("AutoCAD R14文件")); #endif #if (ADS == 15) aryCADVer.Add(_T("AutoCAD 2000文件")); #elif (ADS == 16) aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); #elif (ADS == 17) aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); aryCADVer.Add(_T("AutoCAD 2007文件")); #elif (ADS == 18) aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); aryCADVer.Add(_T("AutoCAD 2007文件")); aryCADVer.Add(_T("AutoCAD 2010文件")); #else aryCADVer.Add(_T("AutoCAD 2000文件")); aryCADVer.Add(_T("AutoCAD 2004文件")); aryCADVer.Add(_T("AutoCAD 2007文件")); aryCADVer.Add(_T("AutoCAD 2010文件")); aryCADVer.Add(_T("AutoCAD 2013文件")); #endif } // 获得要保存的版本号 int CTArchBatchSaveAsFileDialog::GetSaveVersion() const { // 后续版本升级时,只需用修改默认值,比导出的最高版本大1(m_ofn.nFilterIndex从1开始的),目前导出T8 //int nSaveVersion = 10; int nSaveVersion = 11; nSaveVersion = nSaveVersion - m_ofn.nFilterIndex; if (nSaveVersion == 4) // 没有T4的版本,T5后,直接就是T3 nSaveVersion--; return nSaveVersion; } // 获得后缀名 void CTArchBatchSaveAsFileDialog::GetPostFixName(XString &szPostFix) const { CString csPostFix = _T(""); // 默认不加后缀 if (g_nPostFix) { switch(m_ofn.nFilterIndex) { case 1: // T20V2 csPostFix = _T("_t20V2"); break; case 2: // T9 csPostFix = _T("_t9"); break; case 3: // T8 csPostFix = _T("_t8"); break; case 4: // T7 csPostFix = _T("_t7"); break; case 5: // T6 csPostFix = _T("_t6"); break; case 6: // T5 csPostFix = _T("_t5"); break; case 7: // T3 csPostFix = _T("_t3"); break; } } szPostFix = csPostFix; } // 获得要导出的文件名 void CTArchBatchSaveAsFileDialog::GetBatchSaveFiles(XStringList &lstFiles) const { POSITION pos = GetStartPosition(); while (pos != NULL) { CString csPath = GetNextPathName(pos); lstFiles.Append(tstrnew(csPath)); } } // 获得最后选择的文件夹 void CTArchBatchSaveAsFileDialog::GetSelFileFolder(XString &szRet) const { CString csPath = GetPathName(); POSITION pos = GetStartPosition(); while (pos != NULL) { csPath = GetNextPathName(pos); // 带文件名的全路径 int iPos = csPath.ReverseFind(_T('\\')); if (iPos < 0) // 没有“\” { continue; } csPath = csPath.Left(++iPos); break; } szRet = csPath; }