Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/SingleRowText.cpp
T

948 lines
24 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
// SingleRowText.cpp : implementation file
2026-09-28 15:28:50 +08:00
//
#include "stdafx.h"
#include "SingleRowText.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const int maxHisList = 10;
static int g_nAlignIndex = 6;
static XExplodeDraw::TextAlignment
g_AlignList[] = { XExplodeDraw::kTopLeft, XExplodeDraw::kTopCenter ,
XExplodeDraw::kTopRight, XExplodeDraw::kMiddleLeft ,
XExplodeDraw::kMiddleCenter, XExplodeDraw::kMiddleRight ,
XExplodeDraw::kBottomLeft, XExplodeDraw::kBottomCenter ,
XExplodeDraw::kBottomRight,};
/////////////////////////////////////////////////////////////////////////////
// CSingleRowText dialog
BOOL CSingleRowText::m_bContinue=TRUE;// Add by lcf on 2005-06-30
CString CSingleRowText::m_strHeight = _T("3.5");
CString CSingleRowText::m_strRotation = _T("0");
2026-10-04 00:04:20 +08:00
// add by xly on 101014 记录文字样式变为静态变量,初始化
2026-09-28 15:28:50 +08:00
CString CSingleRowText::m_strFontStyle = _T("");
extern CString DocGetTgSingleTextStyle();
extern BOOL DocSetTgSingleTextStyle(CString &csStyle);
IMPLEMENT_DYNAMIC(CSingleRowText, CCharToolbarDlg)
CSingleRowText::CSingleRowText(BOOL bEdit, CWnd* pParent /*=NULL*/)
: CCharToolbarDlg(CSingleRowText::IDD, pParent),m_bEditObj(bEdit)
{
m_bChangeCurTextStyle=true;
//{{AFX_DATA_INIT(CSingleRowText)
m_strInputText = _T("");
m_bTextMask=FALSE;
//}}AFX_DATA_INIT
2026-10-04 00:04:20 +08:00
// modify by xly on 110310 从图纸中获得文字样式
//// modify by xly on 101014 记录文字样式变为静态变量
2026-09-28 15:28:50 +08:00
///*TCHAR sStyle[256]=_T("");
//xg_getvar(_T("TEXTSTYLE"), sStyle);
//m_strFontStyle=sStyle;*/
//if (m_strFontStyle.IsEmpty())
//{
// TCHAR sStyle[256]=_T("");
// xg_getvar(_T("TEXTSTYLE"), sStyle);
// m_strFontStyle = sStyle;
//}
m_strFontStyle = DocGetTgSingleTextStyle();
// Add By Lcf On 2005-6-06-30
m_bPost = FALSE;
m_nOperCode = -1;
}
void CSingleRowText::DoDataExchange(CDataExchange* pDX)
{
CCharToolbarDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSingleRowText)
DDX_Control(pDX, IDC_COMBO_ALIGNMENT, m_comboAlign);
DDX_Control(pDX, IDC_COMBO_HISTORY_TEXT, m_comboHistory);
DDX_Control(pDX, IDC_COMBO_FONGSTYLE, m_comboStyleName);
if(pDX->m_bSaveAndValidate) {
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE, m_strFontStyle);
} else {
m_comboStyleName.SetCurSel(m_comboStyleName.FindStringExact(0, m_strFontStyle));
}
DDX_CBString(pDX, IDC_COMBO_HEIGHT, m_strHeight);
if(pDX->m_bSaveAndValidate && _tstof(m_strHeight)<1.0E-3)
pDX->Fail();
if(pDX->m_bSaveAndValidate) {
DDX_CBString(pDX, IDC_COMBO_HISTORY_TEXT, m_strInputText);
} else {
GetDlgItem(IDC_COMBO_HISTORY_TEXT)->SetWindowText(m_strInputText);
}
DDX_Text(pDX, IDC_ROTATION, m_strRotation);
DDX_Check(pDX, IDC_TEXTMASK, m_bTextMask);
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
//}}AFX_DATA_MAP
DDX_CBIndex(pDX, IDC_COMBO_ALIGNMENT, g_nAlignIndex);
}
BEGIN_MESSAGE_MAP(CSingleRowText, CCharToolbarDlg)
//{{AFX_MSG_MAP(CSingleRowText)
ON_CBN_SELCHANGE(IDC_COMBO_HISTORY_TEXT, OnSelchangeComboHistoryText)
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE, OnSelchangeComboFongstyle)
ON_BN_CLICKED(IDC_BUTTON_TEXT_HEIGHT, OnButtonTextHeight)
ON_WM_ACTIVATE()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON_ANGLE, OnBnClickedButtonAngle)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSingleRowText message handlers
BOOL CSingleRowText::OnInitDialog()
{
CCharToolbarDlg::OnInitDialog();
LoadTextStyle();
LoadHisText();
m_comboAlign.SetCurSel(g_nAlignIndex);
UpdateData(FALSE);
if(!m_bEditObj) {
if(m_comboHistory.GetCount() == 0)
2026-10-04 00:04:20 +08:00
m_strInputText = _T("上华单行文字输入");
2026-09-28 15:28:50 +08:00
if(m_lstHistory.Length()>0)
m_strInputText = m_lstHistory[0];
}
UpdateData(FALSE);
m_ctrlInputText = GetDlgItem(IDC_COMBO_HISTORY_TEXT);
m_comboHistory.SetFocus();
// Add By Lcf On 2005-6-06-30
if(!m_bEditObj)
{
CRect rOk;
GetDlgItem(IDOK)->GetWindowRect(rOk);
CRect rect;
GetWindowRect(rect);
rect.bottom -= rOk.Height();
rect.bottom -= 5;//add by whl
MoveWindow(rect);
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
}
else
GetDlgItem(IDC_CONTINUE)->ShowWindow(SW_HIDE);
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
const TCHAR *CSingleRowText::GetHistoryFileName()
{
return _T("text.his");
}
void CSingleRowText::LoadHisText()
{
TCHAR strTmpPath[100] = _T("");
GetTempPath(100, strTmpPath);
_tcscat(strTmpPath, GetHistoryFileName());
#if (ADS>15)
std::
#endif
ifstream in(strTmpPath);
while(!(!in)) {
char line[256];
in.getline(line, 255);
if(!in) break;
m_lstHistory.Append(tstrnew(TString(line)));
}
for (int m =0; m < m_lstHistory.Length(); m++)
m_comboHistory.AddString(m_lstHistory[m]);
UpdateData(false);
}
void CSingleRowText::LoadTextStyle()
{
2026-10-04 00:04:20 +08:00
// modify by xly on 101015 不将所有的文字样式转化为大写
2026-09-28 15:28:50 +08:00
/*
XSymbolList lstStyle(_T("STYLE"));
for (int m =0; m < lstStyle.Length(); m++)
m_comboStyleName.AddString(lstStyle[m]);
*/
AcDbDatabase *pCurDwg = acdbCurDwg();
AcDbTextStyleTable* pTT = NULL;
VERIFY(pCurDwg->getSymbolTable(pTT, AcDb::kForRead)==Acad::eOk);
AcDbTextStyleTableIterator* pIter = NULL;
VERIFY(pTT->newIterator(pIter)==Acad::eOk);
pTT->close();
for (pIter->start(); !pIter->done(); pIter->step())
{
AcDbTextStyleTableRecord* pTTR;
if (pIter->getRecord(pTTR, AcDb::kForRead) != Acad::eOk)
continue;
const TCHAR* pName = NULL;
if (pTTR->getName(pName) == Acad::eOk && pName != NULL)
{
2026-10-04 00:04:20 +08:00
if (m_lstStyle.Index(pName) < 0 ) // 如果没有重复
m_lstStyle.Append(tstrnew(pName)); // 读字体风格
2026-09-28 15:28:50 +08:00
}
pTTR->close();
}
delete pIter;
2026-10-04 00:04:20 +08:00
// add by xly on 110311 从图纸中读取文字样式
// sg modify 110818,如果是对象编辑,不能修改文字样式,只在布置单行文字的时候,才需要处理
2026-09-28 15:28:50 +08:00
if(!m_bEditObj)
{
m_strFontStyle = DocGetTgSingleTextStyle();
}
2026-10-04 00:04:20 +08:00
// add by xly on 110106 如果使用新创建的文字样式,图纸切换时产生bug
// 标记文字样式中,是否有当前样式
2026-09-28 15:28:50 +08:00
bool bIsHas(false);
for (int m =0; m < m_lstStyle.Length(); m++)
{
m_comboStyleName.AddString(m_lstStyle[m]);
2026-10-04 00:04:20 +08:00
// 标记文字样式中有当前样式
2026-09-28 15:28:50 +08:00
if (m_lstStyle[m] == m_strFontStyle)
{
bIsHas = true;
}
}
2026-10-04 00:04:20 +08:00
// 没有当前样式,设置默认样式Stantard
2026-09-28 15:28:50 +08:00
if (!bIsHas)
{
TCHAR sStyle[256]=_T("");
xg_getvar(_T("TEXTSTYLE"), sStyle);
m_strFontStyle = sStyle;
}
//UpdateData(false);
2026-10-04 00:04:20 +08:00
// add by xly on 110429 文字样式不存在
2026-09-28 15:28:50 +08:00
if (m_strFontStyle.IsEmpty())
{
TCHAR sStyle[256]=_T("");
xg_getvar(_T("TEXTSTYLE"), sStyle);
m_strFontStyle = sStyle;
}
}
void CSingleRowText::Obj2Dlg(TDbText *pText)
{
m_bTextMask=(pText->GetMaskFlag()!=0);
m_strHeight.Format(_T("%.1f"), pText->GetHeight());
m_strRotation = (const TCHAR *)Angle2Str(Wcs2Ucs(pText->GetRotation()) * 180.0 / PI);
AcDbObjectId idTextStyle = pText->GetStyleId();
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
ASSERT(pStyle);
const TCHAR* pName = NULL;
if (pStyle->getName(pName) == Acad::eOk && pName != NULL)
m_strFontStyle = pName;
else
2026-10-04 00:04:20 +08:00
AfxMessageBox(_T("文字样式已删除!"));
2026-09-28 15:28:50 +08:00
OPENOBJ_END();
m_strInputText = pText->GetText();
XExplodeDraw::TextAlignment Align = pText->GetAlignment();
for(int i = 0; i < 9; i++)
{
if(Align == g_AlignList[i])
g_nAlignIndex = i;
}
}
void CSingleRowText::Dlg2Obj(TDbText *pText)
{
//XString sTextStyle = m_strStyle;
//xg_setvar(_T("TEXTSTYLE"), sTextStyle);
AcDbObjectId idTextStyle = GetTextStyleId(m_strFontStyle);
if(!idTextStyle)
return;
pText->SetStyleId(idTextStyle);
//g_nHeight = _tstof(m_strHeight);
pText->SetHeight(_tstof(m_strHeight));
pText->SetRotation(Ucs2Wcs(_tstof(m_strRotation) * PI / 180.0));
pText->SetText(m_strInputText);
pText->SetAlignment(g_AlignList[g_nAlignIndex]);
pText->SetMaskFlag(m_bTextMask);
}
void CSingleRowText::OnOK()
{
AddToRecent();
CCharToolbarDlg::OnOK();
if(!m_bEditObj&&m_bChangeCurTextStyle) // ZJQ modify on 2004/3/5
xg_setvar(_T("TEXTSTYLE"), m_strFontStyle);
}
void CSingleRowText::AddToRecent()
{
{
UpdateData(TRUE);
int len = m_lstHistory.Length();
//g_nAlignIndex = m_comboAlign.GetCurSel();
//if(g_nAlignIndex < 0)
// g_nAlignIndex = 6;
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, GetHistoryFileName());
#if (ADS>15)
std::
#endif
ofstream out(strTmpPath);
if(m_strInputText != _T("")) {
out << (const char *)_AS(m_strInputText) << "\n";
int index = m_lstHistory.Index(m_strInputText);
if(index >= 0) {
m_lstHistory.Remove(index);
len --;
}
if(len > maxHisList-1) len = maxHisList - 1;
}
for(int i=0; i < len; i++)
out << _AS(m_lstHistory[i]) <<"\n";
}
m_lstHistory.Reset();
m_comboHistory.ResetContent();
LoadHisText();
}
void CSingleRowText::OnSelchangeComboHistoryText()
{
if(m_comboHistory.GetCurSel()>=0)
m_comboHistory.GetLBText(m_comboHistory.GetCurSel(), m_strInputText);
}
void CSingleRowText::OnSelchangeComboFongstyle()
{
UpdateData(TRUE);
AcDbObjectId idTextStyle = GetTextStyleId(m_strFontStyle);
if(!idTextStyle)
return;
2026-10-04 00:04:20 +08:00
// add by xly on 110310保存文字样式到图纸中
2026-09-28 15:28:50 +08:00
DocSetTgSingleTextStyle(m_strFontStyle);
UpdateData(FALSE);
}
void CSingleRowText::OnCancel()
{
CCharToolbarDlg::OnCancel();
}
// Modify By Lcf On 2005-6-06-30
void CSingleRowText::OnButtonTextHeight()
{
if(!m_bEditObj && m_bPost)
{
m_nOperCode = 0;
PostCommand(_T("` "), false);
}
else
{
GetTextHeight();
acedGetAcadDwgView()->SetFocus();
}
}
// Add By Lcf On 2005-6-06-30
void CSingleRowText::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CCharToolbarDlg::OnActivate(nState, pWndOther, bMinimized);
if(nState == WA_CLICKACTIVE)
{
int nSel = m_comboHistory.GetWindowTextLength();
m_comboHistory.SetEditSel(nSel, nSel);
}
else if(nState == WA_INACTIVE)
{
UpdateData();
if(!m_bEditObj && m_bPost)
PostCommand(_T("` "), false);
}
}
// Add By Lcf On 2005-6-06-30
void CSingleRowText::OnClose()
{
if(!m_bEditObj)
{
m_bPost = FALSE;
PostCommand(_T(" "), false);
}
CCharToolbarDlg::OnClose();
}
// Add By Lcf On 2005-6-06-30
void CSingleRowText::GetTextHeight()
{
XPushAutoHide noAutoHide(this);
XPushMemVar<BOOL> vTemp(m_bPost,FALSE);
m_nOperCode = -1;
UpdateData(TRUE);
double nHeight = _tstof(m_strHeight)*DocGetPScale();
BeginEditorCommand();
2026-10-04 00:04:20 +08:00
if(GetDist(_T("\n字高"), nHeight, RSG_NOZERO|RSG_NONEG) == RTNORM) {
2026-09-28 15:28:50 +08:00
nHeight /= DocGetPScale();
m_strHeight.Format(_T("%.1f"), nHeight);
}
CompleteEditorCommand();
UpdateData(FALSE);
}
// Add By Lcf On 20050808
void CSingleRowText::OnBnClickedButtonAngle()
{
if(m_bModeless && m_bPost)
{
m_nOperCode = 2;
PostCommand(_T("` "), false);
}
else
{
GetTextAngle();
acedGetAcadDwgView()->SetFocus();
}
}
// Add By Lcf On 2005-6-06-30
void CSingleRowText::GetTextAngle()
{
XPushAutoHide noAutoHide(this);
XPushMemVar<BOOL> vTemp(m_bPost,FALSE);
m_nOperCode = -1;
UpdateData(TRUE);
double nAngle = 0.0;
BeginEditorCommand();
2026-10-04 00:04:20 +08:00
if(acedGetAngle(NULL, _T("\n文字转角<") + m_strRotation + _T(">:"), &nAngle) == RTNORM)
2026-09-28 15:28:50 +08:00
m_strRotation.Format(_T("%lf"), nAngle*180/PI);
CompleteEditorCommand();
UpdateData(FALSE);
}
////////////////////////////////////////////////////////////////////////////
// CDrawingNameDlg
int CDrawingNameDlg::m_nStyle=1;
2026-10-04 00:04:20 +08:00
// sg modify 120706,9.0起不再使用当前样式,而是使用记忆上一次的样式
2026-09-28 15:28:50 +08:00
//CString CDrawingNameDlg::m_strFontStyle1=_T("STANDARD");
//CString CDrawingNameDlg::m_strFontStyle2=_T("STANDARD");
CString CDrawingNameDlg::m_strFontStyle1 = GetTextStyleName(TS_DRAWINGNAME);
CString CDrawingNameDlg::m_strFontStyle2 = GetTextStyleName(TS_DRAWINGNAME);
CString CDrawingNameDlg::m_strHeight2=_T("5.0");
CString CDrawingNameDlg::m_strHeight1=_T("7.0");
CString CDrawingNameDlg::m_csScaleText=_T("");
BOOL CDrawingNameDlg::m_bNoScale=FALSE;
BOOL CDrawingNameDlg::m_bContinue=TRUE;
IMPLEMENT_DYNAMIC(CDrawingNameDlg,CCharToolbarDlg)
CDrawingNameDlg::CDrawingNameDlg(BOOL bEdit, CWnd* pParent /*=NULL*/)
: CCharToolbarDlg(bEdit?CDrawingNameDlg::IDD1:CDrawingNameDlg::IDD, pParent)
, mPreviewDb(true,true)
, bPreviewReady(false)
{
m_bChangeCurTextStyle=false;
TCHAR sStyle[256] = _T("");
2026-10-04 00:04:20 +08:00
// sg delete 120706,9.0起不再使用当前样式,而是使用记忆上一次的样式
2026-09-28 15:28:50 +08:00
//xg_getvar(_T("TEXTSTYLE"), sStyle);
//m_strFontStyle1 = sStyle;
//m_strFontStyle2 = sStyle;
if(m_csScaleText == _T(""))
{
double bScale = DocGetPScale();
if(fabs(bScale - 1.0) < 1e-6)
m_csScaleText.Format(_T("1:%.0f"), 1000 * bScale);
else
m_csScaleText.Format(_T("1:%.0f"), bScale);
}
AcDbRegAppTable *pTab = NULL;
VERIFY(mPreviewDb.getSymbolTable(pTab, AcDb::kForWrite)==Acad::eOk);
if(!pTab->has(TCHXD)) {
AcDbRegAppTableRecord *pRec=new AcDbRegAppTableRecord();
pRec->setName(TCHXD);
pTab->add(pRec);
pRec->close();
}
pTab->close();
// Add By Lcf On 2005-6-06-30
m_bPost = FALSE;
m_nOperCode = -1;
m_nHeightType = 1;
}
void CDrawingNameDlg::UpdatePreview()
{
if(m_bModeless)//add by whl on 060213
return;
mPreviewCtrl.clearAll();
mPreviewCtrl.init(true);
{
AcDbBlockTable *pBlockTab=NULL;
if(mPreviewDb.getSymbolTable(pBlockTab, AcDb::kForWrite)!=Acad::eOk)
return;
AcDbBlockTableRecord*pMspace=new AcDbBlockTableRecord;
pMspace->setName(_T("*U"));
AcDbObjectId blockId;
pBlockTab->add(blockId,pMspace);
pBlockTab->close();
AcGePoint3d target;
double length,width;
Draw(pMspace,target,length,width);
AcGePoint3d position(target.x,target.y,1);
mPreviewCtrl.view()->setView(position, target,AcGeVector3d(0.0, 1.0, 0.0),length,width);
mPreviewCtrl.view()->add(pMspace,mPreviewCtrl.model());
pMspace->close();
}
mPreviewCtrl.Invalidate();
}
BOOL CDrawingNameDlg::DestroyWindow()
{
mPreviewCtrl.clearAll();
return CCharToolbarDlg::DestroyWindow();
}
void CDrawingNameDlg::Draw(AcDbBlockTableRecord*pSpace,AcGePoint3d&center,double&length,double &width)
{
TDbDrawingName *pDrawingName = new TDbDrawingName;
Dlg2Obj(pDrawingName);
pDrawingName->SetRotation(0.0);
pDrawingName->setLayer(pDrawingName->GetDefaultLayer());
// pDrawingName->SetLocation(AcGePoint3d(0, 0, 0));
pDrawingName->SetMidLocation(AcGePoint3d(0, 0, 0));
pDrawingName->SetPScale(1);
2026-10-04 00:04:20 +08:00
//modify by xlc on 091019 解决2010平台编辑时对象不显示的问题
2026-09-28 15:28:50 +08:00
#if ADS<18
pSpace->appendAcDbEntity(pDrawingName);
XPoint ptMin,ptMax;
pDrawingName->GetExtents2d(ptMin, ptMax);
pDrawingName->close();
#else
XPoint ptMin,ptMax;
pDrawingName->GetExtents2d(ptMin, ptMax);
AcDbEntity *pClone=(AcDbEntity*)pDrawingName->clone();
delete pDrawingName;
pClone->setDatabaseDefaults(&mPreviewDb);
pSpace->appendAcDbEntity(pClone);
pClone->recordGraphicsModified();
pClone->close();
#endif
center.x=(ptMin.x+ptMax.x)/2;
center.y=(ptMin.y+ptMax.y)/2;
length=(ptMax.x-ptMin.x)*1.2;
width=(ptMax.y-ptMin.y)*1.2;
if(length>2.5*width)
width=length/2.5;
else
length=width*2.5;
}
void CDrawingNameDlg::DoDataExchange(CDataExchange* pDX)
{
CCharToolbarDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDrawingNameDlg)
DDX_Control(pDX, IDC_COMBO_FONGSTYLE1, m_comboStyleName1);
DDX_Control(pDX, IDC_COMBO_FONGSTYLE2, m_comboStyleName2);
if(pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_NAME_LIST, m_strInputText);
DDX_CBString(pDX, IDC_SCALE_LIST, m_csScaleText);
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE1, m_strFontStyle1);
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE2, m_strFontStyle2);
}
else
{
GetDlgItem(IDC_NAME_LIST)->SetWindowText(m_strInputText);
GetDlgItem(IDC_SCALE_LIST)->SetWindowText(m_csScaleText);
//m_comboStyleName1.SetCurSel(m_comboStyleName1.FindStringExact(0, m_strFontStyle1));
//m_comboStyleName2.SetCurSel(m_comboStyleName2.FindStringExact(0, m_strFontStyle2));
}
DDX_CBString(pDX, IDC_COMBO_HEIGHT1, m_strHeight1);
DDX_CBString(pDX, IDC_COMBO_HEIGHT2, m_strHeight2);
if(pDX->m_bSaveAndValidate && _tstof(m_strHeight1)<1.0E-3)
pDX->Fail();
if(pDX->m_bSaveAndValidate && _tstof(m_strHeight2)<1.0E-3)
pDX->Fail();
DDX_Check(pDX, IDC_NO_SCALE, m_bNoScale);
DDX_Radio(pDX, IDC_STYLE1, m_nStyle);
DDX_Control(pDX, IDC_NAME_LIST, m_comboName);
DDX_Control(pDX, IDC_SCALE_LIST, m_comboScale);
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
//}}AFX_DATA_MAP
if(bPreviewReady)
UpdatePreview();
}
BEGIN_MESSAGE_MAP(CDrawingNameDlg, CCharToolbarDlg)
//{{AFX_MSG_MAP(CDrawingNameDlg)
ON_BN_CLICKED(IDC_STYLE1, OnBnClickedUpdate)
ON_BN_CLICKED(IDC_STYLE2, OnBnClickedUpdate)
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE1, OnBnClickedUpdate)
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE2, OnBnClickedUpdate)
ON_BN_CLICKED(IDC_NO_SCALE, OnBnClickedNoScale)
ON_CBN_SELCHANGE(IDC_COMBO_HEIGHT1, OnCbnSelchangeComboHeight1)
ON_CBN_SELCHANGE(IDC_COMBO_HEIGHT2, OnCbnSelchangeComboHeight2)
ON_BN_CLICKED(IDC_BUTTON_TEXT_HEIGHT1, OnButtonTextHeight1)
ON_BN_CLICKED(IDC_BUTTON_TEXT_HEIGHT2, OnButtonTextHeight2)
ON_CBN_SELCHANGE(IDC_NAME_LIST, OnCbnSelchangeNameList)
ON_CBN_SELCHANGE(IDC_SCALE_LIST, OnCbnSelchangeScaleList)
ON_WM_ACTIVATE()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawingNameDlg message handlers
const TCHAR *
CDrawingNameDlg::GetHistoryFileName()
{
return _T("drawingname.his");
}
void CDrawingNameDlg::LoadHisText()
{
TCHAR strTmpPath[100] = _T("");
GetTempPath(100, strTmpPath);
_tcscat(strTmpPath, GetHistoryFileName());
#if (ADS>15)
std::
#endif
ifstream in(strTmpPath);
while(!(!in)) {
char line[256];
in.getline(line, 255);
if(!in) break;
m_lstHistory.Append(tstrnew(TString(line)));
}
for (int m =0; m < m_lstHistory.Length(); m++)
m_comboName.AddString(m_lstHistory[m]);
UpdateData(false);
}
void CDrawingNameDlg::LoadTextStyle()
{
XSymbolList lstStyle(_T("STYLE"));
for (int m =0; m < lstStyle.Length(); m++)
{
m_comboStyleName1.AddString(lstStyle[m]);
m_comboStyleName2.AddString(lstStyle[m]);
}
}
BOOL CDrawingNameDlg::OnInitDialog()
{
CCharToolbarDlg::OnInitDialog();
if (!mPreviewCtrl.SubclassDlgItem(IDC_PREVIEW,this))
return FALSE;
LoadTextStyle();
LoadHisText();
2026-10-04 00:04:20 +08:00
// sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用上华固定的文字样式
2026-09-28 15:28:50 +08:00
int nRet = m_comboStyleName1.FindStringExact(0, m_strFontStyle1);
if (nRet < 0)
{
nRet = m_comboStyleName1.FindStringExact(0, _T("STANDARD"));
}
m_comboStyleName1.SetCurSel(nRet);
nRet = m_comboStyleName2.FindStringExact(0, m_strFontStyle2);
if (nRet < 0)
{
nRet = m_comboStyleName2.FindStringExact(0, _T("STANDARD"));
}
m_comboStyleName2.SetCurSel(nRet);
bPreviewReady=true;
m_ctrlInputText = GetDlgItem(IDC_NAME_LIST);
GetDlgItem(IDC_SCALE_LIST)->SetWindowText(m_csScaleText);
if(m_bModeless)
{
if(m_comboName.GetCount() == 0)
2026-10-04 00:04:20 +08:00
m_strInputText = _T("上华图名标注输入");
2026-09-28 15:28:50 +08:00
if(m_lstHistory.Length()>0)
m_strInputText = m_lstHistory[0];
}
UpdateData(FALSE);
m_comboName.SetFocus();
GetDlgItem(IDC_SCALE_LIST)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_BUTTON_TEXT_HEIGHT2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_FONGSTYLE2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_HEIGHT2)->EnableWindow(!m_bNoScale);
// Add By Lcf On 2005-6-06-30
if(m_bModeless)
{
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
}
else
GetDlgItem(IDC_CONTINUE)->ShowWindow(SW_HIDE);
return TRUE;
}
void CDrawingNameDlg::OnBnClickedUpdate()
{
UpdateData();
}
void CDrawingNameDlg::OnButtonTextHeight2()
{
m_nHeightType = 2;
if(m_bModeless && m_bPost)
{
m_nOperCode = 0;
PostCommand(_T("` "), false);
}
else
{
GetTextHeight();
acedGetAcadDwgView()->SetFocus();
}
}
void CDrawingNameDlg::OnButtonTextHeight1()
{
m_nHeightType = 1;
if(m_bModeless && m_bPost)
{
m_nOperCode = 0;
PostCommand(_T("` "), false);
}
else
{
GetTextHeight();
acedGetAcadDwgView()->SetFocus();
}
}
void CDrawingNameDlg::OnCbnSelchangeComboHeight1()
{
CComboBox*pBox=((CComboBox*)GetDlgItem(IDC_COMBO_HEIGHT1));
if(pBox->GetCurSel()>=0)
pBox->GetLBText(pBox->GetCurSel(),m_strHeight1);
pBox->SetWindowText(m_strHeight1);
UpdateData();
}
void CDrawingNameDlg::OnCbnSelchangeComboHeight2()
{
CComboBox*pBox=((CComboBox*)GetDlgItem(IDC_COMBO_HEIGHT2));
if(pBox->GetCurSel()>=0)
pBox->GetLBText(pBox->GetCurSel(),m_strHeight2);
pBox->SetWindowText(m_strHeight2);
UpdateData();
}
void CDrawingNameDlg::OnBnClickedNoScale()
{
UpdateData();
GetDlgItem(IDC_SCALE_LIST)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_BUTTON_TEXT_HEIGHT2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_FONGSTYLE2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_HEIGHT2)->EnableWindow(!m_bNoScale);
}
void CDrawingNameDlg::OnCbnSelchangeScaleList()
{
if(m_comboScale.GetCurSel()>=0)
m_comboScale.GetLBText(m_comboScale.GetCurSel(),m_csScaleText);
m_comboScale.SetWindowText(m_csScaleText);
UpdateData();
}
void CDrawingNameDlg::OnCbnSelchangeNameList()
{
CComboBox*pBox=((CComboBox*)GetDlgItem(IDC_NAME_LIST));
if(pBox->GetCurSel()>=0)
pBox->GetLBText(pBox->GetCurSel(),m_strInputText);
pBox->SetWindowText(m_strInputText);
UpdateData();
}
void CDrawingNameDlg::OnOK()
{
AddToRecent();
CCharToolbarDlg::OnOK();
if(m_bModeless&&m_bChangeCurTextStyle) // ZJQ modify on 2004/3/5
xg_setvar(_T("TEXTSTYLE"), m_strFontStyle1);
}
void CDrawingNameDlg::AddToRecent()
{
{
UpdateData(TRUE);
int len = m_lstHistory.Length();
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, GetHistoryFileName());
#if (ADS>15)
std::
#endif
ofstream out(strTmpPath);
if(m_strInputText != _T("")) {
out << (const char *)_AS(m_strInputText) << "\n";
int index = m_lstHistory.Index(m_strInputText);
if(index >= 0) {
m_lstHistory.Remove(index);
len --;
}
if(len > maxHisList-1) len = maxHisList - 1;
}
for(int i=0; i < len; i++)
out << _AS(m_lstHistory[i]) << "\n";
}
m_lstHistory.Reset();
m_comboName.ResetContent();
LoadHisText();
}
// Add by lcf 2004/12/01
void CDrawingNameDlg::Dlg2Obj(TDbDrawingName* pDrawingName)
{
AcDbObjectId idTextStyle1 = GetTextStyleId(m_strFontStyle1);
if(!idTextStyle1)
return;
pDrawingName->SetNameText(m_strInputText);
pDrawingName->SetNameStyleId(idTextStyle1);
pDrawingName->SetNameHeight(_tstof(m_strHeight1));
AcDbObjectId idTextStyle2 = GetTextStyleId(m_strFontStyle2);
if(!idTextStyle2)
return;
pDrawingName->SetScaleText(m_csScaleText);
pDrawingName->SetScaleStyleId(idTextStyle2);
pDrawingName->SetScaleHeight(_tstof(m_strHeight2));
pDrawingName->SetShowScale(!m_bNoScale);
pDrawingName->SetDrawStyle(m_nStyle);
}
void CDrawingNameDlg::Obj2Dlg(TDbDrawingName* pDrawingName)
{
if(pDrawingName == NULL)
return;
m_strInputText = pDrawingName->GetNameText();
m_csScaleText = pDrawingName->GetScaleText();
m_strFontStyle1 = GetSymbolName(pDrawingName->GetNameStyleId());
m_strFontStyle2 = GetSymbolName(pDrawingName->GetScaleStyleId());
m_strHeight1.Format(_T("%.1f"), pDrawingName->GetNameHeight());
m_strHeight2.Format(_T("%.1f"), pDrawingName->GetScaleHeight());
m_bNoScale = !pDrawingName->GetShowScale();
m_nStyle = pDrawingName->GetDrawStyle();
}
// Add By Lcf On 2005-6-06-30
void CDrawingNameDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CCharToolbarDlg::OnActivate(nState, pWndOther, bMinimized);
if(!m_bModeless)//add by whl on 060213
return;
if(nState == WA_CLICKACTIVE)
{
int nSel = m_comboName.GetWindowTextLength();
m_comboName.SetEditSel(nSel, nSel);
}
else if(nState == WA_INACTIVE)
{
UpdateData();
if(m_bModeless&& m_bPost)
PostCommand(_T("` "), false);
}
}
// Add By Lcf On 2005-6-06-30
void CDrawingNameDlg::OnClose()
{
if(m_bModeless)
{
m_bPost = FALSE;
PostCommand(_T(" "), false);
}
CCharToolbarDlg::OnClose();
}
// Add By Lcf On 2005-6-06-30
void CDrawingNameDlg::GetTextHeight()
{
XPushAutoHide noAutoHide(this);
XPushMemVar<BOOL> vTemp(m_bPost,FALSE);
m_nOperCode = -1;
UpdateData(TRUE);
double nHeight;
if(m_nHeightType == 1)
nHeight = _tstof(m_strHeight1)*DocGetPScale();
else
nHeight = _tstof(m_strHeight2)*DocGetPScale();
BeginEditorCommand();
2026-10-04 00:04:20 +08:00
if(GetDist(_T("\n字高"), nHeight, RSG_NOZERO|RSG_NONEG) == RTNORM)
2026-09-28 15:28:50 +08:00
{
nHeight /= DocGetPScale();
if(m_nHeightType == 1)
m_strHeight1.Format(_T("%.1f"), nHeight);
else
m_strHeight2.Format(_T("%.1f"), nHeight);
}
CompleteEditorCommand();
UpdateData(FALSE);
}