#include "StdAfx.h" #include "itemtext.h" #include "SigmaDoc.h" #include "SigmaView.h" #include "DCHelp.h" //#include ".\actionmodifieditem.h" //#include "CustomItemButton.h" CItemText::CItemText(CSigmaDoc * ppDoc) : CItem(ppDoc) , m_pText(NULL) , m_bAlone(FALSE) , m_nAlignsH(0) , m_nAlignsV(0) , m_nFrame(0) , m_textColor(0) , m_bIsDlgEdit(FALSE) { SetType(ITEM_TEXT); Reset(); } CItemText::~CItemText(void) { if(m_pText) delete m_pText; m_pText=NULL; } void CItemText::OnDraw(CXyDC* pDC) { if(m_pText==NULL) return; pDC->Draw(*m_pText,m_textColor); } void NItem::CItemText::OnDraw(CXyDC* pXyDC, CDC* pDC) { OnDraw(pXyDC); } void CItemText::OnDrawScreen(CXyDC* pXyDC, CDC* pScreenDC) { if (m_pText == NULL) return; DCHelp::ClearDC(pScreenDC, m_BackColor); pScreenDC->BitBlt(0, 0, m_client.Width(), m_client.Height(), m_pBackGroundDC, 0, 0, SRCCOPY); //pXyDC->Create(pScreenDC); //pXyDC->Draw(*m_pText, m_textColor); } void CItemText::OnLButtonDown(CDC* pDC, UINT nFlags, CPoint point, int vk) { if(m_pText==NULL) return; //GetDC()->Draw(*m_pText, GetDC()->GetDC()->GetBkColor()); CPoint2D pt=GetDC()->GetReal(point); m_pText->x0=pt.x0; m_pText->y0=pt.y0; OnDrawScreen(GetDC(), pDC); //TextDlg.GetText(m_pText); //m_textColor=TextDlg.color; //GetDC()->Draw(*m_pText,m_textColor); //GetDoc()->Invalidate(); } void CItemText::Create() { //备份文字信息,以备下次进入时使用 //if(GetDoc()->ItemState.m_pBkText==NULL) // GetDoc()->ItemState.m_pBkText=new CText; //*(GetDoc()->ItemState.m_pBkText)=*m_pText; CText* pText = new CText; *pText = *m_pText; POSITION pos = this->AddElement(pText, DOUBLEFOX_TEXT, false); GetDoc()->GetDraw()->SetElementColor(pos, m_textColor); } void CItemText::Create(CText* pText, COLORREF color) { *m_pText = *pText; CText* pTextNew = new CText; *pTextNew = *pText; this->m_textColor = color; POSITION pos = this->AddElement(pTextNew, DOUBLEFOX_TEXT, false); GetDoc()->GetDraw()->SetElementColor(pos, m_textColor); } void CItemText::EditText(COne* pOne) { if(m_pText)delete m_pText; m_pText=new CText; if(pOne) { *m_pText=*(CText*)pOne->GetValue(); m_textColor=pOne->color; //TextDlg.EditOne(pOne); } else { //恢复备份参数 //if(GetDoc()->ItemState.m_pBkText) { //*m_pText=*(GetDoc()->ItemState.m_pBkText); //TextDlg.SetText(m_pText); } //else { //自动根据单位设置文字大小 //double scale=GetDoc()->GetCurrentUnitScale(); //TextDlg.m_height *= scale; //TextDlg.m_width *= scale; } } //TextDlg.m_pItem=this; //TextDlg.Create(this->GetView()); m_bIsDlgEdit=TRUE; } void CItemText::EndEdit(int nReturn) { if(nReturn==IDOK) { //备份文字信息,以备下次进入时使用 //if(GetDoc()->ItemState.m_pBkText==NULL) //GetDoc()->ItemState.m_pBkText=new CText; //*(GetDoc()->ItemState.m_pBkText)=*m_pText; if(IsEditState()) { COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); //为UNDO做准备 //CActionModifiedItem* pAction=new CActionModifiedItem(GetDoc(), IDS_STRING_TOOLBAR_EDIT); //pAction->AddCloneItem(GetPos(), pOne); //GetDoc()->SetActionItem(pAction); CText* pText=(CText*)pOne->GetValue(); *pText=*m_pText; pOne->color=m_textColor; } else { POSITION pos=this->AddElement(m_pText,DOUBLEFOX_TEXT,false); CItem::SetPos(pos); GetDoc()->GetDraw()->SetElementColor(pos,m_textColor); m_pText=NULL; } } m_bIsDlgEdit=FALSE; GetDoc()->Invalidate(); //GetDoc()->EnableDefaultTool(); } void CItemText::SetTextInfo(CString & text, double textHeight , double textWidth, double angle, LOGFONT * font , int r, int g, int b, BOOL bScript) { SetText(text); SetTextHeight(textHeight); SetTextWidth(textWidth); SetAngle(angle); if (font != nullptr) { SetFont(font); } SetColor(r, g, b); SetScript(bScript); //DCHelp::ClearDC(m_pScreenDC); //m_pScreenDC->BitBlt(0, 0, m_client.Width(), m_client.Height(), m_pBackGroundDC, 0, 0, SRCCOPY); //GetDC()->Create(m_pScreenDC); //GetDC()->Draw(*m_pText, m_textColor); } void CItemText::GetTextInfo(CString & text, double & textHeight , double & textWidth, double & angle, LOGFONT * font , int & r, int & g, int & b, BOOL & bScript) { text = m_pText->GetName(); textHeight = m_pText->m_size.cy; textWidth = m_pText->m_size.cx; angle = m_pText->angle; if (font != 0) { CopyFont(font); } r = GetRValue(m_textColor); g = GetGValue(m_textColor); b = GetBValue(m_textColor); bScript = m_pText->m_bScript; } void CItemText::SetText(CString & text) { m_pText->SetName(text); } void CItemText::SetTextHeight(double textHeight) { m_pText->m_size.cy = textHeight; } void CItemText::SetTextWidth(double textWidth) { m_pText->m_size.cx = textWidth; } void CItemText::SetAngle(double angle) { m_pText->angle = angle; } void CItemText::SetFont(LOGFONT * font) { m_font = *font; memcpy(m_font.lfFaceName, font->lfFaceName, sizeof(m_font.lfFaceName)); m_pText->m_logFont = m_font; memcpy(m_pText->m_logFont.lfFaceName, m_font.lfFaceName, 32); } void CItemText::CopyFont(LOGFONT * font) { *font = m_font; memcpy(font->lfFaceName, m_font.lfFaceName, sizeof(font->lfFaceName)); } void CItemText::SetColor(int r, int g, int b) { m_textColor = RGB(r, g, b); } //是否开启文字的上下标 void CItemText::SetScript(BOOL bScript) { m_pText->m_bScript = bScript; } /* void CItemText::OnInplaceButtonDown(CXTPPropertyGridItem* pItem) { if(pItem == NULL) return; if(pItem->GetID() != IDS_STRING_NAME) return; COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); EditText(pOne); } BOOL CItemText::InitPropertyGrid(CXTPPropertyGrid& grid) { if(!IsEditState()) return FALSE; if(m_bIsDlgEdit) return FALSE; CPropertyGridItemAdd ItemAdd; ItemAdd = NULL; CXTPPropertyGridItem* pItem=grid.AddCategory(IDS_STRING_Text); ItemAdd.SetItem(pItem); pItem->Expand(); COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); CText* pValue=(CText*)pOne->GetValue(); pItem = new CCustomItemButton(IDS_STRING_NAME, GetOwner(), pValue->GetName()); pItem->SetFlags(xtpGridItemHasExpandButton|xtpGridItemHasEdit);//pItem->SetReadOnly(TRUE); ItemAdd.AddItem(pItem); return IniPublicGrid(grid, ItemAdd); } BOOL CItemText::IniPublicGrid(CXTPPropertyGrid& grid, CPropertyGridItemAdd &ItemAdd) { if(!IsEditState()) return FALSE; if(m_bIsDlgEdit) return FALSE; COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); CText* pValue=(CText*)pOne->GetValue(); m_point.SetPoint(pValue->x0,pValue->y0); ItemAdd.AddItemPoint(IDS_GI_COORDINATE,m_point,&m_point); CString strFormat=GetFloatFormatString(); m_szText = GetUnitMode().toPrintUnit(pValue->m_size); ItemAdd.AddItemUnitDouble(IDS_STRING_TEXT_HEIGHT, GetUnit(), m_szText.cy, strFormat, &m_szText.cy); ItemAdd.AddItemUnitDouble(IDS_STRING_TEXT_WIDTH, GetUnit(), m_szText.cx, strFormat, &m_szText.cx); ItemAdd.AddItemBool(IDS_GI_TEXT_HEIGHT_AND_WIDTH, m_bAlone, &m_bAlone); ItemAdd.AddItemDouble(IDS_STRING_ANGLE, pValue->angle, strFormat, NULL); color=pOne->color; ItemAdd.AddItemColor(IDS_GI_COLOR, color,&color); ItemAdd.AddItemFont(IDS_STRING_FONT, pValue->m_logFont); CXTPPropertyGridItem* pi=ItemAdd.GetItem(); CXTPPropertyGridItem* pItem=grid.AddCategory(IDS_GI_TEXT_ALIGNS); ItemAdd.SetItem(pItem); pItem->Expand(); SetMode(pValue); ItemAdd.AddItemCombo(IDS_GI_TEXT_ALIGNS_H, IDS_GI_TEXT_ALIGNS_H_IDEA, m_nAlignsH, &m_nAlignsH); ItemAdd.AddItemCombo(IDS_GI_TEXT_ALIGNS_V, IDS_GI_TEXT_ALIGNS_V_IDEA, m_nAlignsV, &m_nAlignsV); ItemAdd.AddItemCombo(IDS_STRING_Frame, IDS_GI_TEXT_FRAME, m_nFrame, &m_nFrame); ItemAdd.SetItem(pi); CItem::InitPropertyGrid(grid); return TRUE; } BOOL CItemText::OnGridItemChangeValue(CXTPPropertyGridItem* pItem) { if(!IsEditState()) return FALSE; COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); CText* pValue=(CText*)pOne->GetValue(); //CXTPPropertyGridItem* pFind; CString str; BOOL bUpdate=FALSE; switch(pItem->GetID()) { case IDS_STRING_NAME: pValue->SetName(pItem->GetValue()); bUpdate=TRUE; break; case IDS_STRING_ANGLE: pValue->angle=((CXTPPropertyGridItemDouble*)pItem)->GetDouble(); bUpdate=TRUE; break; case IDS_GI_TEXT_ALIGNS_H: //左对齐|水平居中|右对齐 case IDS_GI_TEXT_ALIGNS_V: //上对齐|垂直居中|下对齐 case IDS_STRING_Frame: //空|矩形|圆 GetMode(pValue); bUpdate=TRUE; break; case IDS_GI_COORDINATE: pValue->x0=m_point.x0; pValue->y0=m_point.y0; bUpdate=TRUE; break; case IDS_STRING_TEXT_WIDTH: bUpdate=TRUE; pValue->m_size.cx = GetUnitMode().toRealUnit(m_szText.cx); if(m_bAlone) break; pValue->m_size.cy=pValue->m_size.cx/0.4; //pf.FloatToString(str,pValue->m_size.cy);pFind=FindItem(pItem, IDS_STRING_TEXT_HEIGHT);if(pFind) pFind->SetValue(str); break; case IDS_STRING_TEXT_HEIGHT: bUpdate=TRUE; pValue->m_size.cy = GetUnitMode().toRealUnit(m_szText.cy); if(m_bAlone) break; pValue->m_size.cx=pValue->m_size.cy*0.4; //pf.FloatToString(str,pValue->m_size.cx);pFind=FindItem(pItem, IDS_STRING_TEXT_WIDTH);if(pFind) pFind->SetValue(str); break; case IDS_GI_COLOR: pOne->color=color; bUpdate=TRUE; break; case IDS_STRING_FONT: ((CXTPPropertyGridItemFont*)pItem)->GetFont(&pValue->m_logFont); bUpdate=TRUE; break; } return bUpdate | CItem::OnGridItemChangeValue(pItem); } */ //左对齐|水平居中|右对齐 //上对齐|垂直居中|下对齐 //空|矩形|圆 void CItemText::SetMode(CText* pValue) { UINT md; m_nAlignsH=2; md=pValue->GetAlignsH(); if(md & CTextFlags::alignLeft) m_nAlignsH=0; else if(md & CTextFlags::alignCenterH) m_nAlignsH=1; else if(md & CTextFlags::alignRight) m_nAlignsH=2; m_nAlignsV=2; md=pValue->GetAlignsV(); if(md & CTextFlags::alignTop) m_nAlignsV=0; else if(md & CTextFlags::alignCenterV) m_nAlignsV=1; else if(md & CTextFlags::alignBottom) m_nAlignsV=2; m_nFrame=0; md=pValue->GetFrameMode(); if(md & CTextFlags::frameNull) m_nFrame=0; else if(md & CTextFlags::frameRect) m_nFrame=1; else if(md & CTextFlags::frameCircle) m_nFrame=2; else if(md & CTextFlags::frameEllipse) m_nFrame=3; } void CItemText::GetMode(CText* pValue) { switch(m_nAlignsH) { case 0: pValue->SetAlignsH(CTextFlags::alignLeft); break; case 1: pValue->SetAlignsH(CTextFlags::alignCenterH); break; case 2: pValue->SetAlignsH(CTextFlags::alignRight); break; } switch(m_nAlignsV) { case 0: pValue->SetAlignsV(CTextFlags::alignTop); break; case 1: pValue->SetAlignsV(CTextFlags::alignCenterV); break; case 2: pValue->SetAlignsV(CTextFlags::alignBottom); break; } switch(m_nFrame) { case 0: pValue->SetFrameMode(CTextFlags::frameNull); break; case 1: pValue->SetFrameMode(CTextFlags::frameRect); break; case 2: pValue->SetFrameMode(CTextFlags::frameCircle); break; case 3: pValue->SetFrameMode(CTextFlags::frameEllipse); break; } } void CItemText::SetPosition(double x, double y) { m_pText->x0 = x; m_pText->y0 = y; } void CItemText::Reset() { m_font.lfWidth = 5; m_font.lfHeight = m_font.lfWidth * 2; m_font.lfEscapement = 0; m_font.lfOrientation = 0; m_font.lfWeight = FW_NORMAL; m_font.lfItalic = 0; m_font.lfUnderline = 0; m_font.lfStrikeOut = 0; m_font.lfCharSet = DEFAULT_CHARSET; m_font.lfOutPrecision = OUT_DEFAULT_PRECIS; m_font.lfClipPrecision = CLIP_LH_ANGLES; m_font.lfQuality = DEFAULT_QUALITY; m_font.lfPitchAndFamily = DEFAULT_PITCH; sprintf(m_font.lfFaceName, "Times New Roman"); delete m_pText; m_pText = new CText(); m_pText->m_logFont = m_font; memcpy(m_pText->m_logFont.lfFaceName, m_font.lfFaceName, 32); m_textColor = RGB(0, 0, 0); }