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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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\\";
}