You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

342 lines
8.0 KiB
C++

1 month ago
#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("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ");
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() //<2F><>ʼ<EFBFBD><CABC>
{
//m_cursor.InitialCursor();
}
void CPublicParam::refAll() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
{
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();
//}
}
//<2F><><EFBFBD><EFBFBD>ȱʡ<C8B1><CAA1>ӡ<EFBFBD><D3A1><EFBFBD>Ĵ<EFBFBD>ӡֽ<D3A1><D6BD><EFBFBD><EFBFBD>
void CPublicParam::SetDefaultPrintOrientation(UINT nOrientation)
{
//<2F><>ȡ<EFBFBD><C8A1>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
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
//<2F><><EFBFBD><EFBFBD>: DMORIENT_LANDSCAPE
//<2F><><EFBFBD><EFBFBD>: DMORIENT_PORTRAIT
pDevMode->dmOrientation=nOrientation;
::GlobalUnlock(pDevMode);
}
}
///< <20><><EFBFBD><EFBFBD>scaleHeightΪ 1<><31><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>
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;
///< ת<><D7AA>Ϊ1<CEAA><31><EFBFBD>״<EFBFBD><D7B4><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD><CAB6>ٺ<EFBFBD><D9BA><EFBFBD>
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;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ĵ<EFBFBD>λ
unit.cx = UnitPage.m_xunitSel;
unit.cy = UnitPage.m_yunitSel;
///< <20><><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
scale.cx = atof(SelectPage.m_xscale); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
scale.cy = atof(SelectPage.m_yscale); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
scale.cx /= UnitPage.GetUnit(unit.cx); //<2F><>λ<EFBFBD><CEBB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>λ
switch(unit.cy)
{
case CUnit::UNIT_SECOND: //Ϊʱ<CEAA>䵥λʱ
case CUnit::UNIT_MS:
ddy = UnitPage.GetUnit(unit.cy);
break;
default:
scale.cy /= UnitPage.GetUnit(unit.cy); //<2F><>λ<EFBFBD><CEBB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>λ
break;
}
return TRUE;
}
// < <20><><EFBFBD><EFBFBD>scale<6C><65>һ<EFBFBD><D2BB>ʵ<EFBFBD>ʵ<EFBFBD>λ<EFBFBD>ĺ<EFBFBD><C4BA>׳<EFBFBD><D7B3><EFBFBD>
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);
///< ת<><D7AA>Ϊ 1<><31><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>
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; //һ<><D2BB>ʵ<EFBFBD>ʵ<EFBFBD>λ<EFBFBD>ĺ<EFBFBD><C4BA>׳<EFBFBD><D7B3><EFBFBD>
sscanf(page.m_strPrintY, "%lf", &sp); sscanf(page.m_strRealY, "%lf", &sr);
if(fabs(sr) > 1e-10) scale.cy = sp/sr; //һ<><D2BB>ʵ<EFBFBD>ʵ<EFBFBD>λ<EFBFBD>ĺ<EFBFBD><C4BA>׳<EFBFBD><D7B3><EFBFBD>
return TRUE;
}
///< <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><E6B4A2>·<EFBFBD><C2B7>
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\\";
}