#include "StdAfx.h" //#include "DFDrawProDoc.h" //#include "DFDrawProView.h" #include ".\PublicParam.h" //#include ".\previewviewex.h" //#include ".\TreePropertySheet.h" #include "ScaleSelectPage.h" #include "ScaleUnitPage.h" #include "ScaleViewPage.h" //#include ".\mainfrm.h" CPublicParam theParam; CPublicParam& CPublicParam::GetParam() { return theParam; } CPublicParam::CPublicParam(void) { m_pPageSetup = NULL; m_nRefPageSetupCounter = 0; m_pDocType = NULL; m_nRefDocTypeCounter = 0; m_nRefUndoManager = 0; m_nRefCursorCounter = 0; } CPublicParam::~CPublicParam(void) { } CString CPublicParam::GetSaveDefaultExt(void) { CString strExt = _T(".kev"); //switch(::GetPreferences().WorkaroundSave.m_nDefaultSaveFormat) //{ //case 0: strExt=_T(".dfd"); break; //default: //case 1: strExt=_T(".dfb"); break; //case 2: strExt=_T(".dml"); break; //} return strExt; } // prompt for file name - used for open and save as BOOL CPublicParam::DoPromptFileNameEx(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog, int* pDocType/*=NULL*/) { int nDefaultType= DF_FORMAT_ASCII; //switch(::GetPreferences().WorkaroundSave.m_nDefaultSaveFormat) //{ //case 0: nDefaultType=DF_FORMAT_ASCII; break; //case 1: nDefaultType=DF_FORMAT_BINARY; break; // //case 2: nDefaultType=DF_FORMAT_DML; break; //} CString title=_T("另存为"); INT_PTR nResult = m_pDocType->FileDialog(bOpenFileDialog, title, fileName, lFlags, pDocType, nDefaultType); return nResult == IDOK ? TRUE:FALSE; } BOOL CPublicParam::DoOpenFileDialog(CString strTitle, CStringList& fileNameList, DWORD lFlags /*=OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT*/, int* pDocTypeID /*=NULL*/, BOOL bAppendAllFileType/*=TRUE*/, CWnd* pParentWnd/*=NULL*/, BOOL bVistaStyle/*=TRUE*/) { int nDefaultType= DF_FORMAT_ASCII; //switch(::GetPreferences().WorkaroundSave.m_nDefaultSaveFormat) //{ //case 0: nDefaultType=DF_FORMAT_ASCII; break; //case 1: nDefaultType=DF_FORMAT_BINARY; break; // //case 2: nDefaultType=DF_FORMAT_DML; break; //} INT_PTR nResult = m_pDocType->OpenFileDialog(strTitle, fileNameList, lFlags, pDocTypeID, nDefaultType, bAppendAllFileType, pParentWnd, bVistaStyle); return nResult == IDOK ? TRUE:FALSE; } void CPublicParam::Initial() //初始化 { //m_cursor.InitialCursor(); } void CPublicParam::refAll() //对以下需要引用的所有参数进行一次引用操作 { refDocType(); //refPageSetup(); //refUndoManager(); //refCursor(); } void CPublicParam::unrefAll() { unrefDocType(); //unrefPageSetup(); //unrefUndoManager(); //unrefCursor(); } void CPublicParam::refCursor() { m_nRefCursorCounter++; } void CPublicParam::unrefCursor() { if(m_nRefCursorCounter <= 0) return; m_nRefCursorCounter--; } void CPublicParam::refPageSetup(void) { //m_nRefPageSetupCounter ++; //if(m_pPageSetup == NULL) //{ // m_pPageSetup=new CPrintPageSetup; // ((CPrintPageSetup*)m_pPageSetup)->Read(GetDrawINI()); //} } void CPublicParam::unrefPageSetup(void) { //if(m_nRefPageSetupCounter <= 0) return; //m_nRefPageSetupCounter--; //if(m_nRefPageSetupCounter == 0) //{ // delete (CPrintPageSetup*)m_pPageSetup; // m_pPageSetup=NULL; //} } void CPublicParam::refDocType() { m_nRefDocTypeCounter++; if(m_pDocType == NULL) { m_pDocType=new CDocType; } } void CPublicParam::unrefDocType() { if(m_nRefDocTypeCounter <= 0) return; m_nRefDocTypeCounter--; if(m_nRefDocTypeCounter == 0) { delete (CDocType*)m_pDocType; m_pDocType = NULL; } } void CPublicParam::refUndoManager() { m_nRefUndoManager++; if(m_nRefUndoManager == 1) { //CDrawUndoManager::CreateUndoManager(); } } void CPublicParam::unrefUndoManager() { if(m_nRefUndoManager <= 0) return; m_nRefUndoManager--; if(m_nRefUndoManager == 0) { //CDrawUndoManager::DeleteUndoManager(); } } void CPublicParam::PrintPageSetup(CWnd* pMainWnd) { //CPrintPageSetup* pPageSetup = m_pPageSetup; //CPropertySheet sheet("Print"); //sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; //sheet.AddPage(pPageSetup); //if(sheet.DoModal()!=IDOK) return; //if(pPageSetup->m_bPreview) //{ // pPageSetup->m_bPreview=FALSE; // pMainWnd->SendMessage(WM_COMMAND,ID_FILE_PRINT_PREVIEW); //} //CMainFrame* pMainFrame = DYNAMIC_DOWNCAST(CMainFrame, pMainWnd); //if(pMainFrame==NULL) return; //CFrameWnd* pFrame = pMainFrame->MDIGetActive(); //if(!pFrame)return; //CDrawDoc* pDoc=NULL; //NCustomCtrl::CPreviewViewDraw* pView = DYNAMIC_DOWNCAST(NCustomCtrl::CPreviewViewDraw, pFrame->GetActiveView()); //if(pView) //{ // pDoc=(CDrawDoc *)(pView->GetDocument()); // if(pDoc->m_pItemPrint) // pDoc->m_pItemPrint->ClearPreviewDC(); // pMainWnd->SendMessage(WM_COMMAND,ID_VIEW_REDRAW); // return; //} //CDrawView* pdv = DYNAMIC_DOWNCAST(CDrawView, pFrame->GetActiveView()); //if(pdv) //{ // pDoc=pdv->GetDocument(); // if(pDoc->m_pItemPrint) // pDoc->m_pItemPrint->ClearPreviewDC(); //} } //设置缺省打印机的打印纸方向 void CPublicParam::SetDefaultPrintOrientation(UINT nOrientation) { //获取打印机的设备属性 PRINTDLG pd; pd.lStructSize=(DWORD)sizeof(PRINTDLG); BOOL bRet=::AfxGetApp()->GetPrinterDeviceDefaults(&pd); if(bRet) { // protect memory handle with ::GlobalLock and ::GlobalUnlock DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pd.hDevMode); // set orientation to landscape //横向: DMORIENT_LANDSCAPE //纵向: DMORIENT_PORTRAIT pDevMode->dmOrientation=nOrientation; ::GlobalUnlock(pDevMode); } } ///< 参数scaleHeight为 1毫米代表的实际长度 BOOL CPublicParam::DoScaleSetDialog(CSize8& scale, CSize &unit, bool bSameXY, CWnd* pParentWnd) { CPropertySheet sheet(IDS_STRING_SCALE_WIZARD, pParentWnd); sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; CScaleUnitPage UnitPage; CScaleSelectPage SelectPage; sheet.AddPage(&SelectPage); sheet.AddPage(&UnitPage); SelectPage.m_bXnotY = !bSameXY; UnitPage.m_bXnotY = !bSameXY; UnitPage.m_xunitSel = unit.cx; UnitPage.m_yunitSel = unit.cy; ///< 转换为1毫米代表实际多少毫米 double ddx, ddy; ddx = scale.cx * UnitPage.GetUnit(unit.cx); ddy = scale.cy * UnitPage.GetUnit(unit.cy); AfxGetPublicFunction()->FloatToString(SelectPage.m_xscale, ddx, 10); AfxGetPublicFunction()->FloatToString(SelectPage.m_yscale, ddy, 10); INT_PTR rt = sheet.DoModal(); if(rt != IDOK && rt != ID_WIZFINISH) return FALSE; //设置新选择的单位 unit.cx = UnitPage.m_xunitSel; unit.cy = UnitPage.m_yunitSel; ///< 设置新比例 scale.cx = atof(SelectPage.m_xscale); //单位:毫米 scale.cy = atof(SelectPage.m_yscale); //单位:毫米 scale.cx /= UnitPage.GetUnit(unit.cx); //单位:指定的实际单位 switch(unit.cy) { case CUnit::UNIT_SECOND: //为时间单位时 case CUnit::UNIT_MS: ddy = UnitPage.GetUnit(unit.cy); break; default: scale.cy /= UnitPage.GetUnit(unit.cy); //单位:指定的实际单位 break; } return TRUE; } // < 参数scale:一个实际单位的毫米长度 BOOL CPublicParam::DoScaleViewDialog(CSize8& scale, CSize &unit, CWnd* pParentWnd) { CPropertySheet sheet(IDS_STRING_PANE_PROPERTIES, pParentWnd); sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; CScaleViewPage page; sheet.AddPage(&page); ///< 转换为 1毫米代表的实际长度 CSize8 st = scale; st.cx = 1.0/scale.cx; st.cy = 1.0/scale.cy; char s[256]; AfxGetPublicFunction()->FloatToString(s, st.cx, 10); page.m_strPrintX="1"; page.m_strRealX=s; AfxGetPublicFunction()->FloatToString(s, st.cy, 10); page.m_strPrintY="1"; page.m_strRealY=s; page.m_unit = unit; if(sheet.DoModal()!=IDOK) return FALSE; unit = page.m_unit; double sr = 1, sp = 1; sscanf(page.m_strPrintX, "%lf", &sp); sscanf(page.m_strRealX, "%lf", &sr); if(fabs(sr) > 1e-10) scale.cx = sp/sr; //一个实际单位的毫米长度 sscanf(page.m_strPrintY, "%lf", &sp); sscanf(page.m_strRealY, "%lf", &sr); if(fabs(sr) > 1e-10) scale.cy = sp/sr; //一个实际单位的毫米长度 return TRUE; } ///< 获得模板存储的路径 CString CPublicParam::GetTemplatePath() { CSplitPath sp; sp.SetModuleFileName(); return sp.GetPath()+"Template\\"; } CString CPublicParam::GetTemplatePathPlane() { return GetTemplatePath()+"Plane\\"; } CString CPublicParam::GetTemplatePathColumn() { return GetTemplatePath()+"Column\\"; } CString CPublicParam::GetTemplatePathCorrelation() { return GetTemplatePath()+"Correlation\\"; }