// SheetTitileDlg.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "SheetTitileDlg.h" //extern TARCH_IMPEXP XString GetSymbolName(AcDbObjectId idSymbolRec); #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSheetTitleDlg dialog const TCHAR *g_szLineWidths[]={_T("0.0(细)"), _T("0.2(中)"), _T("0.5(粗)"),}; int g_nLineWidthNum=ELEMENTS(g_szLineWidths); CSheetTitleDlg::CSheetTitleDlg(CWnd* pParent /*=NULL*/) : CGridStyleDialog(CSheetTitleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSheetTitleDlg) m_bNoBorder = FALSE; m_bTitleInVisible = FALSE; m_bInheritDivider = FALSE; m_divLineWidth = _T(""); m_csText = _T(""); m_bInheritRowHeight = FALSE; m_csTitleHeight = _T(""); //}}AFX_DATA_INIT m_nLineColor=0; m_nParentLineColor=0; m_nParentLineWidth=0; //线宽 m_nParentRowHeight=0; //行高 m_bParentNoBorder=FALSE; for(int i=0; iGetTitleText(); const TGridStyle &gridStyle=pSheet->GetGridStyle(); BOOL bLocal=TRUE; //水平对齐 AcDb::TextHorzMode nHorMode=pSheet->GetTitleHorMode(&bLocal); m_nHorMode=HorMode2Index(nHorMode); if(!bLocal) m_nHorMode=0; XString sHorMode; int nParentHorMode=HorMode2Index(gridStyle.GetHorMode()); sHorMode << g_szHorModes[nParentHorMode] << _T("(") << g_szHorModes[0] << _T(")"); *m_lstHorModes[0]=sHorMode; //垂直对齐 AcDb::TextVertMode nVerMode=pSheet->GetTitleVerMode(&bLocal); m_nVerMode=VerMode2Index(nVerMode); if(!bLocal) m_nVerMode=0; int nParentVerMode=VerMode2Index(gridStyle.GetVerMode()); XString sVerMode; sVerMode << g_szVerModes[nParentVerMode] << _T("(") << g_szVerModes[0] << _T(")"); *m_lstVerModes[0]=sVerMode; // 行距系数 double nFactor=pSheet->GetTitleLineSpaceFactor(&bLocal); XString sFactor, sFactorParent; ftoa(nFactor, 1, sFactor); if(!bLocal) { sFactor << _T("(") << g_szFactors[0] << _T(")"); } ftoa(gridStyle.GetLineSpaceFactor(), 1, sFactorParent); *m_lstFactors[0]=XString(_T("%s(继承)"), (const TCHAR *)sFactorParent); m_csLineSpaceFactor=sFactor; //文字高度 double nTextSize=pSheet->GetTitleTextHeight(TRUE, &bLocal); XString sTextSize, sTextSizeParent; ftoa(nTextSize, 1, sTextSize); if(!bLocal) { sTextSize << _T("(") << g_szTextSizes[0] << _T(")"); } ftoa(gridStyle.GetTextHeight(), 1, sTextSizeParent); *m_lstTextSizes[0]=XString(_T("%s(继承)"), (const TCHAR *)sTextSizeParent); m_csTextSize=sTextSize; //文字样式 AcDbObjectId idStyle=pSheet->GetTitleTextStyle(&bLocal); ASSERT(!!idStyle); XString szStyle=GetSymbolName(idStyle); XString sStyle; sStyle << GetSymbolName(gridStyle.GetTextStyleId()) << _T("(继承)"); *m_lstTextStyles[0]=sStyle; if(!bLocal) { m_nTextStyle=0; } else { for(int i=1; iIsTitleWrapEnabled(&bLocal); m_bParentTextWrap=gridStyle.IsTextWrap(); m_bInheritWrapText=!bLocal; if(m_bInheritWrapText) m_bTextWrap=m_bParentTextWrap; //颜色 m_nTextColor = pSheet->GetTitleTextColor( &bLocal); int nParentColor=gridStyle.GetTextColor(); if(nParentColor==0) nParentColor=pSheet->colorIndex(); if(!bLocal) { //继承为Byblock m_nTextColor=0; } if(nParentColor) m_colorComboBox.SetBlockColorIndex(nParentColor); // 标题可见性 const TSheetTitle &title=pSheet->GetTitle(); m_bTitleInVisible=!title.IsVisible(); // 分割线 const TDividerStyle ÷rLocal=title.GetDividerStyle(); // 是否继承分割线样式 m_bInheritDivider=(dividerLocal.GetDividerFlag()==TDividerStyle::kParent); const TDividerStyle &divParent=pSheet->GetRowDivider(); const TDividerStyle *divFinal=NULL; if(m_bInheritDivider) divFinal=&divParent; else divFinal=÷rLocal; m_bParentNoBorder=(divParent.GetDividerFlag()==TDividerStyle::kNone); m_nParentLineWidth=divParent.GetLineWidth(); m_nParentLineColor=divParent.GetColor(); if(m_nParentLineColor==0) m_nParentLineColor=pSheet->colorIndex(); m_nParentRowHeight=pSheet->GetRowHeight(TRUE); // 是否包含边框 m_bNoBorder=(divFinal->GetDividerFlag()==TDividerStyle::kNone); // 线宽 XString sTemp; ftoa(divFinal->GetLineWidth(), 2, sTemp); m_divLineWidth = sTemp; for(int i=0; iGetColor(); if(m_nParentLineColor) m_divColorBox.SetBlockColorIndex(m_nParentLineColor); // LINETYPE //... m_csTitleHeight.Format(_T("%.2f"), title.GetHeight()); } void CSheetTitleDlg::Dlg2Obj(TDbSheet *pSheet) const { ASSERT(pSheet); TSheetTitle &title=pSheet->GetTitle(); pSheet->assertWriteEnabled(); title.SetText(m_csText); TGridStyle &gridStyle=(TGridStyle &)title.GetGridStyle(); BOOL bLocal=TRUE; //水平对齐 if(m_nHorMode==0) { gridStyle.SetFlagBit(OF_HORMODE, FALSE); } else if(m_nHorMode>0) { gridStyle.SetFlagBit(OF_HORMODE, TRUE); gridStyle.SetHorMode(Index2HorMode(m_nHorMode)); } //垂直对齐 if(m_nVerMode==0) { gridStyle.SetFlagBit(OF_VERMODE, FALSE); } else if(m_nVerMode) { gridStyle.SetFlagBit(OF_VERMODE, TRUE); gridStyle.SetVerMode(Index2VerMode(m_nVerMode)); } // 行距系数 if(_tcscmp(m_csLineSpaceFactor, m_lstFactors[0])==0) { gridStyle.SetFlagBit(OF_LINESPACE, FALSE); } else if(!m_csLineSpaceFactor.IsEmpty()) { if(_tstof(m_csLineSpaceFactor)>-1.0E-3) { gridStyle.SetFlagBit(OF_LINESPACE, TRUE); gridStyle.SetLineSpaceFactor(_tstof(m_csLineSpaceFactor)); } } //文字高度 if(_tcscmp(m_csTextSize, m_lstTextSizes[0])==0) { gridStyle.SetFlagBit(OF_TEXTHEIGHT, FALSE); } else if(!m_csTextSize.IsEmpty()) { if(_tstof(m_csTextSize)>1.0E-3) { gridStyle.SetFlagBit(OF_TEXTHEIGHT, TRUE); gridStyle.SetTextHeight(_tstof(m_csTextSize)); } } //文字样式 if(m_nTextStyle==0) { gridStyle.SetFlagBit(OF_TEXTSTYLE, FALSE); } else if(m_nTextStyle>0) { gridStyle.SetFlagBit(OF_TEXTSTYLE, TRUE); gridStyle.SetTextStyleId(GetTextStyleId(m_lstTextStyles[m_nTextStyle])); } //换行属性 if(m_bInheritWrapText) { gridStyle.SetFlagBit(OF_TEXTWRAP, FALSE); } else { gridStyle.SetFlagBit(OF_TEXTWRAP, TRUE); gridStyle.SetTextWrap(m_bTextWrap); } //颜色 if(m_nTextColor==0) { gridStyle.SetFlagBit(OF_TEXTCOLOR, FALSE); } else if(m_nTextColor>0) { gridStyle.SetFlagBit(OF_TEXTCOLOR, TRUE); gridStyle.SetTextColor(m_nTextColor); } //////////////////////////////////////////////////////////////// // 标题可见性 title.SetVisible(!m_bTitleInVisible); TDividerStyle ÷r=title.GetDividerStyle(); // 分割线 if(m_bNoBorder) divider.SetDividerFlag(TDividerStyle::kNone); else if(m_bInheritDivider) divider.SetDividerFlag(TDividerStyle::kParent); else divider.SetDividerFlag(TDividerStyle::kLocal); if(_tstof(m_divLineWidth)>-1.0E-3) divider.SetLineWidth(_tstof(m_divLineWidth)); divider.SetColor(m_nLineColor); // LINETYPE //... if(!m_bInheritRowHeight) { double nRowHeight=_tstof(m_csTitleHeight); if(nRowHeight>1.0E-3) title.SetHeight(nRowHeight); } else { title.SetHeight(pSheet->GetRowHeight(TRUE)); } } void CSheetTitleDlg::DoDataExchange(CDataExchange* pDX) { CGridStyleDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSheetTitleDlg) DDX_Control(pDX, IDC_DIVIDER_LINEWIDTH, m_lineWidthBox); DDX_Control(pDX, IDC_DIVIDER_LINETYPE, m_divLinetypeBox); DDX_Control(pDX, IDC_DIVIDER_COLOR, m_divColorBox); DDX_Check(pDX, IDC_NOBORDER, m_bNoBorder); DDX_Check(pDX, IDC_TITLE_INVISIBLE, m_bTitleInVisible); DDX_Check(pDX, IDC_INHERIT_DIVIDER, m_bInheritDivider); DDX_CBString(pDX, IDC_DIVIDER_LINEWIDTH, m_divLineWidth); DDX_Text(pDX, IDC_TEXT, m_csText); DDX_Check(pDX, IDC_INHERIT_ROWHEIGHT, m_bInheritRowHeight); DDX_Text(pDX, IDC_TITLE_HEIGHT, m_csTitleHeight); //}}AFX_DATA_MAP if(pDX->m_bSaveAndValidate) { if(_tstof(m_divLineWidth)<-1.0E-3 || _tstof(m_csTitleHeight)<1.0E-3 || _tstof(m_csLineSpaceFactor)<-1.0E-3) pDX->Fail(); } } BEGIN_MESSAGE_MAP(CSheetTitleDlg, CGridStyleDialog) //{{AFX_MSG_MAP(CSheetTitleDlg) ON_BN_CLICKED(IDC_INHERIT_DIVIDER, OnInheritDivider) ON_BN_CLICKED(IDC_TITLE_INVISIBLE, OnTitleInvisible) ON_BN_CLICKED(IDC_INHERIT_ROWHEIGHT, OnInheritRowheight) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSheetTitleDlg message handlers BOOL CSheetTitleDlg::OnInitDialog() { CGridStyleDialog::OnInitDialog(); // TODO: Add extra initialization here int nItem=m_divColorBox.FindItemByColorIndex(m_nLineColor); if(nItem<0) { m_divColorBox.AddColorToMRU(m_nLineColor); nItem=m_divColorBox.FindItemByColorIndex(m_nLineColor); } if(nItem>=0) m_divColorBox.SetCurSel(nItem); InitComBox(m_lineWidthBox, m_lstLineWidths); UpdateData(FALSE); if(m_bTitleInVisible) EnableDlgItems(FALSE); else { OnInheritDivider(); OnInheritRowheight(); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSheetTitleDlg::EnableDlgItems(BOOL bTrue) { UINT itemIDs[]={IDC_DIVIDER_LINETYPE, IDC_DIVIDER_COLOR, IDC_DIVIDER_LINEWIDTH, IDC_INHERIT_DIVIDER, IDC_NOBORDER, IDC_LINESPACEFACTOR, IDC_TEXTSIZE, IDC_VERMODE, IDC_TEXTSTYLE, IDC_HORMODE, IDC_TEXTCOLOR, IDC_TEXTSTYLE, IDC_INHERIT_TEXTWRAP, IDC_TITLE_HEIGHT, IDC_INHERIT_ROWHEIGHT, }; for(int i=0; iEnableWindow(bTrue); } } void CSheetTitleDlg::OnInheritDivider() { // TODO: Add your control notification handler code here UpdateData(TRUE); UINT itemIDs[]={IDC_DIVIDER_LINETYPE, IDC_DIVIDER_COLOR, IDC_DIVIDER_LINEWIDTH, }; BOOL bEnabled=!m_bInheritDivider; for(int i=0; iEnableWindow(bEnabled); } if(m_bInheritDivider) { m_bNoBorder=m_bParentNoBorder; m_divLineWidth=XString(_T("%.2f"), m_nParentLineWidth); m_nLineColor=m_nParentLineColor; UpdateData(FALSE); } } // 标题可见性开关 void CSheetTitleDlg::OnTitleInvisible() { // TODO: Add your control notification handler code here UpdateData(TRUE); BOOL bEnabled=!m_bTitleInVisible; EnableDlgItems(bEnabled); if(bEnabled==TRUE) { OnInheritDivider(); OnInheritRowheight(); } } void CSheetTitleDlg::OnInheritRowheight() { UpdateData(TRUE); if(m_bInheritRowHeight) { XString sTemp; ftoa(m_nParentRowHeight, 2, sTemp); m_csTitleHeight = sTemp; UpdateData(FALSE); } } void CSheetTitleDlg::OnOK() { // Check value // ... int nIndex=m_divColorBox.GetCurrentItemColorIndex(); if(nIndex>=0) m_nLineColor=nIndex; CGridStyleDialog::OnOK(); }