#include "StdAfx.h" #include "ObjTxt.h" #include "GlobalFunction.h" #include "LogMgr.h" #include "FontTypeMgr.h" CObjTxt::CObjTxt(void) { } CObjTxt::~CObjTxt(void) { } CObjTxt::CObjTxt(CObjTxt &rhs) :CObjString(rhs) { m_FontPar = rhs.m_FontPar; CreatExt(); } CString CObjTxt::GetStr() { CString str = "字符串"; return str; } //参数绑定到对话框 void CObjTxt::BindingDlg() { #ifdef __DLG_PANE_VAR_STRING__ GetFrame()->m_DlgVariableString.BindingObjString(this); #endif } void CObjTxt::CreatExt() { //清空容器 m_ObjContainer.Clear(); //获取字符串 CString Str = GetCurString(); //逆序处理 MakeReverse(Str); //获取单个字符数据到m_ObjContainer GetEachCharData(Str); //调整字符宽度,高度 AdjustWidthHeight(); //调整字符间隔 AdjustGap(); //内外向处理 MakeOutDir(); //调整斜体的角度 AdjustItalic(); //调整圆弧文本 AdjustArcTxt(); //恢复之前的状态 RecoverPerState(); } #if 1 //获取当前文本 CString CObjTxt::GetCurString() { //可变文本更新 m_ValStr.UpdateValStr(); return m_ValStr.GetString(); } //获取单个字符数据 void CObjTxt::GetEachCharData(CString Str) { //先保存旧的字体 CFontTypeMgr &pFontTypeMgr = CFontTypeMgr::Instance(); CString OldFontTypeName = pFontTypeMgr.GetCurFontTypeName(); CString OldFontName = pFontTypeMgr.GetCurFontName(); //设置当前选用的字体 pFontTypeMgr.SetCurFontByName(m_FontTypeName,m_FontName); const char* pStr=(const char*)(Str); int StrLen = strlen(pStr); while(StrLen>0) { unsigned char char1,char2; char Char[3]; char1 = *pStr; char2 = *(pStr+1); if(char1>160 && char2>160)//两位是一个汉字 { strncpy(Char,pStr,2); Char[2]='\0'; pStr += 2; StrLen -= 2; } else//一位一个字母 { strncpy(Char,pStr,1); Char[1]='\0'; pStr += 1; StrLen -= 1; } CObjChar *p = new CObjChar(Char); p->Creat(); m_ObjContainer.AddObject(p); } //还原旧的字体 pFontTypeMgr.SetCurFontByName(OldFontTypeName,OldFontName); } //逆序处理 void CObjTxt::MakeReverse(CString &Str) { if(m_FontPar.m_bReverse) { Str.MakeReverse(); } } //内外向处理 void CObjTxt::MakeOutDir() { if(m_FontPar.m_bOutDir) { DbRect rect = m_ObjContainer.GetObjRect(false); SObjOperatePar par; par.OpType = _OP_MIRROR; par.BasePt = rect.GetCenterPt(); par.xy = _Y; m_ObjContainer.OperateObj(par,false); } } #endif #if 1//调整 //调整字符宽度,高度 void CObjTxt::AdjustWidthHeight() { DbRect rect = m_ObjContainer.GetObjRect(false); double Scale = m_FontPar.m_CharHeight/rect.GetSize().h; //确定缩放比例 SObjOperatePar par; par.OpType = _OP_SCALE; par.Scale = Scale; int size = m_ObjContainer.GetSize(); for(int i=0;i