// GridStylePage.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "GridStylePage.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern int g_nHorModeNum, g_nVerModeNum, g_nFactorNum, g_nTextSizeNum; //extern TARCH_IMPEXP XString GetSymbolName(AcDbObjectId idSymbolRec); ///////////////////////////////////////////////////////////////////////////// // CGridStylePage property page IMPLEMENT_DYNCREATE(CGridStylePage, CPropertyPage) void CGridStylePage::_CGridStylePage() { m_bInherit=FALSE; //{{AFX_DATA_INIT(CGridStylePage) m_nHorMode = -1; m_csLineSpaceFactor = _T(""); m_csTextSize = _T(""); m_nTextStyle = -1; m_bTextWrap = FALSE; m_nVerMode = -1; //}}AFX_DATA_INIT m_nTextColor=0; } CGridStylePage::CGridStylePage() { _CGridStylePage(); } CGridStylePage::CGridStylePage(UINT id) : CPropertyPage(id) { _CGridStylePage(); } CGridStylePage::~CGridStylePage() { } // 继承性质存在时 void CGridStylePage::Obj2Dlg(const TGridStyle &styleLocal, const TGridStyle &styleParent) { //水平对齐 BOOL bLocal=styleLocal.TestFlagBit(OF_HORMODE); if(bLocal) { m_nHorMode=HorMode2Index(styleLocal.GetHorMode()); } else { m_nHorMode=0; } XString sHorMode; int nParentHorMode=HorMode2Index(styleParent.GetHorMode()); sHorMode << g_szHorModes[nParentHorMode] << _T("(继承)"); *m_lstHorModes[0]=sHorMode; //垂直对齐 bLocal=styleLocal.TestFlagBit(OF_VERMODE); m_nVerMode=bLocal? VerMode2Index(styleLocal.GetVerMode()) : 0; int nParentVerMode=VerMode2Index(styleParent.GetVerMode()); XString sVerMode; sVerMode << g_szVerModes[nParentVerMode] << _T("(继承)"); *m_lstVerModes[0]=sVerMode; // 行距系数 bLocal=styleLocal.TestFlagBit(OF_LINESPACE); if(bLocal) { m_csLineSpaceFactor.Format(_T("%.1f"), styleLocal.GetLineSpaceFactor()); } else { m_csLineSpaceFactor.Format(_T("%.1f"), styleParent.GetLineSpaceFactor()); } *m_lstFactors[0]=XString(_T("%.1f(继承)"), styleParent.GetLineSpaceFactor()); //文字高度 bLocal=styleLocal.TestFlagBit(OF_TEXTHEIGHT); if(bLocal) { m_csTextSize.Format(_T("%.1f"), styleLocal.GetTextHeight()); } else { m_csTextSize.Format(_T("%.1f"), styleParent.GetTextHeight()); } *m_lstTextSizes[0]=XString(_T("%.1f(继承)"), styleParent.GetTextHeight()); //文字样式 bLocal=styleLocal.TestFlagBit(OF_TEXTSTYLE); if(bLocal) { AcDbObjectId idLocal=styleLocal.GetTextStyleId(); if(!!idLocal) { XString szStyle=GetSymbolName(idLocal); for(int i=1; i0) styleLocal.SetHorMode(Index2HorMode(m_nHorMode)); else styleLocal.SetHorMode(styleParent.GetHorMode()); //垂直对齐 styleLocal.SetFlagBit(OF_VERMODE, m_nVerMode!=0); if(m_nVerMode>0) styleLocal.SetVerMode(Index2VerMode(m_nVerMode)); else styleLocal.SetVerMode(styleParent.GetVerMode()); // 行距系数 if(_tcsicmp(m_csLineSpaceFactor, m_lstFactors[0])==0) { styleLocal.SetFlagBit(OF_LINESPACE, FALSE); styleLocal.SetLineSpaceFactor(styleParent.GetLineSpaceFactor()); } else if(!m_csLineSpaceFactor.IsEmpty() && _tstof(m_csLineSpaceFactor)>-1.0E-3) { styleLocal.SetFlagBit(OF_LINESPACE, TRUE); styleLocal.SetLineSpaceFactor(_tstof(m_csLineSpaceFactor)); } //文字高度 if(_tcscmp(m_csTextSize, m_lstTextSizes[0])==0) { styleLocal.SetFlagBit(OF_TEXTHEIGHT, FALSE); styleLocal.SetTextHeight(styleParent.GetTextHeight()); } else if(!m_csTextSize.IsEmpty() && _tstof(m_csTextSize)>0.0) { styleLocal.SetFlagBit(OF_TEXTHEIGHT, TRUE); styleLocal.SetTextHeight(_tstof(m_csTextSize)); } //文字样式 if(m_nTextStyle==0) { styleLocal.SetFlagBit(OF_TEXTSTYLE, FALSE); styleLocal.SetTextStyleId(styleParent.GetTextStyleId()); } else if(m_nTextStyle>0) { styleLocal.SetFlagBit(OF_TEXTSTYLE, TRUE); styleLocal.SetTextStyleId(GetTextStyleId(m_lstTextStyles[m_nTextStyle])); } //换行属性 if(m_bInheritWrapText) { styleLocal.SetFlagBit(OF_TEXTWRAP, FALSE); styleLocal.SetTextWrap(styleParent.IsTextWrap()); } else { styleLocal.SetFlagBit(OF_TEXTWRAP, TRUE); styleLocal.SetTextWrap(m_bTextWrap); } //颜色 if(m_nTextColor==0) { styleLocal.SetFlagBit(OF_TEXTCOLOR, FALSE); styleLocal.SetTextColor(styleParent.GetTextColor()); } else if(m_nTextColor>0) { styleLocal.SetFlagBit(OF_TEXTCOLOR, TRUE); styleLocal.SetTextColor(m_nTextColor); } } // 没有继承的时候 void CGridStylePage::Obj2Dlg(const TGridStyle &style) { //水平对齐 AcDb::TextHorzMode nHorMode=style.GetHorMode(); m_nHorMode=HorMode2Index(nHorMode)-1; //垂直对齐 AcDb::TextVertMode nVerMode=style.GetVerMode(); m_nVerMode=VerMode2Index(nVerMode)-1; // 行距系数 double nFactor=style.GetLineSpaceFactor(); m_csLineSpaceFactor.Format(_T("%.1f"), nFactor); //文字高度 double nTextSize=style.GetTextHeight(); m_csTextSize.Format(_T("%.1f"), nTextSize); //文字样式 AcDbObjectId idStyle=style.GetTextStyleId(); if(!!idStyle) { XString szStyle=GetSymbolName(idStyle); for(int i=0; i-1.0E-3) gridStyle.SetLineSpaceFactor(_tstof(m_csLineSpaceFactor)); //文字高度 if(_tstof(m_csTextSize)>1.0E-3) gridStyle.SetTextHeight(_tstof(m_csTextSize)); //文字样式 if(m_nTextStyle>=0) gridStyle.SetTextStyleId(GetTextStyleId(m_lstTextStyles[m_nTextStyle])); //换行属性 gridStyle.SetTextWrap(m_bTextWrap); //颜色 gridStyle.SetTextColor(m_nTextColor); } void CGridStylePage::InitComBox(CComboBox& combox, const DList &lstString) { combox.ResetContent(); for (int i = 0 ; i < lstString.Length(); i++) { combox.AddString(lstString[i]); } } void CGridStylePage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGridStylePage) DDX_Control(pDX, IDC_LINESPACEFACTOR, m_factorBox); DDX_Control(pDX, IDC_TEXTSIZE, m_textSizeBox); DDX_Control(pDX, IDC_VERMODE, m_verModeBox); DDX_Control(pDX, IDC_TEXTSTYLE, m_textStyleBox); DDX_Control(pDX, IDC_HORMODE, m_horModeBox); DDX_Control(pDX, IDC_TEXTCOLOR, m_colorComboBox); DDX_CBIndex(pDX, IDC_HORMODE, m_nHorMode); DDX_CBString(pDX, IDC_LINESPACEFACTOR, m_csLineSpaceFactor); DDX_CBString(pDX, IDC_TEXTSIZE, m_csTextSize); DDX_CBIndex(pDX, IDC_TEXTSTYLE, m_nTextStyle); DDX_Check(pDX, IDC_TEXTWRAP, m_bTextWrap); DDX_CBIndex(pDX, IDC_VERMODE, m_nVerMode); //}}AFX_DATA_MAP if(m_bInherit) DDX_Check(pDX, IDC_INHERIT_TEXTWRAP, m_bInheritWrapText); if(pDX->m_bSaveAndValidate) { // 检查对话框输入是否合法 //... int nIndex=m_colorComboBox.GetCurrentItemColorIndex(); if(nIndex>=0) m_nTextColor=nIndex; if(_tstof(m_csTextSize)<1.0E-3 || _tstof(m_csLineSpaceFactor)<-1.0E-3) pDX->Fail(); } } void CGridStylePage::InitDataMember(BOOL bInherit) { m_bInherit=bInherit; int nFrom=m_bInherit? 0 : 1; for(int i=nFrom; i<5; i++) m_lstHorModes.Append(new XString(g_szHorModes[i])); for(i=nFrom; i<4; i++) m_lstVerModes.Append(new XString(g_szVerModes[i])); for(i=nFrom; i=0) m_colorComboBox.SetCurSel(nItem); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CGridStylePage::OnInheritTextwrap() { // TODO: Add your control notification handler code here UpdateData(TRUE); GetDlgItem(IDC_TEXTWRAP)->EnableWindow(!m_bInheritWrapText); if(m_bInheritWrapText) m_bTextWrap=m_bParentTextWrap; UpdateData(FALSE); }