#include "stdafx.h" #include #include "AcDbObjectPtr.h" #include "ADSGePointDir2d.h" #include "PushMemVar.h" #include "SymbDialog.h" #include "SymbolStringList.h" #include "globalFunc.h" #include "PickEntSet.h" #include "AecDbText.h" #include "AecDbSymbCoord.h" #include "AecDbSymbElevation.h" #include "AecDbSymbDrawingIndex.h" #include "AecDbDrawingName.h" #include "AecDbSymbIndexPointer.h" #include "AecDbSymbComposing.h" #include "EntityEdJig.h" #include "AecDbMText.h" CString GetTextStyleName(TTextStyle ts); double GetTextHeightByTs(TTextStyle ts); AcDbObjectId InitTextStyle(const TCHAR *pszStyle, AcDbDatabase *pDb = NULL); namespace { double CalcMTextLen(const CString &sText, const AcDbObjectId &styleId, double dHei, double dWid, int iWider) { if (sText.IsEmpty()) return 0.0; AecXDbMText text; text.SetHeight(dHei); text.SetStyleId(styleId); text.SetPageWidth(dWid); text.SetText(sText); text.SetAlignment(AcGiDraw::kLeft); text.SetLocation(XPoint()); XPoint ptMin, ptMax; text.GetExtents2d(ptMin, ptMax); double dLen = (ptMax.x - ptMin.x); CString sOneWider = _T("1"); // 测试一个字符的宽度 text.SetText(sOneWider); text.GetExtents2d(ptMin, ptMax); double dOneLen = (ptMax.x - ptMin.x); XPoint ext = text.GetExtents(); return dLen + iWider * dOneLen; } void AddCutLineForIndexPointer(AecXDbSymbIndexPointer *pText) { ASSERT(pText != NULL); ASSERT(!pText->IsIndexPointer()); AecXDbSymbIndexPointer *pEntClone = (AecXDbSymbIndexPointer *)pText->clone(); if (pText->upgradeOpen() == Acad::eOk) { pText->setVisibility(AcDb::kInvisible); pText->downgradeOpen(); acedGetAcadDwgView()->Invalidate(); acedGetAcadDwgView()->UpdateWindow(); } IndexPointerEdJig jig(pEntClone); jig.SetKeyword(_T("`")); // 对话框中取字高、词 jig.InitCutLine(); jig.SetPrompt(_T("\n请给出其它剖切线位置<退出>: ")); jig.SetOperCode(IndexPointerEdJig::kMoreCuts); BOOL bAdd = FALSE; while (1) { int nRet = jig.DoIt(); if (nRet == RTNORM) {// 继续添加剖切线 continue; } else if (nRet == RTCAN) { // 退出 break; } else { // 结束添加剖切线, bAdd = TRUE; break; } } if (pText->upgradeOpen() == Acad::eOk) { if (bAdd) { CArray arCutLine; pEntClone->GetCutLineAll(arCutLine); arCutLine.RemoveAt(0); pText->SetCutLine(arCutLine); } delete pEntClone; pEntClone = NULL; pText->setVisibility(AcDb::kVisible); pText->downgradeOpen(); } } } #pragma region CModelessDialog #define INIT_MONITOR_PT 100 #define MONITOR_PT 101 #define MOVE_WAITER 102 #define AUTOFOCUS_TIMER 103 #define MODELESSDIALOG_EVENT_TIME 30 //extern const TCHAR * GetRegLocation(); int g_nInitAutoHideTime = 2000; int g_nAutoHideTime = 100; int g_nAnimateStepNum = 12; ///////////////////////////////////////////////////////////////////////////// // CModelessDialog dialog IMPLEMENT_DYNAMIC(CModelessDialog, CAcUiDialog) CModelessDialog::CModelessDialog(UINT nIDTemplate, CWnd* pParent /*=NULL*/) : CAcUiDialog(nIDTemplate, pParent), m_bModeless(TRUE), m_bAllowAutoHide(TRUE) { m_bChangeDocSwitch = FALSE; m_bHide = FALSE; m_bAutoHide = FALSE; m_pMemDC = NULL; m_pWndDC = NULL; m_pBitmap = NULL; m_nStepNum = 0; m_nYStep = 0; m_nCurStep = 0; m_clrDraw = RGB(127, 127, 127); } BEGIN_MESSAGE_MAP(CModelessDialog, CAcUiDialog) ON_WM_DESTROY() ON_WM_CREATE() ON_WM_CLOSE() ON_MESSAGE(WM_ACAD_KEEPFOCUS, onAcadKeepFocus) ON_WM_TIMER() ON_WM_MOUSEMOVE() ON_WM_NCLBUTTONDOWN() ON_WM_CTLCOLOR() ON_WM_NCPAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CModelessDialog::OnInitDialog() { CAcUiDialog::OnInitDialog(); m_wndToolTip.Create(this); m_wndToolTip.Activate(true); m_wndToolTip.SetMaxTipWidth(250); m_wndToolTip.SetDelayTime(TTDT_AUTOPOP, 4 * m_wndToolTip.GetDelayTime(TTDT_AUTOPOP)); m_bThickFrame = (GetStyle() & WS_THICKFRAME) != 0; ModifyStyle(WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 0, 0); if (m_bModeless) { int x = 0, y = 0; if (ReadReg(x, y)) { CRect SubRect; GetWindowRect(&SubRect); MoveWindow(x, y, SubRect.Width(), SubRect.Height()); } if (m_bAllowAutoHide) { } #if ARX==15 if (g_Option::instance().g_bAutoFocus) SetTimer(AUTOFOCUS_TIMER, 100, NULL); #endif } else { ModifyStyle(WS_MINIMIZEBOX, 0); CenterWindow(); } return TRUE; } BOOL CModelessDialog::ReadReg(int &x, int &y) { //CRuntimeClass *pClassInfo = GetRuntimeClass(); //const char *pClassName = pClassInfo->m_lpszClassName; //XString sRegLoc(512); //sRegLoc << GetRegLocation() << _T("\\DialogPosition"); //CRegProperty regProp(sRegLoc, TString(pClassName)); //regProp.SetTopRootKey(HKEY_CURRENT_USER); //if (!regProp.GetValue(_T("x"), x)) return FALSE; //if (!regProp.GetValue(_T("y"), y)) return FALSE; //if (!regProp.GetValue(_T("AutoHide"), m_bAutoHide)) return FALSE; return TRUE; } void CModelessDialog::WriteReg(int x, int y) { //CRuntimeClass *pClassInfo = GetRuntimeClass(); //const char *pClassName = pClassInfo->m_lpszClassName; //XString sRegLoc(512); //sRegLoc << GetRegLocation() << _T("\\DialogPosition"); //CRegProperty regProp(sRegLoc, TString(pClassName)); //regProp.SetTopRootKey(HKEY_CURRENT_USER); //regProp.SetValue(_T("x"), x); //regProp.SetValue(_T("y"), y); //regProp.SetValue(_T("AutoHide"), m_bAutoHide); } void CModelessDialog::OnDestroy() { if (m_bModeless) { if (!IsIconic()) { CRect rect; GetWindowRect(&rect); WriteReg(rect.TopLeft().x, rect.TopLeft().y); } } /* if(m_TimerID) { KillTimer(m_TimerID); }*/ CAcUiDialog::OnDestroy(); m_wndToolTip.DestroyWindow(); if (m_pMemDC != NULL) { delete m_pMemDC; m_pMemDC = NULL; } if (m_pWndDC != NULL) { delete m_pWndDC; m_pWndDC = NULL; } if (m_pBitmap != NULL) { delete m_pBitmap; m_pBitmap = NULL; } if (m_bModeless && m_bChangeDocSwitch) { acDocManager->enableDocumentActivation(); m_bChangeDocSwitch = FALSE; } } int CModelessDialog::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CAcUiDialog::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here #if (ARX>14) if (m_bModeless && acDocManager->isDocumentActivationEnabled() && acDocManager->disableDocumentActivation() == Acad::eOk) { m_bChangeDocSwitch = TRUE; } #endif return 0; } void CModelessDialog::OnClose() { if (m_bModeless) { //DestroyWindow(); CRect rect; GetWindowRect(&rect); WriteReg(rect.TopLeft().x, rect.TopLeft().y); /* if(m_bChangeDocSwitch) { acDocManager->enableDocumentActivation(); m_bChangeDocSwitch=FALSE; }*/ } CAcUiDialog::OnClose(); } LONG_PTR CModelessDialog::onAcadKeepFocus(UINT_PTR, LONG_PTR) { if (g_Option::instance().g_bAutoFocus) { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); if (!(rect.PtInRect(pt))) { return FALSE; } else return TRUE; } return TRUE; } void CModelessDialog::AnimateMoveWindow(int step) { CRect rectWindow; GetWindowRect(rectWindow); if (!m_bHide)//将要最小化 { CRect rectClient; GetClientRect(rectClient); ClientToScreen(rectClient); m_nCapHeight = rectClient.top - rectWindow.top; m_nBorderHeight = rectWindow.bottom - rectClient.bottom; m_nMaxHeight = rectWindow.Height(); m_nYStep = -rectClient.Height() / step; } else { if (step != 0) m_nYStep = (m_nMaxHeight - m_nCapHeight - m_nBorderHeight) / step; else m_nYStep = 0; } if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL) GetParent()->ScreenToClient(rectWindow); m_nStepNum = step; if (m_nYStep > 0) m_nCurStep = m_nStepNum; else m_nCurStep = 0; if (m_nYStep != 0) { if (m_nYStep < 0) { m_pWndDC = new CWindowDC(this); m_pMemDC = new CDC; m_pMemDC->CreateCompatibleDC(m_pWndDC); m_pBitmap = new CBitmap; m_pBitmap->CreateCompatibleBitmap(m_pWndDC, rectWindow.Width(), rectWindow.Height()); m_pMemDC->SelectObject(m_pBitmap); ::SendMessage(GetSafeHwnd(), WM_PRINT, (WPARAM)m_pMemDC->m_hDC, (LPARAM)(PRF_CHILDREN | PRF_CLIENT | PRF_NONCLIENT | PRF_ERASEBKGND)); } if (m_bThickFrame) ModifyStyle(WS_THICKFRAME, 0, 0); SetTimer(MOVE_WAITER, 1, NULL);//启动动画 } else//直接移动 { if (!m_bHide)//将要最小化 rectWindow.bottom = rectWindow.top + m_nCapHeight + m_nBorderHeight; else rectWindow.bottom = rectWindow.top + m_nMaxHeight; if (m_bThickFrame) ModifyStyle(WS_THICKFRAME, 0, 0); MoveWindow(rectWindow); if (m_bThickFrame) ModifyStyle(0, WS_THICKFRAME, 0); m_nStepNum = 0; m_nCurStep = 0; } } void CModelessDialog::MaxShow() { KillTimer(MOVE_WAITER); CRect rect; GetWindowRect(rect); rect.bottom = rect.top + m_nMaxHeight; if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL) GetParent()->ScreenToClient(rect); MoveWindow(rect, TRUE); if (m_pMemDC != NULL) { delete m_pMemDC; m_pMemDC = NULL; } if (m_pWndDC != NULL) { delete m_pWndDC; m_pWndDC = NULL; } if (m_pBitmap != NULL) { delete m_pBitmap; m_pBitmap = NULL; } m_nStepNum = 0; m_nCurStep = 0; m_nYStep = 0; m_bHide = FALSE;//进入最大状态 if (m_bThickFrame) ModifyStyle(0, WS_THICKFRAME, 0); RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN); } void CModelessDialog::OnTimer(UINT_PTR nIDEvent) { if (m_bAutoHide) { if (nIDEvent == INIT_MONITOR_PT) { KillTimer(INIT_MONITOR_PT); SetTimer(MONITOR_PT, g_nAutoHideTime / 2, NULL); } else if (nIDEvent == MONITOR_PT)//check if mouse is still in hItem rect { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); BOOL bPtIn = rect.PtInRect(pt); if (m_nStepNum > 0)//正在缩放过程中 { if ((bPtIn && m_nYStep < 0) ||//正在缩小,但点返回窗口 (!bPtIn && m_nYStep > 0))//正在放大,但点移出窗口 m_nYStep *= -1;//反向 } else if (bPtIn == m_bHide)//当前没有在缩放过程中,并且动作事件发生 { if (!bPtIn) { CWnd* pWnd = GetFocus(); if (pWnd == this || (pWnd != NULL && IsChild(pWnd)))//下拉列表 return; } static bool bWait = false; if (bWait)//正在等待缩放,启动 { bWait = false;//取消等待缩放状态 AnimateMoveWindow(g_nAnimateStepNum); } else bWait = true;//进入等待缩放状态 } } else if (nIDEvent == MOVE_WAITER && m_nStepNum > 0) { if (m_nYStep < 0)//正在minimize { if (m_nCurStep < m_nStepNum)//动画继续 { m_nCurStep++; CRect rectWindow; GetWindowRect(rectWindow); if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL) GetParent()->ScreenToClient(rectWindow); rectWindow.bottom += m_nYStep; MoveWindow(rectWindow, TRUE); m_pWndDC->BitBlt(0, m_nCapHeight, rectWindow.Width(), rectWindow.Height() - m_nCapHeight , m_pMemDC, 0, m_nCapHeight + m_nMaxHeight - rectWindow.Height(), SRCCOPY); CRect rect; GetClientRect(rect); ValidateRect(rect); } else//minimize over { KillTimer(MOVE_WAITER); CRect rect; GetWindowRect(rect); rect.bottom = rect.top + m_nCapHeight + m_nBorderHeight; if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL) GetParent()->ScreenToClient(rect); MoveWindow(rect); if (m_bThickFrame) ModifyStyle(0, WS_THICKFRAME, 0); m_nStepNum = 0; m_nCurStep = 0; m_bHide = TRUE;//进入最小状态 } } else if (m_nYStep > 0)//正在maximize { if (m_nCurStep > 0)//动画继续 { m_nCurStep--; CRect rectWindow; GetWindowRect(rectWindow); if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL) GetParent()->ScreenToClient(rectWindow); rectWindow.bottom += m_nYStep; MoveWindow(rectWindow, FALSE); m_pWndDC->BitBlt(0, m_nCapHeight, rectWindow.Width(), rectWindow.Height() - m_nCapHeight , m_pMemDC, 0, m_nMaxHeight - rectWindow.Height() + m_nCapHeight, SRCCOPY); CRect rect; GetClientRect(rect); ValidateRect(rect); } else//Maximize over MaxShow(); } } } else CAcUiDialog::OnTimer(nIDEvent); } void CModelessDialog::LockAutoHide() { if (m_bAutoHide) { m_bAutoHide = FALSE; KillTimer(MONITOR_PT); MSG msg; while (::PeekMessage(&msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE)); } } void CModelessDialog::UnlockAutoHide() { m_bAutoHide = TRUE; SetTimer(INIT_MONITOR_PT, g_nInitAutoHideTime, NULL); } XPushAutoHide::XPushAutoHide(CModelessDialog *pDlg) :m_bAutoHide(FALSE) { m_pDialog = pDlg; if (m_pDialog->m_bModeless) { m_bAutoHide = pDlg->m_bAutoHide; if (m_bAutoHide) m_pDialog->LockAutoHide(); } } XPushAutoHide::~XPushAutoHide() { if (m_pDialog->m_bModeless) { if (m_bAutoHide) m_pDialog->UnlockAutoHide(); } } void CModelessDialog::OnNcLButtonDown(UINT nHitTest, CPoint point) { if (m_bHide || m_nStepNum > 0) MaxShow(); CAcUiDialog::OnNcLButtonDown(nHitTest, point); } int CModelessDialog::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption, UINT nType) { XPushAutoHide noAutoHide(this); return CAcUiDialog::MessageBox(lpszText, lpszCaption, nType); } BOOL CModelessDialog::OnCommand(WPARAM wParam, LPARAM lParam) { XPushAutoHide *pAH = NULL; UINT nID = LOWORD(wParam); HWND hWndCtrl = (HWND)lParam; int nCode = HIWORD(wParam); CWnd *pWnd = FromHandle(hWndCtrl); if (pWnd != NULL)//控件通知 { //判断是否是下拉列表 //GetWindowLong(pWnd->GetSafeHwnd(), //if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { if (nCode == CBN_CLOSEUP)//关下拉列表 pAH = new XPushAutoHide(this); } } BOOL bRet = CAcUiDialog::OnCommand(wParam, lParam); if (pAH != NULL) delete pAH; return bRet; } BOOL CModelessDialog::PreTranslateMessage(MSG* pMsg) { if (m_bModeless && pMsg->message == WM_KEYDOWN) { CWnd *pWndPar = CWnd::FromHandle(pMsg->hwnd)->GetParent(); if (pMsg->hwnd == m_hWnd || pWndPar && pWndPar->m_hWnd == m_hWnd) { if (pMsg->wParam == VK_ESCAPE) { PostMessage(WM_CLOSE); return TRUE; } else if (pMsg->wParam == VK_RETURN)//modified by whl on 050410 { CWnd*pWnd = CWnd::FromHandle(pMsg->hwnd); if (pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { int iStyle = pWnd->GetStyle(); if ((iStyle & ES_WANTRETURN) != 0 && (iStyle & ES_MULTILINE) != 0)//允许多行Edit换行操作 return CAcUiDialog::PreTranslateMessage(pMsg); } return TRUE; } } } //if(pMsg->message==WM_SIZE&&m_bAutoHide) //{ // if(!IsShowNormal()) // { // if(pMsg->message==WM_SIZE) // return TRUE;//自动缩放时不再发送WM_SIZE // } //} if (pMsg->message >= WM_MOUSEFIRST && pMsg->message <= WM_MOUSELAST) { MSG msg; ::CopyMemory(&msg, pMsg, sizeof(MSG)); HWND hWndParent = ::GetParent(msg.hwnd); while (hWndParent && hWndParent != m_hWnd) { msg.hwnd = hWndParent; hWndParent = ::GetParent(hWndParent); } if (msg.hwnd) m_wndToolTip.RelayEvent(&msg); } return CAcUiDialog::PreTranslateMessage(pMsg); } BOOL CModelessDialog::AddTip(UINT idControl) { HINSTANCE hInstance = NULL; CWnd *pWnd = GetDlgItem(idControl); if (!pWnd) return FALSE; int nRet; CString strTip; if (!hInstance) nRet = strTip.LoadString(idControl); else { TCHAR szTemp[1024] = _T(""); nRet = ::LoadString(hInstance, idControl, szTemp, 1023); if (nRet) strTip = szTemp; } if (nRet) nRet = m_wndToolTip.AddTool(pWnd, strTip); return (nRet != 0); } BOOL CModelessDialog::AddTip(UINT idControl, const TCHAR *str) { CWnd *pWnd = GetDlgItem(idControl); if (!pWnd) return FALSE; return m_wndToolTip.AddTool(pWnd, str); } HBRUSH CModelessDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CAcUiDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->IsWindowEnabled()) { CToolInfo toolInfo; if (m_wndToolTip.GetToolInfo(toolInfo, pWnd)) //pDC->SetTextColor(RGB(0,0,255)); pDC->SetTextColor(RGB(0, 140, 235)); } return hbr; } #pragma endregion #pragma region CSectionDlg CString CSectionDlg::m_strSectionNum = _T("1"); CString CSectionDlg::m_strStyle = GetTextStyleName(TS_SECTION); //默认剖切编号文字样式 CString CSectionDlg::m_strHeight = _T("5.0"); int CSectionDlg::m_bCheck = FALSE; CString CSectionDlg::m_strDrawingNum = _T("1"); int CSectionDlg::m_iLocal = 0; int CSectionDlg::m_iDirect = 0; CString CSectionDlg::m_strDrawingHeight = _T("3.5"); CString CSectionDlg::m_strTextStyle = GetTextStyleName(TS_INDEXSCALE);//默认剖切图号文字样式 int CSectionDlg::m_nSectionMode = 1; IMPLEMENT_DYNAMIC(CSectionDlg, CDialog) CSectionDlg::CSectionDlg(CWnd *pParent) :CModelessDialog(CSectionDlg::IDD, pParent) { m_bStyeChange = FALSE; //是否改变绘制剖切图号的样式,默认没有改变 } CSectionDlg::~CSectionDlg(void) { } BEGIN_MESSAGE_MAP(CSectionDlg, CModelessDialog) ON_BN_CLICKED(IDC_RADIO1, OnBtnBlickA) ON_BN_CLICKED(IDC_RADIO2, OnBtnBlickB) ON_BN_CLICKED(IDC_RADIO3, OnBtnBlickC) ON_BN_CLICKED(IDC_RADIO4, OnBtnBlickD) ON_BN_CLICKED(IDC_CHK_DRAWING, OnBnClickDrawNum) ON_BN_CLICKED(IDC_BTN_WORDHIGHT, OnBnClickedBtnWordhight) ON_BN_CLICKED(IDC_BTN_DRAWINGHEIGHT, OnBnClickedBtnDrawingheight) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) END_MESSAGE_MAP() void CSectionDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); DDX_CBString(pDX, IDC_CMB_SECTIONNUM, m_strSectionNum); if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_CMB_SECTIONTEXT, m_strStyle); } else { GetDlgItem(IDC_CMB_SECTIONTEXT)->SetWindowText(m_strStyle); } DDX_CBString(pDX, IDC_CMB_WORDHEIGHT, m_strHeight); DDX_Text(pDX, IDC_EDT_DRAWINGNUM, m_strDrawingNum); DDX_CBIndex(pDX, IDC_CMB_SECTIONPOSITION, m_iLocal); DDX_CBIndex(pDX, IDC_CMB_SECTIONDIRECT, m_iDirect); DDX_CBString(pDX, IDC_CMB_DRAWINGHEIGHT, m_strDrawingHeight); if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_CMB_DRAWTEXTSTYLE, m_strTextStyle); } DDX_Check(pDX, IDC_CHK_DRAWING, m_bCheck); DDX_Control(pDX, IDC_CMB_DRAWTEXTSTYLE, m_cmbDrawStyle); DDX_Control(pDX, IDC_CMB_SECTIONTEXT, m_cmbStyleName); } BOOL CSectionDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); //createToolBar(); //创建绘制方式工具条 LoadTextStyle(); //加载文字样式 OnBnClickDrawNum(); AddTip(IDC_STATIC_LOC, _T("设置剖面图号是标注在剖切符号的两端还是其中一端")); AddTip(IDC_STATIC_DIR, _T("设置剖面图号的文字方向是沿剖切方向还是剖视方向")); CheckTypeButton(); //add by lgy 20120525 按钮状态设置 UpdateData(FALSE); CButton *pWnd = (CButton*)GetDlgItem(IDC_RADIO1); if (pWnd) { pWnd->SetCheck(1); } OnBtnBlickA(); return TRUE; } //void CSectionDlg::createToolBar() //{ // UINT buttonID[] = { ID_BTN_A, ID_BTN_B, ID_BTN_C, ID_BTN_D }; // CAcModuleResourceOverride vTmp; // m_toolbar.Create(WS_VISIBLE | WS_CHILD | CCS_BOTTOM | TBSTYLE_TOOLTIPS // | CCS_ADJUSTABLE, CRect(0, 0, 0, 0), this, IDR_SECTION); // // TBBUTTON *pIndex, // *pRTF_Button = new TBBUTTON[20]; // pIndex = pRTF_Button; // for (long lIndex = 0; lIndex < 4; lIndex++) //创建四个按钮控件 // { // memset(pIndex, NULL, sizeof(TBBUTTON)); // pIndex->iBitmap = lIndex; // pIndex->idCommand = buttonID[lIndex]; // pIndex->fsStyle = TBSTYLE_CHECKGROUP; // pIndex->fsState = TBSTATE_ENABLED; // pIndex++; // } // CSize size(16, 15); // m_toolbar.SetButtonSize(size); // m_toolbar.AddButtons(4, pRTF_Button); // // // sg delete 120613,解决64位下的崩溃问题 // //delete pIndex; // delete[] pRTF_Button; // // m_toolbar.SetBitmapSize(size); // m_toolbar.ModifyStyle(0, TBSTYLE_FLAT); // m_toolbar.AddBitmap(4, IDR_SECTION); //} //add by lgy 20120525 设置按钮状态 void CSectionDlg::CheckTypeButton() { //m_toolbar.CheckButton(ID_BTN_A, m_nSectionMode == 1); //m_toolbar.CheckButton(ID_BTN_B, m_nSectionMode == 2); //m_toolbar.CheckButton(ID_BTN_C, m_nSectionMode == 3); //m_toolbar.CheckButton(ID_BTN_D, m_nSectionMode == 4); } BOOL CSectionDlg::DestroyWindow() { UpdateData(TRUE); return CDialog::DestroyWindow(); } BOOL CSectionDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); if (GetRoutingFrame() != NULL) return FALSE; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; CString strTipText; UINT nID = (UINT)pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { return FALSE; } if (nID != 0) { { CAcModuleResourceOverride vTmp; strTipText.LoadString(nID); } #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #endif *pResult = 0; ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE; } return TRUE; } void CSectionDlg::LoadTextStyle() //加载文字样式 { XSymbolList lstStyle(_T("STYLE")); for (int m = 0; m < lstStyle.Length(); m++) { m_cmbStyleName.AddString(lstStyle[m]); m_cmbDrawStyle.AddString(lstStyle[m]); } // sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式 //m_cmbStyleName.SetCurSel(m_cmbStyleName.FindStringExact(0, m_strStyle)); //m_cmbDrawStyle.SetCurSel(m_cmbDrawStyle.FindStringExact(0, m_strTextStyle)); int nRet = m_cmbStyleName.FindStringExact(0, m_strStyle); if (nRet < 0) { nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_LABEL")); } m_cmbStyleName.SetCurSel(nRet); nRet = m_cmbDrawStyle.FindStringExact(0, m_strTextStyle); if (nRet < 0) { nRet = m_cmbDrawStyle.FindStringExact(0, _T("_TCH_DIM")); } m_cmbDrawStyle.SetCurSel(nRet); } void CSectionDlg::OnBtnBlickA() { UpdateData(TRUE); m_nSectionMode = 1; //剖面剖切 m_bStyeChange = true; CheckTypeButton(); //add by lgy 20120525 按钮状态设置 UpdateData(FALSE); acedPostCommand(_T("\33")); } void CSectionDlg::OnBtnBlickB() { UpdateData(TRUE); m_nSectionMode = 2; //正交跑切 m_bStyeChange = true; CheckTypeButton(); //add by lgy 20120525 按钮状态设置 UpdateData(FALSE); acedPostCommand(_T("\33")); } void CSectionDlg::OnBtnBlickC() { UpdateData(TRUE); m_nSectionMode = 3; //非正交剖切 m_bStyeChange = true; CheckTypeButton(); //add by lgy 20120525 按钮状态设置 UpdateData(FALSE); acedPostCommand(_T("\33")); } void CSectionDlg::OnBtnBlickD() { UpdateData(TRUE); m_nSectionMode = 4; //断面剖切 m_bStyeChange = true; CheckTypeButton(); //add by lgy 20120525 按钮状态设置 UpdateData(FALSE); acedPostCommand(_T("\33")); } CString CSectionDlg::GetSectionNum() { UpdateData(TRUE); return m_strSectionNum; } CString CSectionDlg::GetNumStyle() { UpdateData(TRUE); return m_strStyle; } double CSectionDlg::GetNumHeight() { UpdateData(TRUE); return _tstof(m_strHeight); } CString CSectionDlg::GetDrawNum() { UpdateData(TRUE); return m_strDrawingNum; } int CSectionDlg::GetLocal() { UpdateData(TRUE); return m_iLocal; } int CSectionDlg::GetDirect() { UpdateData(TRUE); return m_iDirect; } int CSectionDlg::GetSectionMode() { UpdateData(TRUE); return m_nSectionMode; } CString CSectionDlg::GetDrawingStyle() { UpdateData(TRUE); return m_strTextStyle; } double CSectionDlg::GetDrawHeight() { UpdateData(TRUE); return _tstof(m_strDrawingHeight); } void CSectionDlg::OnBnClickDrawNum() { UpdateData(TRUE); if (!m_bCheck) //不显示剖切图号 { GetDlgItem(IDC_CMB_DRAWTEXTSTYLE)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_DRAWINGNUM)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_SECTIONPOSITION)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_SECTIONDIRECT)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_DRAWINGHEIGHT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_DRAWINGHEIGHT)->EnableWindow(FALSE); } else { GetDlgItem(IDC_CMB_DRAWTEXTSTYLE)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_DRAWINGNUM)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_SECTIONPOSITION)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_SECTIONDIRECT)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_DRAWINGHEIGHT)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_DRAWINGHEIGHT)->EnableWindow(TRUE); } UpdateData(FALSE); } BOOL CSectionDlg::GetIsShowDrawText() { UpdateData(TRUE); return m_bCheck; } void CSectionDlg::OnBnClickedBtnWordhight() { UpdateData(TRUE); XPushAutoHide noAutoHide(this); double dHeight = _tstof(m_strHeight); dHeight = dHeight * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { dHeight /= GlobalFunc::DocGetPScale(); CString str; //str.Format(_T("%.1f"), dHeight/GlobalFunc::DocGetPScale()); str.Format(_T("%.1f"), dHeight); m_strHeight = str; } CompleteEditorCommand(); UpdateData(FALSE); } void CSectionDlg::OnBnClickedBtnDrawingheight() { UpdateData(TRUE); XPushAutoHide noAutoHide(this); double dHeight = _tstof(m_strDrawingHeight); dHeight = dHeight * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { dHeight /= GlobalFunc::DocGetPScale(); CString str; str.Format(_T("%.1f"), dHeight); m_strDrawingHeight = str; } CompleteEditorCommand(); UpdateData(FALSE); } BOOL CSectionDlg::GetIsChangeType() { return m_bStyeChange; } void CSectionDlg::SetIsChangeType(BOOL bIs) { m_bStyeChange = bIs; } #pragma endregion #pragma region CCharDlg static int g_nTypeIndex = 0; char CCharDlg::m_charGreece[][3] = { "Α","Β","Γ","Δ","Ε","Ζ","Η", "Θ","Ι","Κ","Λ","Μ","Ν","Ξ", "Ο","Π","Ρ","Σ","Τ","Υ","Φ", "Χ","Ψ","Ω","α","β","γ","δ", "ε","ζ","η","θ","ι","κ","λ", "μ","ν","ξ","ο","π","ρ","σ", "τ","υ","φ","χ","ψ","ω" }; char CCharDlg::m_charMath[][3] = { "≈","≡","=","≤","≥","<",">", "≮","≯","∷","±","+","-","×", "÷","/","∫","∮","∝","∞","∧", "∨","∑","∏","∪","∩","∈","∵", "∴","⊥","∥","∠","⌒","⊙","≌", "∽","√" }; char CCharDlg::m_charSerial[][3] = { "⒈","⒉","⒊","⒋","⒌","⒍","⒎", "⒏","⒐","⒑","⒒","⒓","⒔","⒕", "⒖","⒗","⒘","⒙","⒚","⒛","⑴", "⑵","⑶","⑷","⑸","⑹","⑺","⑻", "⑼","⑽","⑾","⑿","⒀","⒁","⒂", "⒃","⒄","⒅","⒆","⒇","①","②", "③","④","⑤","⑥","⑦","⑧","⑨", "⑩","㈠","㈡","㈢","㈣","㈤","㈥", "㈦","㈧","㈨","㈩" }; char CCharDlg::m_charRomaSerial[][3] = { "Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ", "Ⅷ","Ⅸ","Ⅹ","Ⅺ","Ⅻ","ⅰ","ⅱ", "ⅲ","ⅳ","ⅴ","ⅵ","ⅶ","ⅷ","ⅸ", "ⅹ" }; char CCharDlg::m_charInterpunction[][3] = { "。",",","、",";",":","?","!", ".","∶","…","—","·","ˉ","ˇ", "‘","’","“","”","々","~","‖", ""","'","`","|","〃","¨","〔", "〕","〈","〉","《","》","「","」", "『","』","〖","〗","【","】","(", ")","[","]","{","}" }; char CCharDlg::m_charSpecific[][3] = { "°","′","″","$","£","¥","‰", "%","℃","¤","¢","§","№","☆", "★","○","●","◎","◇","◆","□", "■","△","▲","※","→","←","↑", "↓","〓","#","&","@","\","^", "_"," ̄", "▼", "▽" }; CCharDlg::CCharDlg(CWnd* pParent /*=NULL*/) : CDialog(CCharDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCharDlg) m_character = _T(""); //}}AFX_DATA_INIT m_left = -1; m_top = -1; } CCharDlg::~CCharDlg() { delete m_pFont; } void CCharDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCharDlg) DDX_Control(pDX, IDC_COMBO_TYPE, m_combo_type); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCharDlg, CDialog) //{{AFX_MSG_MAP(CCharDlg) ON_WM_PAINT() ON_WM_LBUTTONUP() ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType) ON_WM_LBUTTONDBLCLK() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCharDlg message handlers BOOL CCharDlg::OnInitDialog() { CDialog::OnInitDialog(); m_indexCombo = 0; m_countChar = 48; CRect rect; CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); CDC *pDC = pWnd->GetDC(); pWnd->GetClientRect(rect); m_wndWidth = rect.Width(); m_wndHeight = rect.Height(); m_Hdistance = m_wndWidth / 10; m_Vdistance = m_wndHeight / 6; m_pFont = new CFont; m_pFont->CreateFont(rect.bottom - rect.top, 0, 0, 0, 700, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH & FF_SWISS, _T("Arial")); m_combo_type.SetCurSel(g_nTypeIndex); OnSelchangeComboType(); UpdateData(false); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCharDlg::writechar(char pchar[][3], int count) { CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); CDC *pDC = pWnd->GetDC(); CFont *pOldFont; CFont *pLargeFont = new CFont; pLargeFont->CreateFont(28, 0, 0, 0, 700, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH & FF_SWISS, _T("Arial")); pOldFont = (CFont *)pDC->SelectObject(pLargeFont); int i = 0 - (int)(m_Hdistance / 1.1); int l = 0 - (int)(m_Vdistance / 1.1); for (int n = 0; n < count; n++) { if (n % 10 == 0) { i = 0 - int(m_Hdistance / 1.1); l = l + m_Vdistance; } pDC->TextOut(i = i + m_Hdistance, l, pchar[n]); } pDC->SelectObject(pOldFont); delete pLargeFont; } void CCharDlg::OnPaint() { CPaintDC dc(this); // device context for painting CRect rect; CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); pWnd->GetClientRect(rect); CDC *pDC = pWnd->GetDC(); CBrush* pNewBrush = new CBrush; pNewBrush->CreateSolidBrush(RGB(255, 255, 255)); CBrush* pOldBrush = pDC->SelectObject(pNewBrush); pDC->Rectangle(rect); pDC->SelectObject(pOldBrush); delete pNewBrush; drawPane(); switch (m_indexCombo) { case 0: writechar(m_charGreece, m_countChar); break; case 1: writechar(m_charMath, m_countChar); break; case 2: writechar(m_charRomaSerial, m_countChar); break; case 3: writechar(m_charSerial, m_countChar); break; case 4: writechar(m_charInterpunction, m_countChar); break; case 5: writechar(m_charSpecific, m_countChar); break; } if (m_left >= 0 && m_top >= 0) { drawSmallPane(); } // Do not call CDialog::OnPaint() for painting messages } BOOL CCharDlg::Check(CPoint point) { CRect rect; CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); pWnd->GetWindowRect(rect); ScreenToClient(&rect); CRgn* myRgn = new CRgn(); myRgn->CreateRectRgnIndirect(rect); if (myRgn->PtInRegion(point)) { int i, j; i = point.x / m_Hdistance - 1; j = point.y / m_Vdistance - 1; i = j * 10 + i; switch (m_indexCombo) { case 0: if (i < 48) m_character = m_charGreece[i]; else m_character = ""; break; case 1: if (i < 40) m_character = m_charMath[i]; else m_character = ""; break; case 2: if (i < 22) m_character = m_charRomaSerial[i]; else m_character = ""; break; case 3: if (i < 60) m_character = m_charSerial[i]; else m_character = ""; break; case 4: if (i < 47) m_character = m_charInterpunction[i]; else m_character = ""; break; case 5: if (i < 39) m_character = m_charSpecific[i]; else m_character = ""; break; } } else return FALSE; delete myRgn; return TRUE; } void CCharDlg::OnLButtonDblClk(UINT nFlags, CPoint point) { if (!Check(point)) return; g_nTypeIndex = m_combo_type.GetCurSel(); CDialog::OnLButtonDblClk(nFlags, point); CDialog::OnOK(); } void CCharDlg::OnLButtonUp(UINT nFlags, CPoint point) { if (!Check(point)) return; CRect rect; CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); pWnd->GetWindowRect(rect); ScreenToClient(&rect); if (m_left >= 0 && m_top >= 0) delSmallPane(); m_left = ((point.x - rect.left) / m_Hdistance) * m_Hdistance; m_top = ((point.y - rect.top) / m_Vdistance) * m_Vdistance; drawSmallPane(); CRect rect2; pWnd->GetClientRect(rect2); CDC *pDC = pWnd->GetDC(); pDC->MoveTo(rect2.right - 1, rect2.top); //画边粗线 pDC->LineTo(rect2.right - 1, rect2.bottom); pDC->MoveTo(rect2.left, rect2.bottom - 1); pDC->LineTo(rect2.right, rect2.bottom - 1); CDialog::OnLButtonUp(nFlags, point); } void CCharDlg::drawPane() { CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); CDC *pDC = pWnd->GetDC(); int i, j; m_pen.DeleteObject(); m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); pDC->SelectObject(m_pen); for (j = 0; j <= m_wndHeight; j = j + m_Vdistance) { pDC->MoveTo(0, j); pDC->LineTo(m_wndWidth, j); } for (i = 0; i <= m_wndWidth; i = i + m_Hdistance) { pDC->MoveTo(i, 0); pDC->LineTo(i, m_wndHeight); } } void CCharDlg::drawSmallPane() { CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); CDC *pDC = pWnd->GetDC(); m_pen.DeleteObject(); m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); pDC->SelectObject(m_pen); pDC->MoveTo(m_left + m_Hdistance, m_top + 1); pDC->LineTo(m_left + 1, m_top + 1); pDC->LineTo(m_left + 1, m_top + m_Vdistance); m_pen.DeleteObject(); m_pen.CreatePen(PS_SOLID, 2, RGB(220, 220, 220)); pDC->SelectObject(m_pen); pDC->MoveTo(m_left + m_Hdistance - 1, m_top + 1); pDC->LineTo(m_left + m_Hdistance - 1, m_top + m_Vdistance - 1); pDC->LineTo(m_left + 1, m_top + m_Vdistance - 1); m_pen.DeleteObject(); m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255)); pDC->SelectObject(m_pen); pDC->MoveTo(m_left, m_top); pDC->LineTo(m_left, m_top + m_Vdistance); pDC->LineTo(m_left + m_Hdistance, m_top + m_Vdistance); pDC->LineTo(m_left + m_Hdistance, m_top); pDC->LineTo(m_left, m_top); } void CCharDlg::delSmallPane() { CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME); CDC *pDC = pWnd->GetDC(); m_pen.DeleteObject(); m_pen.CreatePen(PS_SOLID, 2, RGB(255, 255, 255)); pDC->SelectObject(m_pen); pDC->MoveTo(m_left + m_Hdistance, m_top + 1); pDC->LineTo(m_left + 1, m_top + 1); pDC->LineTo(m_left + 1, m_top + m_Vdistance); pDC->MoveTo(m_left + m_Hdistance - 1, m_top + 1); pDC->LineTo(m_left + m_Hdistance - 1, m_top + m_Vdistance - 1); pDC->LineTo(m_left + 1, m_top + m_Vdistance - 1); m_pen.DeleteObject(); m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); pDC->SelectObject(m_pen); pDC->MoveTo(m_left, m_top); pDC->LineTo(m_left, m_top + m_Vdistance); pDC->LineTo(m_left + m_Hdistance, m_top + m_Vdistance); pDC->LineTo(m_left + m_Hdistance, m_top); pDC->LineTo(m_left, m_top); } void CCharDlg::OnSelchangeComboType() { if (m_left >= 0 && m_top >= 0) delSmallPane(); m_left = -1, m_top = -1; switch (m_combo_type.GetCurSel()) { case 0: m_indexCombo = 0; m_countChar = 48; OnPaint(); break; case 1: m_indexCombo = 1; m_countChar = 40; OnPaint(); break; case 2: m_indexCombo = 2; m_countChar = 22; OnPaint(); break; case 3: m_indexCombo = 3; m_countChar = 60; OnPaint(); break; case 4: m_indexCombo = 4; m_countChar = 47; OnPaint(); break; case 5: m_indexCombo = 5; m_countChar = 39; OnPaint(); break; } } void CCharDlg::OnCancel() { m_character = ""; CDialog::OnCancel(); } void CCharDlg::OnOK() { g_nTypeIndex = m_combo_type.GetCurSel(); CDialog::OnOK(); } bool GetSpecialChar(CWnd*pParent, CString &res) { CAcModuleResourceOverride vTemp; CCharDlg dlg(pParent); if (dlg.DoModal() != IDOK || dlg.m_character == "") return false; res = dlg.m_character; return true; } #pragma endregion #pragma region CBaseTextDlg double CBaseTextDlg::g_nHeight = GetTextHeightByTs(TS_SYMBOL); CString CBaseTextDlg::m_strFontStyle = GetTextStyleName(TS_SYMBOL); IMPLEMENT_DYNAMIC(CBaseTextDlg, CModelessDialog) CBaseTextDlg::CBaseTextDlg(UINT IDD, CWnd* pParent /*=NULL*/) : CModelessDialog(IDD, pParent) //, m_bContinue(FALSE) { if (fabs(g_nHeight) < 1.0E-3) g_nHeight = 3.5; //{{AFX_DATA_INIT(CBaseTextDlg) m_strHeight.Format(_T("%.1f"), g_nHeight); m_strInputText = _T(""); //}}AFX_DATA_INIT //注释 by lgy 20120111 文字样式不能置为当前文字样式,要改为上次命令记忆的文字样式 // XString sStyle; // xg_getvar(_T("TEXTSTYLE"), sStyle); // m_strFontStyle=(const TCHAR *)sStyle; // m_strFontStyle = _T(""); // Add By Lcf On 2005-6-06-24 m_bPost = FALSE; m_nOperCode = -1; // sg add 090324 m_bNeedSingleLineText = TRUE; } void CBaseTextDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBaseTextDlg) DDX_Control(pDX, IDC_COMBO_FONGSTYLE, m_comboStyleName); 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_FONGSTYLE, m_strFontStyle); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBaseTextDlg, CModelessDialog) //{{AFX_MSG_MAP(CBaseTextDlg) ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE, OnSelchangeComboFongstyle) ON_BN_CLICKED(IDC_BUTTON_TEXT_HEIGHT, OnButtonTextHeight) ON_COMMAND_RANGE(ID_SPECIAL_CHAR, ID_PICKTEXT, OnChar) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) ON_WM_ACTIVATE() ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBaseTextDlg message handlers BOOL CBaseTextDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); // if there is a top level routing frame then let it handle the message if (GetRoutingFrame() != NULL) return FALSE; // to be thorough we will need to handle UNICODE versions of the message also !! TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; CString strTipText; // Zyu modify on 100726,支持64位 //UINT nID = pNMHDR->idFrom; UINT nID = (UINT)pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { // idFrom is actually the HWND of the tool //nID = ::GetDlgCtrlID((HWND)nID); return FALSE; // shen rui add 对话框控件不显示 } if (nID != 0) // will be zero on a separator { { CAcModuleResourceOverride vTmp; strTipText.LoadString(nID); //=szFullText; } #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #endif *pResult = 0; // bring the tooltip window above other popup windows ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE; } return TRUE; } BOOL CBaseTextDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); LoadTextStyle(); m_toolbar.Create(this); { CAcModuleResourceOverride vTmp; m_toolbar.LoadToolBar(IDR_TOOLBAR_TEXT); int x = ::GetLastError(); } m_toolbar.ShowWindow(SW_SHOW); m_toolbar.SetBarStyle(CBRS_ALIGN_TOP | CBRS_TOOLTIPS | CBRS_FLYBY); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); // sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式 //m_comboStyleName.SetCurSel(m_comboStyleName.FindStringExact(0, m_strFontStyle)); int nRet = m_comboStyleName.FindStringExact(0, m_strFontStyle); if (nRet < 0) // 当前图纸没有此样式 { nRet = m_comboStyleName.FindStringExact(0, _T("_TCH_DIM")); } m_comboStyleName.SetCurSel(nRet); // Add By Lcf On 2005-6-06-24 if (m_bModeless) { 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); } // add by xly on 100902 去掉“连续标注”标签 /*else GetDlgItem(IDC_CONTINUE)->ShowWindow(SW_HIDE);*/ GetDlgItem(IDC_CONTINUE)->ShowWindow(SW_HIDE); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control } void CBaseTextDlg::UpdateInputText() { return; } // Modify by lcf On 2005-07-05 BOOL CBaseTextDlg::GetPosition(int& h, int& l) { DWORD n; CComboBox *pComboBox = NULL; CEdit *pEdit = NULL; CWnd *pWnd1 = this->GetFocus(); if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { pComboBox = (CComboBox*)m_pCurWnd; if (pComboBox->m_hWnd != pWnd1->GetParent()->m_hWnd) { int nSel = pComboBox->GetWindowTextLength(); pComboBox->SetEditSel(nSel, nSel); } n = pComboBox->GetEditSel(); } else if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { pEdit = (CEdit*)m_pCurWnd; if (pEdit->m_hWnd != pWnd1->m_hWnd) { int nBegin = pEdit->LineIndex(pEdit->GetLineCount() - 1); int nEnd = nBegin + pEdit->LineLength(nBegin); pEdit->SetSel(nEnd, nEnd); } n = pEdit->GetSel(); } else return FALSE; l = (int)LOWORD(n); h = (int)HIWORD(n); #if (ARX>15) if (!GlobalFunc::FindRT_MANIFEST()) return TRUE; OSVERSIONINFO osVer; osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); VERIFY(GetVersionEx(&osVer) == TRUE); if (osVer.dwPlatformId == VER_PLATFORM_WIN32_NT && osVer.dwMajorVersion >= 5 && osVer.dwMinorVersion >= 1) { CString csText; m_pCurWnd->GetWindowText(csText); XString xsText; xsText = csText; // Zyu modify on 100726,去掉编译警告 //int nCount=_tcslen(xsText); int nCount = (int)_tcslen(xsText); int iLow = l, iUp = h; for (int idx = 0; idx < nCount; idx++) { if (idx >= iUp) break; TCHAR c = xsText[idx]; if (c < 0) { //汉字 if (idx < iLow) iLow++; if (idx < iUp) iUp++; idx++; } } l = iLow; h = iUp; } #endif return TRUE; } void CBaseTextDlg::OnChar(UINT nID) { UpdateData(TRUE); m_pCurWnd = GetCurWnd(); if (!m_pCurWnd) { AfxMessageBox(_T("只能在指定控件中输入特殊字符!")); return; } int h, l; if (!GetPosition(h, l)) return; int i = 0;// Modify By Lcf On 2005-07-01 switch (nID) { case ID_DOWN_MARK: if (h == l) { AfxMessageBox(_T("请先在文字框中选择字符!")); return; } m_strInputText.Insert(l, _T("^L")); m_strInputText.Insert(h + 2, _T("^L")); i = h + 4; break; case ID_UP_MARK: if (h == l) { AfxMessageBox(_T("请先在文字框中选择字符!")); return; } m_strInputText.Insert(l, _T("^U")); m_strInputText.Insert(h + 2, _T("^U")); i = h + 4; break; case ID_CIRCLE: if (h == l) { AfxMessageBox(_T("请先在文字框中选择字符!")); return; } m_strInputText.Insert(l, _T("^C")); m_strInputText.Insert(h + 2, _T("^C")); i = h + 4; break; case ID_ANGLE_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%d")); i = l + 3; break; case ID_DIA_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%c")); i = l + 3; break; case ID_TOLERANCE_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%p")); i = l + 3; break; case ID_PERCENT_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%%")); i = l + 3; break; case ID_ONE_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^1")); i = l + 2; break; case ID_TWO_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^2")); i = l + 2; break; case ID_THREE_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^3")); i = l + 2; break; case ID_FOUR_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^4")); i = l + 2; break; case ID_SPECIAL_CHAR: { XPushAutoHide nAutoHide(this); CCharDlg dlg(this); CString str; CAcModuleResourceOverride vTemp; if (dlg.DoModal() != IDOK || dlg.m_character == _T("")) return; str = dlg.m_character; m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, str); i = l + str.GetLength(); } break; case ID_WORD://词库 { //XPushAutoHide nAutoHide(this); //CInsTextDlg dlg(this); //dlg.SetPreText(m_strInputText); //dlg.SetSingleText(m_bNeedSingleLineText); // zzg 2009 03 24 //if (dlg.DoModal() != IDOK || dlg.GetEditText() == _T("")) // return; //m_strInputText.Delete(l, h - l); //m_strInputText.Insert(l, dlg.GetEditText()); //i = l + dlg.GetEditText().GetLength(); } break; case ID_PICKTEXT:// Add By Lcf On 2005-07-01 { if (m_bModeless && m_bPost) { m_nOperCode = 1; GlobalFunc::PostCommand(_T("` "), false); } else { GetPickText(); acedGetAcadDwgView()->SetFocus(); } } return; } UpdateInputText(); // 回传给子类 CComboBox *pComboBox = NULL; CEdit *pEdit = NULL; if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { pComboBox = (CComboBox*)m_pCurWnd; int index = pComboBox->FindStringExact(0, m_strInputText); if (index < 0) pComboBox->InsertString(0, m_strInputText); pComboBox->SelectString(0, m_strInputText); pComboBox->SetEditSel(i, i); }// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。 if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { pEdit = (CEdit*)m_pCurWnd; pEdit->SetSel(i, i); } UpdateData(FALSE); if (pEdit) pEdit->SetSel(i, i); else pComboBox->SetEditSel(i, i); } // Add by lcf On 2005-07-01 BOOL CBaseTextDlg::GetPickText() { XPushAutoHide noAutoHide(this); m_nOperCode = -1; int h, l; if (!GetPosition(h, l)) return FALSE; int i = 0;// Modify By Lcf On 2005-07-01 BeginEditorCommand(); EntitySet ent; RBList mask(RTDXF0, _T("TCH_*,TEXT"), NULL); XPoint pt; if (GlobalFunc::SelectEntity(_T("\n屏幕拾取文字内容:"), ent, pt, mask) != RTNORM) { CompleteEditorCommand(); return FALSE; } PickEntSet ss(SS_FREE); ss += ent; SubText* pSubText = GlobalFunc::HitTestOnText(ss, GlobalFunc::Ucs2Wcs(pt)); if (pSubText != NULL) { CString sText = pSubText->GetText(); delete pSubText; m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, sText); i = l + sText.GetLength(); } CompleteEditorCommand(); UpdateInputText(); // 回传给子类 CComboBox *pComboBox = NULL; CEdit *pEdit = NULL; if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { pComboBox = (CComboBox*)m_pCurWnd; int index = pComboBox->FindStringExact(0, m_strInputText); if (index < 0) pComboBox->InsertString(0, m_strInputText); pComboBox->SelectString(0, m_strInputText); pComboBox->SetEditSel(i, i); }// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。 if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { pEdit = (CEdit*)m_pCurWnd; pEdit->SetSel(i, i); } UpdateData(FALSE); if (pEdit) pEdit->SetSel(i, i); else pComboBox->SetEditSel(i, i); return TRUE; } void CBaseTextDlg::OnOK() { g_nHeight = _tstof(m_strHeight); CModelessDialog::OnOK(); } void CBaseTextDlg::LoadTextStyle() { XSymbolList lstStyle(_T("STYLE")); for (int m = 0; m < lstStyle.Length(); m++) m_comboStyleName.AddString(lstStyle[m]); } // Modify By Lcf On 2005-6-06-24 void CBaseTextDlg::OnButtonTextHeight() { if (m_bModeless && m_bPost) { m_nOperCode = 0; GlobalFunc::PostCommand(_T("` "), false); } else { GetTextHeight(); acedGetAcadDwgView()->SetFocus(); } } void CBaseTextDlg::OnSelchangeComboFongstyle() { UpdateData(TRUE); if (m_comboStyleName.GetCurSel() >= 0) m_comboStyleName.GetLBText(m_comboStyleName.GetCurSel(), m_strFontStyle); AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_strFontStyle); if (!idTextStyle) return; OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle); // sg modify 110118,解决因为文字样式缺少,而产生的崩溃问题 // ASSERT(pStyle); if (pStyle != NULL) { CString strTemp; strTemp.Format(_T("%.1f"), pStyle->textSize()); //读文字风格的字高 if (_tstof(strTemp) > 1.0E-3) m_strHeight = strTemp; } else { AfxMessageBox(_T("文字风格已删除!")); } OPENOBJ_END(); UpdateData(FALSE); m_comboStyleName.SetCurSel(m_comboStyleName.FindStringExact(0, m_strFontStyle)); } void CBaseTextDlg::Obj2Dlg(AecXDbSymbWithText *pText) { m_strHeight.Format(_T("%.1f"), pText->GetTextHeight()); AcDbObjectId idTextStyle = pText->GetTextStyleId(); OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle); // sg modify 110118,解决因为文字样式缺少,而产生的崩溃问题 // ASSERT(pStyle); if (pStyle != NULL) { const TCHAR* pName = NULL; if (pStyle->getName(pName) == Acad::eOk && pName != NULL) m_strFontStyle = pName; else AfxMessageBox(_T("文字风格已删除!")); } else { AfxMessageBox(_T("文字风格已删除!")); } OPENOBJ_END(); } void CBaseTextDlg::Dlg2Obj(AecXDbSymbWithText *pText) { AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_strFontStyle); if (!idTextStyle) return; pText->SetTextStyleId(idTextStyle); g_nHeight = _tstof(m_strHeight); pText->SetTextHeight(g_nHeight); } // Add By Lcf On 2005-6-06-24 void CBaseTextDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CModelessDialog::OnActivate(nState, pWndOther, bMinimized); if (nState == WA_CLICKACTIVE) { CWnd *pWnd = GetCurWnd(); CWnd *pWnd1 = this->GetFocus(); if (pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { CComboBox *pComboBox = (CComboBox*)pWnd; if (pComboBox->m_hWnd == pWnd1->GetParent()->m_hWnd) { int nSel = pComboBox->GetWindowTextLength(); pComboBox->SetEditSel(nSel, nSel); } } else if (pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { CEdit *pEdit = (CEdit*)pWnd; if (pEdit->m_hWnd == pWnd1->m_hWnd) { int nBegin = pEdit->LineIndex(pEdit->GetLineCount() - 1); int nEnd = nBegin + pEdit->LineLength(nBegin); pEdit->SetSel(nEnd, nEnd); } } } else if (nState == WA_INACTIVE) { UpdateData(); if (m_bModeless && m_bPost) GlobalFunc::PostCommand(_T("` "), false); } } // Add By Lcf On 2005-6-06-24 void CBaseTextDlg::OnClose() { if (m_bModeless) { m_bPost = FALSE; GlobalFunc::PostCommand(_T(" "), false); } CModelessDialog::OnClose(); } // Add By Lcf On 2005-6-06-24 void CBaseTextDlg::GetTextHeight() { XPushAutoHide noAutoHide(this); PushMemVar vTemp(m_bPost, FALSE); m_nOperCode = -1; UpdateData(TRUE); double nHeight = _tstof(m_strHeight) * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), nHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { nHeight /= GlobalFunc::DocGetPScale(); m_strHeight.Format(_T("%.1f"), nHeight); } CompleteEditorCommand(); UpdateData(FALSE); } #pragma endregion #pragma region CArrowTextDlg const int maxHisList = 10; extern double g_nHeight; static int g_nArrowAlign = 0; static AecXDbSymbArrow::TArTextAlign g_ArrowAlign[] = { AecXDbSymbArrow::kAtSide, AecXDbSymbArrow::kAlignMid, AecXDbSymbArrow::kAlignEnd }; //extern int g_Option::instance().g_nSymbArrowStyle; BOOL CArrowTextDlg::m_bContinue = TRUE; // Add by lcf on 2005-06-29 CString CArrowTextDlg::g_csArrowSize = _T("3.0"); // sg add 090123 CString CArrowTextDlg::m_csText = _T(""); CString CArrowTextDlg::m_csText2 = _T(""); IMPLEMENT_DYNAMIC(CArrowTextDlg, CBaseTextDlg) CArrowTextDlg::CArrowTextDlg(CWnd* pParent /*=NULL*/) : CBaseTextDlg(CArrowTextDlg::IDD, pParent) { //{{AFX_DATA_INIT(CArrowTextDlg) //}}AFX_DATA_INIT } void CArrowTextDlg::DoDataExchange(CDataExchange* pDX) { CBaseTextDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CArrowTextDlg) // DDX_CBString(pDX, IDC_COMBO_HISTORY_TEXT, m_strInputText); // sg modify 090225 // sg modify 090507,仿照图名标注,试着解决“对象编辑中,有时候文字显示有问题”的BUG if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_COMBO_HISTORY_TEXT, m_csText); DDX_CBString(pDX, IDC_COMBO_TEXT2, m_csText2); } else { GetDlgItem(IDC_COMBO_HISTORY_TEXT)->SetWindowText(m_csText); GetDlgItem(IDC_COMBO_TEXT2)->SetWindowText(m_csText2); } DDX_Control(pDX, IDC_COMBO_HISTORY_TEXT, m_comboHistory); DDX_CBString(pDX, IDC_ARROW_SIZE, g_csArrowSize); if (pDX->m_bSaveAndValidate && _tstof(g_csArrowSize) < 1.0E-3) pDX->Fail(); DDX_Check(pDX, IDC_CONTINUE, m_bContinue); DDX_CBIndex(pDX, IDC_COMBO_ALIGNMENT, g_nArrowAlign); DDX_CBIndex(pDX, IDC_ARROW_STYLE, g_Option::instance().g_nSymbArrowStyle); // Add by lcf on 20050809 DDX_Control(pDX, IDC_COMBO_TEXT2, m_comboText2); // sg add 090108,增加线下文字 //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CArrowTextDlg, CBaseTextDlg) //{{AFX_MSG_MAP(CArrowTextDlg) ON_CBN_SELCHANGE(IDC_COMBO_HISTORY_TEXT, OnSelchangeComboHistoryText) // sg add 090108 ON_CBN_SELCHANGE(IDC_COMBO_TEXT2, OnSelchangeComboText2) ON_CBN_SELCHANGE(IDC_COMBO_ALIGNMENT, OnSelchangeComboAlignment) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CArrowTextDlg message handlers BOOL CArrowTextDlg::OnInitDialog() { CBaseTextDlg::OnInitDialog(); LoadHisText(); UpdateData(FALSE); if (m_bModeless) // sg add 090507,仿照图名标注修改 { if (m_comboHistory.GetCount() == 0) m_csText = _T("上"); // m_strInputText = _T("上"); // sg modify 090225 // else if (m_strInputText==_T("")) // sg modify 090123,林工提出需求,有时候会希望这里不填内容 // m_comboHistory.SetCurSel(0); if (m_comboText2.GetCount() == 0) m_csText2 = _T("下"); // else if (m_csText2==_T("") && m_bModeless && bEnable) // sg delete 090123 // m_comboText2.SetCurSel(0); } // sg add 090108,在线端,只能显示一行文字 BOOL bEnable = g_ArrowAlign[g_nArrowAlign] != AecXDbSymbArrow::kAtSide; GetDlgItem(IDC_COMBO_TEXT2)->EnableWindow(bEnable); SetDlgItemText(IDC_ARROW_SIZE, g_csArrowSize); m_comboHistory.SetFocus(); UpdateData(FALSE); return FALSE; // return TRUE unless you set the focus to a control } void CArrowTextDlg::LoadHisText() { TCHAR strTmpPath[100] = _T(""); GetTempPath(100, strTmpPath); _tcscat(strTmpPath, _T("arrow.his")); std:: 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]); m_comboText2.AddString(m_lstHistory[m]); // sg add 090108 } UpdateData(false); } void CArrowTextDlg::Obj2Dlg(AecXDbSymbArrow *pText) { CBaseTextDlg::Obj2Dlg(pText); // m_strInputText = pText->GetText(); m_csText = pText->GetText(); // sg add 090225 AecXDbSymbArrow::TArTextAlign Align = pText->GetTextAlign(); for (int i = 0; i < 3; i++) { if (Align == g_ArrowAlign[i]) g_nArrowAlign = i; } g_csArrowSize.Format(_T("%.1f"), pText->GetArrowSize()); g_Option::instance().g_nSymbArrowStyle = (int)pText->GetArrowType(); m_csText2 = pText->GetText2(); // sg add 090108 } void CArrowTextDlg::Dlg2Obj(AecXDbSymbArrow *pText) { CBaseTextDlg::Dlg2Obj(pText); // pText->SetText(m_strInputText); // sg modify 090225 pText->SetText(m_csText); pText->SetTextAlign(g_ArrowAlign[g_nArrowAlign]); pText->SetTextLocation(pText->GetDefaultTextLocation()); pText->SetText2Location(pText->GetDefaultText2Location()); // sg add 090107 pText->SetText2(m_csText2); // sg add 090108 BOOL bShowText2 = !m_csText2.IsEmpty(); pText->SetShowText2(bShowText2); double nSize = _tstof(g_csArrowSize); if (nSize > 1.0E-3) pText->SetArrowSize(nSize); pText->SetArrowType((AecXDbSymbArrow::TArrowType)g_Option::instance().g_nSymbArrowStyle); } void CArrowTextDlg::OnOK() { AddToRecent(); CBaseTextDlg::OnOK(); } // Add by lcf on 20050708 void CArrowTextDlg::AddToRecent() { { UpdateData(TRUE); int len = m_lstHistory.Length(); TCHAR strTmpPath[256] = _T(""); GetTempPath(255, strTmpPath); _tcscat(strTmpPath, _T("arrow.his")); #if (ARX>15) std:: #endif ofstream out(strTmpPath); // if (m_strInputText != _T("")) // sg add 090225 if (m_csText != _T("")) { // out << (const char *)_AS(m_strInputText) << "\n"; // int index = m_lstHistory.Index(m_strInputText); out << (const char *)_AS(m_csText) << "\n"; // sg add 090225 int index = m_lstHistory.Index(m_csText); if (index >= 0) { m_lstHistory.Remove(index); len--; } if (len > maxHisList - 1) len = maxHisList - 1; } // if (m_csText2!=_T("") && _tcscmp(m_csText2, m_strInputText)!=0) // sg add 090108 if (m_csText2 != _T("") && _tcscmp(m_csText2, m_csText) != 0) // sg modify 090225 { out << (const char *)_AS(m_csText2) << "\n"; int nIndex = m_lstHistory.Index(m_csText2); if (nIndex >= 0) { m_lstHistory.Remove(nIndex); 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(); m_comboText2.ResetContent(); // sg add 090108 LoadHisText(); } void CArrowTextDlg::OnSelchangeComboHistoryText() { // if (m_comboHistory.GetCurSel()>=0) // m_comboHistory.GetLBText(m_comboHistory.GetCurSel(), m_csText); // sg modify 090507,仿照图名标注,进行修改 CComboBox *pBox = (CComboBox*)GetDlgItem(IDC_COMBO_HISTORY_TEXT); int nIndex = pBox->GetCurSel(); if (nIndex >= 0) pBox->GetLBText(nIndex, m_csText); pBox->SetWindowText(m_csText); UpdateData(); } // sg add 090108,sg modify 090507,仿照图名标注,进行修改 void CArrowTextDlg::OnSelchangeComboText2() { CComboBox *pBox = (CComboBox*)GetDlgItem(IDC_COMBO_TEXT2); int nIndex = pBox->GetCurSel(); if (nIndex >= 0) pBox->GetLBText(nIndex, m_csText2); pBox->SetWindowText(m_csText2); UpdateData(); } void CArrowTextDlg::OnSelchangeComboAlignment() { UpdateData(TRUE); BOOL bEnable = g_ArrowAlign[g_nArrowAlign] != AecXDbSymbArrow::kAtSide; GetDlgItem(IDC_COMBO_TEXT2)->EnableWindow(bEnable); UpdateData(FALSE); } CWnd* CArrowTextDlg::GetCurWnd() { // CWnd *pWnd = GetDlgItem(IDC_COMBO_HISTORY_TEXT); // 把CWnd 回传给基类 // return (pWnd); UpdateData(TRUE); // sg modify 090225 CWnd *pWnd = this->GetFocus(); CWnd *pWnd2 = NULL; if (m_comboHistory.m_hWnd == pWnd->GetParent()->m_hWnd) { pWnd2 = GetDlgItem(IDC_COMBO_HISTORY_TEXT); // 把CWnd 回传给基类 m_strInputText = m_csText; } else if (m_comboText2.m_hWnd == pWnd->GetParent()->m_hWnd) { pWnd2 = GetDlgItem(IDC_COMBO_TEXT2); // 把CWnd 回传给基类 m_strInputText = m_csText2; } else { int nSel = m_comboHistory.GetWindowTextLength(); m_comboHistory.SetEditSel(nSel, nSel); pWnd2 = GetDlgItem(IDC_COMBO_HISTORY_TEXT); } return(pWnd2); } // sg add 090225 void CArrowTextDlg::UpdateInputText() { CWnd *pWnd = this->GetFocus(); if (m_comboHistory.m_hWnd == pWnd->GetParent()->m_hWnd) m_csText = m_strInputText; if (m_comboText2.m_hWnd == pWnd->GetParent()->m_hWnd) m_csText2 = m_strInputText; UpdateData(FALSE); } #pragma endregion #pragma region CCoordDlg int CCoordDlg::s_iUnitType = 0;//默认为mm M int CCoordDlg::s_iDataType = 0;//默认为WCS // [10/19/2007 nsh] CCoordDlg * CCoordDlg::m_pSelf = NULL;//指向自身的指针 CString CCoordDlg::m_strAngle = "45";//初始的角度值 BOOL CCoordDlg::m_bFixAngle = FALSE; //---------------- IMPLEMENT_DYNAMIC(CCoordDlg, CAcUiDialog) CCoordDlg::CCoordDlg(UINT resId, CWnd* pParent /*=NULL*/) : CAcUiDialog(resId, pParent) { m_iABCoord = g_Option::instance().g_bABCoord; m_iPreci = g_Option::instance().g_nCoordPrec; m_nArrowStyle = g_Option::instance().g_nCoordArrowStyle; } CCoordDlg::~CCoordDlg() { } void CCoordDlg::DoDataExchange(CDataExchange* pDX) { CAcUiDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_UNIT, m_cmbUnit); DDX_Control(pDX, IDC_COMBO_PRECI, m_cmbPreci); DDX_Control(pDX, IDS_TYPE, m_staticType); DDX_CBIndex(pDX, IDC_COMBO_UNIT, s_iUnitType); DDX_CBIndex(pDX, IDC_COMBO_PRECI, m_iPreci); DDX_Text(pDX, IDC_NORTH_ANGLE, m_fAngle); DDX_Radio(pDX, IDC_WCS, s_iDataType); DDX_Radio(pDX, IDC_TYPE_XY, m_iABCoord); // [10/22/2007 nsh] DDX_CBString(pDX, IDC_COMBO1, m_strAngle);//映射角度 DDX_Check(pDX, IDC_CHECK1, m_bFixAngle); //--end-------------- if (!pDX->m_bSaveAndValidate) { if (m_iABCoord == 1) m_staticType.SetWindowText(_T(" A= ---- B=")); else m_staticType.SetWindowText(_T(" X= ---- Y=")); GetDlgItem(IDC_PICK_NORTH)->EnableWindow(IsWcsPoint()); GetDlgItem(IDC_NORTH_ANGLE)->EnableWindow(IsWcsPoint()); GetDlgItem(IDC_NORTH_THUMB)->EnableWindow(IsWcsPoint()); GetDlgItem(IDC_REF_POINT)->EnableWindow(!IsRedLinePoint()); } DDX_CBIndex(pDX, IDC_ARROW_STYLE, m_nArrowStyle);// Add by lcf on 20050809 } BOOL CCoordDlg::OnInitDialog() { if (!CAcUiDialog::OnInitDialog()) return FALSE; // [10/22/2007 nsh] this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle); m_cmbUnit.AddString(_T("mm M")); m_cmbUnit.AddString(_T("M M")); m_cmbPreci.AddString(_T("0")); m_cmbPreci.AddString(_T("0.0")); m_cmbPreci.AddString(_T("0.00")); m_cmbPreci.AddString(_T("0.000")); m_cmbPreci.AddString(_T("0.0000")); m_cmbPreci.AddString(_T("0.00000")); m_cmbPreci.AddString(_T("0.000000")); UpdateData(FALSE); return TRUE; } BEGIN_MESSAGE_MAP(CCoordDlg, CAcUiDialog) ON_BN_CLICKED(IDC_TYPE_XY, OnClickRadio) ON_BN_CLICKED(IDC_TYPE_AB, OnClickRadio) ON_BN_CLICKED(IDC_UCS, OnClickRadio) ON_BN_CLICKED(IDC_WCS, OnClickRadio) ON_BN_CLICKED(IDC_REDLINE, OnClickRadio) ON_BN_CLICKED(IDC_REF_POINT, OnRefPoint) ON_BN_CLICKED(IDC_NORTH_THUMB, OnNorthThumb) ON_BN_CLICKED(IDC_PICK_NORTH, OnPickNorth) // [10/22/2007 nsh] ON_BN_CLICKED(IDC_CHECK1, OnClickCheck1) //---end--- END_MESSAGE_MAP() void CCoordDlg::OnNorthThumb() { Entity ent0; BeginEditorCommand(); int nRetCode = ent0.FilterSelect(_T("\n选择指北针:"), RBList(RTDXF0, _T("TCH_NORTHTHUMB"), NULL)); CompleteEditorCommand(); if (nRetCode == RTCAN) return; if (nRetCode == RTNORM) { UpdateData(); ent0.GetData(50, &m_fAngle); m_fAngle = CT_std_angle(m_fAngle) * 180 / PI; //add tyj 20160901:添加精度设置,防止指北针设置角度与坐标标注显示的北向角度不一致的问题 int luprec, auprec; VERIFY(xg_getvar(_T("LUPREC"), &luprec) == RTNORM && xg_getvar(_T("AUPREC"), &auprec) == RTNORM); if (auprec == 0)//保留整数 { m_fAngle = int(m_fAngle + 0.5); } else { double dPrecisionCompute = 1.0;//计算精度的辅助变量 while (auprec != 0) { dPrecisionCompute = dPrecisionCompute * 10.0; auprec--; } m_fAngle = int((m_fAngle + 0.5 / dPrecisionCompute) * dPrecisionCompute) / dPrecisionCompute; } UpdateData(FALSE); } } // modify by lcf on 20050809 void CCoordDlg::OnPickNorth() { BeginEditorCommand(); UpdateData(); int nRetCode; XPoint ptBase; XString sNote; INITGET_BEG(0, _T("S")); sNote << _T("\n指定第一点或 [选择已有坐标标注确定北向(S)]<") << m_fAngle << _T(">:"); nRetCode = acedGetPoint(NULL, sNote, ptBase); INITGET_END(); if (nRetCode == RTNORM) nRetCode = acedGetAngle(ptBase, _T("\n输入北向的WCS角度<返回>:"), &m_fAngle); if (nRetCode == RTNORM) { m_fAngle = CT_std_angle(m_fAngle) * 180 / PI; UpdateData(FALSE); } else if (nRetCode == RTKWORD) { RBList mask(RTDXF0, _T("TCH_COORD"), NULL); PickSet ss(SS_FREE); if (GlobalFunc::SelectEntities(_T("\n请选择两个上华坐标标注确定北向角度<返回>: "), ss, mask) == RTNORM) { if (ss.Length() == 2) { AcGeVector3d vtLoc, vtVal; OPENOBJ_BEGIN(ss[(long)0], AcDb::kForWrite, AecXDbSymbCoord, pDim1); if (pDim1) { XPoint ptLoc1 = pDim1->GetLocation(); XPoint ptVal1 = pDim1->GetValue(); OPENOBJ_BEGIN(ss[(long)1], AcDb::kForWrite, AecXDbSymbCoord, pDim2); if (pDim2) { XPoint ptLoc2 = pDim2->GetLocation(); XPoint ptVal2 = pDim2->GetValue(); vtLoc = ptLoc2.AsAcGeVector3d() - ptLoc1.AsAcGeVector3d(); vtVal = ptVal2.AsAcGeVector3d() - ptVal1.AsAcGeVector3d(); m_fAngle = PI / 2 - vtLoc.angleTo(vtVal, AcGeVector3d::kZAxis); m_fAngle = CT_std_angle(m_fAngle) * 180 / PI; UpdateData(FALSE); } OPENOBJ_END(); } OPENOBJ_END(); } } } CompleteEditorCommand(); } void CCoordDlg::OnRefPoint() { PickSet ssAll(SS_FREE); if (ssAll.Get(_T("X"), NULL, NULL, NULL) != RTNORM) return; UpdateData(); XPoint pt0; BeginEditorCommand(); int nRetCode = ads_getpoint(NULL, _T("\n点取参考点:"), pt0); if (nRetCode != RTNORM) { CompleteEditorCommand(); return; } if (IsWcsPoint()) pt0 = GlobalFunc::Ucs2Wcs(pt0); while (true) { XPoint pt1 = pt0; if (IsWcsPoint()) { pt1.Rotate(PI / 2 - m_fAngle * PI / 180);//转换为北向坐标,add by whl on 050726 g_Option::instance().adsout << _T("\n当前北向角度:") << GlobalFunc::Angle2Str(m_fAngle) << _T("度"); } g_Option::instance().adsout << _T("\n输入坐标值<") << pt1.x << _T(",") << pt1.y << _T(">:"); XString sText(256); nRetCode = ads_getstring(0, _T(""), sText); if (nRetCode != RTNORM) break; if (!!sText) if (_stscanf(sText, _T("%lf,%lf"), &pt1.x, &pt1.y) != 2) { g_Option::instance().adsout << _T("\n请按格式x,y正确输入坐标!"); continue; } if (IsUcsPoint())//移动用户坐标系 { XPushVar vOsMode(_T("OSMODE"), 0); XPoint ptOrg = pt0 - pt1; SHads_command(RTSTR, _T("UCS"), RTSTR, _T("M"), RT3DPOINT, &ptOrg, RTNONE); } else//移动世界坐标系 { XPushVar vOsMode(_T("OSMODE"), 0); //输入北向坐标转化为世界坐标,add by whl on 050726 pt1.Rotate(-PI / 2 + m_fAngle * PI / 180); // Zyu modify on 100726,支持64位 //ads_command(RTSTR,_T("MOVE"),RTPICKS,(long *)ssAll,RTSTR,_T(""),RT3DPOINT,&pt0,RT3DPOINT,&pt1,RTNONE); SHads_command(RTSTR, _T("MOVE"), RTPICKS, (LONG_PTR *)ssAll, RTSTR, _T(""), RT3DPOINT, &pt0, RT3DPOINT, &pt1, RTNONE); SHads_command(RTSTR, _T("PAN"), RT3DPOINT, &pt1, RT3DPOINT, &pt0, RTNONE); } break; } CompleteEditorCommand(); } void CCoordDlg::OnClickRadio() { UpdateData(); UpdateData(FALSE); } void CCoordDlg::OnOK() { CAcUiDialog::OnOK(); g_Option::instance().g_bABCoord = m_iABCoord; g_Option::instance().g_nCoordPrec = m_iPreci; g_Option::instance().g_nCoordArrowStyle = m_nArrowStyle; GlobalFunc::DocSetMeterUnitDraw(CCoordDlg::s_iUnitType); if (CCoordDlg::s_iUnitType == 1) GlobalFunc::DocSetMeterUnitDim(TRUE); } // [10/22/2007 nsh] void CCoordDlg::OnClickCheck1() { if (m_bFixAngle) m_bFixAngle = FALSE; else m_bFixAngle = TRUE; this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle); } //--end-- #pragma endregion #pragma region CBatchDimDlg BOOL CBatchDimDlg::m_bPolyVertex = TRUE; // 多段线端点 BOOL CBatchDimDlg::m_bLineVertex = FALSE; // 直线、弧线端点 BOOL CBatchDimDlg::m_bElevLoc = FALSE; // 标高符号插入点 BOOL CBatchDimDlg::m_bIntersectPt = FALSE; // 交点 BOOL CBatchDimDlg::m_bPoint = FALSE; // 点 BOOL CBatchDimDlg::m_bCirclePt = FALSE; // 圆心 CString CBatchDimDlg::m_strDimlayers = _T(""); // 图层 BOOL CBatchDimDlg::m_bAppoint = FALSE; //Adesk::Boolean acedPostCommand(const TCHAR *); IMPLEMENT_DYNAMIC(CBatchDimDlg, CModelessDialog) CBatchDimDlg::CBatchDimDlg(CWnd* pParent) : CModelessDialog(CBatchDimDlg::IDD, pParent) { m_bPost = FALSE; } CBatchDimDlg::~CBatchDimDlg() { } void CBatchDimDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); DDX_Check(pDX, IDC_CHK_POLYVERTEX, m_bPolyVertex); DDX_Check(pDX, IDC_CHK_LINEVERTEX, m_bLineVertex); DDX_Check(pDX, IDC_CHK_ELEVLOC, m_bElevLoc); DDX_Check(pDX, IDC_CHK_INTERSECTPT, m_bIntersectPt); DDX_Check(pDX, IDC_CHK_POINT, m_bPoint); DDX_Check(pDX, IDC_CHK_CIRCLEPT, m_bCirclePt); DDX_Check(pDX, IDC_CHK_APPOINTLAYER, m_bAppoint); } BOOL CBatchDimDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); if (m_bAppoint) //是否指定图层 { GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(TRUE); } else { GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(FALSE); } UpdateData(FALSE); return TRUE; } BEGIN_MESSAGE_MAP(CBatchDimDlg, CModelessDialog) ON_BN_CLICKED(IDC_BTN_ALLSELECT, OnClickAllSelect) ON_BN_CLICKED(IDC_BTN_ALLCLERA, OnClickAllClear) ON_BN_CLICKED(IDC_BTN_SELECTINDRAW, OnClickSelectInDraw) ON_BN_CLICKED(IDC_CHK_APPOINTLAYER, OnBnClickAppointlayer) ON_WM_CLOSE() END_MESSAGE_MAP() void CBatchDimDlg::OnClickAllSelect() // 全选 { m_bPolyVertex = TRUE; m_bLineVertex = TRUE; m_bElevLoc = TRUE; m_bIntersectPt = TRUE; m_bPoint = TRUE; m_bCirclePt = TRUE; UpdateData(FALSE); } void CBatchDimDlg::OnClickAllClear() // 清空 { m_bPolyVertex = FALSE; m_bLineVertex = FALSE; m_bElevLoc = FALSE; m_bIntersectPt = FALSE; m_bPoint = FALSE; m_bCirclePt = FALSE; UpdateData(FALSE); } void CBatchDimDlg::OnClose() { m_bPost = FALSE; if (m_bModeless) { acedPostCommand(_T("\33\33")); } else { CModelessDialog::OnClose(); } } void CBatchDimDlg::OnClickSelectInDraw() { /*CLayerSiftDlg dlg; dlg.SetLayerName(m_aryAddLayer); // 专门用于屏幕拾取对象 if (dlg.DoModal() == IDOK) { if (dlg.m_bSelectEnt) // 当前是在屏幕提取对象 { m_bPost = TRUE; if (m_bModeless) { acedPostCommand(_T("\33")); } } else { m_bPost = FALSE; m_aryAddLayer.RemoveAll(); // 添加成功 m_strDimlayers = dlg.GetLayerName(); UpdateData(FALSE); } } else { m_bPost = FALSE; m_aryAddLayer.RemoveAll(); // 不需要添加 }*/ } void CBatchDimDlg::SelectEntInDraw() { XPushAutoHide noAutoHide(this); BeginEditorCommand(); PickSet entSetInDraw; RBList rb; if (GlobalFunc::SelectEntities(_T("\n请选择对象<返回>: "), entSetInDraw, rb) == RTNORM) { CStringArray aryLayers; for (long i = 0; i < entSetInDraw.Length(); i++) { OPENOBJ_BEGIN(entSetInDraw[i], AcDb::kForRead, AcDbEntity, pEntity); if (!pEntity) { continue; } bool bFind = false; CString csLayText = pEntity->layer(); for (int j = 0; j < aryLayers.GetSize(); j++) { if (csLayText == aryLayers[j]) { bFind = true; break; } } if (!bFind) // 没有找到,添加 aryLayers.Add(csLayText); OPENOBJ_END(); } if (aryLayers.GetSize() > 0) m_aryAddLayer.Append(aryLayers); } CompleteEditorCommand(); } BOOL CBatchDimDlg::GetIsPolyVertex() { UpdateData(TRUE); return m_bPolyVertex; } BOOL CBatchDimDlg::GetIsLineVertex() { UpdateData(TRUE); return m_bLineVertex; } BOOL CBatchDimDlg::GetIsElevLoc() { UpdateData(TRUE); return m_bElevLoc; } BOOL CBatchDimDlg::GetIsIntersectPt() { UpdateData(TRUE); return m_bIntersectPt; } BOOL CBatchDimDlg::GetIsPoint() { UpdateData(TRUE); return m_bPoint; } BOOL CBatchDimDlg::GetIsCirclePt() { UpdateData(TRUE); return m_bCirclePt; } void CBatchDimDlg::OnBnClickAppointlayer() { /*UpdateData(TRUE); if (m_bAppoint) // 指定图层过滤 { GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(TRUE); if (m_strDimlayers.IsEmpty()) // 如果图层过滤表为空,那么就判断一下是否有文件 { CLayerSiftDlg dlg; dlg.GetLayerInIniFiles(); m_strDimlayers = dlg.GetLayerName(); } } else { GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(FALSE); }*/ } BOOL CBatchDimDlg::GetIsAppointLayer() { UpdateData(TRUE); BOOL bAppoint = m_bAppoint; if (m_strDimlayers.IsEmpty()) { bAppoint = FALSE; } return bAppoint; } CString CBatchDimDlg::GetStrLayerName() { return m_strDimlayers; } #pragma endregion #pragma region CElevDlg int g_iPrecision = 1; // 当前精度 CElevDlg *CElevDlg::g_pElevDlg = NULL; CElevDlg::CElevDlg(AecXDbSymbElevation*pElev) : CModelessDialog(IDD_ELEV, acedGetAcadFrame()) , m_pElev(pElev), m_bSitePlanDlg(TRUE) { m_bDlgType = FALSE; // 对象编辑对话框为FALSE g_nElevType = pElev->IsArchElev() ? 0 : 1; // 标高类型:建筑为0,总图为1 SetArchElevGrid(); // 设置表格行数、表头 g_bHatch = pElev->IsFilled(); // 符号样式 g_bDote = pElev->IsDote(); // sg add 090212,圆点样式 g_bHollow = pElev->IsHollowTriangle(); // sg add 120608,是否是三角形空心标高符号 g_bHasBase = pElev->HasBaseLine(); g_bHasLeader = pElev->HasLeader(); g_bElevCross = pElev->IsCross(); // if (g_bHatch || g_bDote || g_bHasBase || g_bHasLeader) if (g_bHatch || g_bDote || g_bHollow || g_bHasBase || g_bHasLeader || g_bElevCross) // sg add 090226,普通样式 g_bCommonElev = FALSE; else g_bCommonElev = TRUE; // m_ComBox.SetCurSel(1); // sg delete 090312 g_iPrecision = pElev->IsPrec2() ? 0 : 1; // 当前精度 g_bElevSideText = pElev->IsAtLineSide(); // 文字是否齐线端 // if (g_bHatch || g_bDote) // 文字是否居中 if (g_bHatch && g_nElevType == 0) // 修改后,只有建筑标高才用该数据,文字是否居中 g_bElevMidText = pElev->IsUpDownTextElev(); else if (g_nElevType == 1 && g_bCommonElev) // 总图,普通标高,对齐方式 g_nElevTextAlign = (pElev->IsUpDownTextElev()) ? 0 : 1; // sg add 120608,从对象中获得总图标高默认文字位置,不包含普通标高样式 if (g_bHatch || g_bDote || g_bElevCross) { if ((g_bHatch || g_bElevCross) && pElev->IsNewSitePlanElev()) m_csTextLoc = _T("右上"); else if (pElev->IsUpDownTextElev()) m_csTextLoc = _T("上部"); else m_csTextLoc = _T("右侧"); } else if (g_bHollow) m_csTextLoc = _T("上部"); else m_csTextLoc = g_csTextLoc; g_csTextLoc = m_csTextLoc; InitGridAndTextFromEnt(); // 添写表格、编辑框内容 g_bOrder = FALSE; // 是否对齐标注 g_bHightWrite = TRUE; // 是否手工输入 g_bStandard = pElev->IsStandard(); // 是否规范样式 g_bParentheses = pElev->IsParentheses(); // 是否加括号 double dTextHeight = pElev->GetTextHeight(); // sg add 090209,字高 m_csTextHeight.Format(_T("%.1f"), dTextHeight); g_csAbsoluteElev = pElev->GetText(); AcDbObjectId idTextStyle = pElev->GetTextStyleId(); // sg add 090209,文字样式 OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle); ASSERT(pStyle); const TCHAR* pName = NULL; if (pStyle->getName(pName) == Acad::eOk && pName != NULL) m_csFontStyle = pName; else AfxMessageBox(_T("文字风格已删除!")); OPENOBJ_END(); } CElevDlg::CElevDlg(CWnd *pParent) : CModelessDialog(IDD_ELEV, pParent) { m_bDlgType = TRUE; // 绘制对话框为TRUE SetArchElevGrid(); // 设置表格行数、表头 m_grid.Clear(); // sg add 090313,读取表格内容记忆值 m_grid.AppendRow(); CString csTexts = (LPCTSTR)g_szGridText; // sg add 090505,根据表格内容,重新修正,初次显示对话框时,是否手工输入 BOOL bHandWrite = g_bHightWrite; while (!csTexts.IsEmpty()) { // sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$” // int nResult = csTexts.Find(_T("/")), int nResult = csTexts.Find(_T("$")), nLength = csTexts.GetLength(); nResult = (nResult < 0) ? nLength : nResult; CString csCell0 = csTexts.Left(nResult), csCell1 = _T(""); int nNext = nLength - nResult - 1; if (nNext > 0) csTexts = csTexts.Right(nNext); else csTexts = _T(""); int nRet = csCell0.Find(_T("&")); if (nRet > 0) // 解析表格第二行 { csCell1 = csCell0.Right(csCell0.GetLength() - nRet - 1); csCell0 = csCell0.Left(nRet); bHandWrite = TRUE; // sg add 090505,有楼号,手工输入 } long lRowNum = m_grid.GetRowNum() - 1; m_grid[lRowNum][0].SetText(csCell0); m_grid[lRowNum][1].SetText(csCell1); if (!csTexts.IsEmpty()) { m_grid.AppendRow(); // 增加一行,再输入文字 bHandWrite = TRUE; // sg add 090505,多层,手工输入 } } m_grid.FitLastCol(); if (fabs(g_dTextHeight) < 1.0E-3) // sg add 090209,字高 g_dTextHeight = 3.5; m_csTextHeight.Format(_T("%.1f"), g_dTextHeight); m_csFontStyle = g_csFontStyle; // sg add 090216,文字样式 g_bHightWrite = bHandWrite; // sg add 090505 m_csTextLoc = g_csTextLoc; // sg add 120608,总图标高文字位置 m_bSitePlanDlg = TRUE; // jsx add 160520,总图标高对话框 } CElevDlg::~CElevDlg() { if (m_pElev != NULL) { m_pElev = NULL; } g_pElevDlg = NULL; } void CElevDlg::DoDataExchange(CDataExchange*pDX) { //{{AFX_DATA_MAP(CElevDlg) // DDX_Check(pDX,IDC_HATCH,g_bHatch); // DDX_Check(pDX,IDC_BASE_LINE,g_bHasBase); // DDX_Check(pDX,IDC_LERDER,g_bHasLeader); DDX_Control(pDX, IDC_BUTTON1, m_ButHatch); DDX_Control(pDX, IDC_BUTTON2, m_ButBaseLine); DDX_Control(pDX, IDC_BUTTON3, m_ButLeadLine); DDX_Control(pDX, IDC_BUTTON4, m_ButContinue); DDX_Control(pDX, IDC_BUTTON5, m_ButOrder); DDX_Control(pDX, IDC_COMBO1, m_ComBox); DDX_Control(pDX, IDC_CHECKWRITER, m_Rider); DDX_Control(pDX, IDC_BUTTON6, m_ButDote); DDX_Control(pDX, IDC_BUTTON_HOLLOW, m_ButHollow); DDX_Control(pDX, IDC_BUTTON_ELEV_CROSS, m_ButCross);//十字标高 DDX_Control(pDX, IDC_COMBO_HEIGHT, m_cmbTextHeight); DDX_CBString(pDX, IDC_COMBO_HEIGHT, m_csTextHeight); if (pDX->m_bSaveAndValidate && _tstof(m_csTextHeight) < 1.0E-3) pDX->Fail(); DDX_Control(pDX, IDC_COMBO_FONGSTYLE, m_cmbStyleName); if (pDX->m_bSaveAndValidate) DDX_CBString(pDX, IDC_COMBO_FONGSTYLE, m_csFontStyle); DDX_Control(pDX, IDC_COMBO_SITEPLAN_TEXTLOC, m_cmbTextLoc); if (pDX->m_bSaveAndValidate) DDX_CBString(pDX, IDC_COMBO_SITEPLAN_TEXTLOC, m_csTextLoc); DDX_Check(pDX, IDC_CHECK_STANDARD, g_bStandard); DDX_Check(pDX, IDC_CHECK_PARENTHESES, g_bParentheses); DDX_Check(pDX, IDC_CHECK_RIGHTTEXT, g_bElevSideText); DDX_Text(pDX, IDC_EDIT_CONVERSION, g_csElevConversion); DDX_Check(pDX, IDC_CHECK_DIMZERO, g_bUseConversion); DDX_Radio(pDX, IDC_RADIO_UPDOWN, g_nElevTextAlign); DDX_Control(pDX, IDC_TAB_ELEVTYPE, m_Tab); DDX_Control(pDX, IDC_BUTTON7, m_ButCommon); DDX_Text(pDX, IDC_EDIT_ABSOLUTEELEV, g_csAbsoluteElev); DDX_Text(pDX, IDC_EDIT_RELATIVEELEV, g_csRelativeElev); DDX_Check(pDX, IDC_CHECK_UPTEXT, g_bElevMidText); //}}AFX_DATA_MAP } BOOL CElevDlg::OnInitDialog() { BOOL bRes = CModelessDialog::OnInitDialog(); // 1、文字字高、样式设置 LoadTextStyle(); // sg add 090209,加载文字样式 // sg add 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式 int nRet = m_cmbStyleName.FindStringExact(0, m_csFontStyle); if (nRet < 0) // 当前图纸没有此样式 { nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_DIM")); } m_cmbStyleName.SetCurSel(nRet); nRet = m_cmbTextHeight.FindStringExact(0, m_csTextHeight); if (nRet > 0) // 根据文字样式,调整字高 m_cmbTextHeight.SetCurSel(nRet); else { CString sTemp(m_csTextHeight); LPTSTR p = sTemp.GetBuffer(100); g_dTextHeight = _tstof(p); sTemp.ReleaseBuffer(); m_csTextHeight.Format(_T("%.1f"), g_dTextHeight); } // 2、根据对话框类型,设置控件显示状态,add by ZKM CWnd *pWnd = NULL; if (m_bDlgType) // 绘制对话框 { pWnd = GetDlgItem(IDOK); // OK if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDCANCEL); // CANCEL if (pWnd) pWnd->ShowWindow(SW_HIDE); CRect rOk; // sg add 090311,处理模式、非模式对话框时,对话框大小变化 GetDlgItem(IDOK)->GetWindowRect(rOk); CRect rect; GetWindowRect(rect); rect.bottom -= rOk.Height(); rect.bottom -= 5; MoveWindow(rect); } else // 对象编辑对话框 { pWnd = GetDlgItem(IDC_CHECKWRITER); // 手工输入 if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDC_BUTTON5); // 自动对齐 if (pWnd) pWnd->ShowWindow(SW_HIDE); } InitData(); // 设置按钮图片、精确度 // 3、设置内部数据默认值 g_nLeaderLen = 7.0; g_nBaseLen = 7.0; m_bUpdateText = FALSE; m_bHatchTou = FALSE; m_bOrderTou = FALSE; // 4、设置表格 if (m_bDlgType) SetGridEnableWrite(FALSE); // modified by whl on 090309 // m_grid.Create(this, IDC_GRID, WS_VISIBLE|WS_TABSTOP|WS_CHILD|WS_BORDER); m_grid.Create(this, IDC_GRID); m_grid.FitLastCol(); if (!m_bDlgType) // 对象编辑对话框 m_grid.AutoEditCell(&m_grid.GetCell(0, 0)); // m_Rider.SetCheck(g_bHightWrite); // sg modify 090222 // if (m_bDlgType) // 绘制对话框 // SetGridEnableWrite(g_bHightWrite); SetGridEnableWrite(g_bHightWrite); if (m_bDlgType) // 绘制对话框 m_Rider.SetCheck(g_bHightWrite); // 5、设置属性页 TC_ITEM *pTCItem = new TC_ITEM; // sg add 090220,增加总图属性页 pTCItem->mask = TCIF_TEXT; pTCItem->pszText = const_cast(_T("建筑")); m_Tab.InsertItem(0, pTCItem); pTCItem->pszText = const_cast(_T("总图")); m_Tab.InsertItem(1, pTCItem); if (IsSitePlanDlg()) g_nElevType = 1; m_Tab.SetCurSel(g_nElevType); SetTabCurPage1(); // 根据标高类型,设置各个控件的显示 SetTabCurPage2(); // 设置强制规定 SetTextLocationByStyle(); // 6、设置显示哪种文字与符号的位置关系设置方式 BOOL bTest = m_bSitePlanDlg; if (TRUE == IsSitePlanDlg()) { //标题改一下 SetWindowText(_T("总图标高")); m_Tab.DeleteItem(0); } return bRes; } void CElevDlg::LoadTextStyle() // sg add 090209,加载文字样式 { XSymbolList lstStyle(_T("STYLE")); for (int m = 0; m < lstStyle.Length(); m++) m_cmbStyleName.AddString(lstStyle[m]); // sg add 090216,标高标注的默认文字样式应该为_TCH_DIM int nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_DIM")); if (nRet < 0) m_cmbStyleName.AddString(_T("_TCH_DIM")); } void CElevDlg::InitData() // add by zkm { // 设置按钮上的图片 m_ButHatch.SetIcon(AfxGetApp()->LoadIcon(IDI_HATCH)); m_ButDote.SetIcon(AfxGetApp()->LoadIcon(IDI_DOTE)); // sg add 090209,圆点样式 m_ButCommon.SetIcon(AfxGetApp()->LoadIcon(IDI_COMMONELEV)); // sg add 090226,普通样式 m_ButHollow.SetIcon(AfxGetApp()->LoadIcon(IDI_HOLLOW)); // sg add 120608,空心三角形地坪标高 m_ButCross.SetIcon(AfxGetApp()->LoadIcon(IDI_ELEVCROSS)); // jsx add 160513,十字标高 //m_ButBaseLine.SetIcon(AfxGetApp()->LoadIcon(IDI_BASELINE)); //m_ButLeadLine.SetIcon(AfxGetApp()->LoadIcon(IDI_LEADLINE)); //m_ButOrder.SetIcon(AfxGetApp()->LoadIcon(IDI_ORDER)); // sg delete 090301,连续标注已被隐藏,8.0起一定是连续标注的 // m_ButContinue.SetIcon(AfxGetApp()->LoadIcon(IDI_CONTINUE)); // sg add 090226,增加符号的文字解释 AddTip(IDC_BUTTON1, _T("三角形室外地坪标高")); AddTip(IDC_BUTTON6, _T("圆点室外地坪标高")); AddTip(IDC_BUTTON7, _T("普通标高")); AddTip(IDC_BUTTON_HOLLOW, _T("三角形空心室内标高")); AddTip(IDC_BUTTON2, _T("带基线")); AddTip(IDC_BUTTON3, _T("带引线")); AddTip(IDC_BUTTON5, _T("自动对齐")); // sg add 090403,给新增按钮“多标高”增加文字解释 AddTip(IDC_BUTTON_ADDMUTIELEV, _T("多层楼层标高编辑")); AddTip(IDC_BUTTON_ELEV_CROSS, _T("十字标高")); // if (g_bContinue) // sg delete 090227,强制连续标注 // m_ButContinue.SetCheck(1); // else // m_ButContinue.SetCheck(0); if (g_bOrder) m_ButOrder.SetCheck(1); else m_ButOrder.SetCheck(0); if (g_bHasBase) m_ButBaseLine.SetCheck(1); else m_ButBaseLine.SetCheck(0); if (g_bHasLeader) m_ButLeadLine.SetCheck(1); else m_ButLeadLine.SetCheck(0); if (g_bHatch) m_ButHatch.SetCheck(1); else m_ButHatch.SetCheck(0); if (g_bDote) // sg add 090209,圆点样式 m_ButDote.SetCheck(1); else m_ButDote.SetCheck(0); if (g_bHollow) // sg add 120608,空心三角形地坪标高 m_ButHollow.SetCheck(1); else m_ButHollow.SetCheck(0); if (g_bElevCross)//十字标高 m_ButCross.SetCheck(1); else m_ButCross.SetCheck(0); if (g_bCommonElev) // sg add 090226,普通样式 m_ButCommon.SetCheck(1); else m_ButCommon.SetCheck(0); m_ComBox.AddString(_T("0.00")); // 设置精确度列表 m_ComBox.AddString(_T("0.000")); m_ComBox.SetCurSel(g_iPrecision); if (!m_bDlgType) // 对象编辑对话框 { if (m_pElev->IsPrec2()) { m_ComBox.SetCurSel(0); g_iPrecision = 0; } else { m_ComBox.SetCurSel(1); g_iPrecision = 1; } } } void CElevDlg::SetArchElevGrid() // sg add 090222,设置表格行数、表头 { m_grid.Clear(); m_grid.SetRowNum(1); m_grid.SetColFixLength(); m_grid.FitLastCol(); m_grid.AppendCol(_T("楼层标高"), 80); m_grid.AppendCol(_T("楼层号/标高说明"), 100); } void CElevDlg::SetTabCurPage1() // 设置当前选择页面控件显示情况,sg add 090222 { int nShow1 = SW_HIDE, // 总图标高 nShow2 = SW_SHOW; if (g_nElevType == 0) // 建筑标高 { nShow1 = SW_SHOW; nShow2 = SW_HIDE; } GetDlgItem(IDC_GRID)->ShowWindow(nShow1); // 建筑 GetDlgItem(IDC_CHECK_STANDARD)->ShowWindow(nShow1); GetDlgItem(IDC_CHECK_PARENTHESES)->ShowWindow(nShow1); GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->ShowWindow(nShow1); // sg add 090401 if (m_bDlgType) // sg add 090320,对象编辑对话框中,这两项总不显示 { GetDlgItem(IDC_CHECKWRITER)->ShowWindow(nShow1); GetDlgItem(IDC_BUTTON5)->ShowWindow(nShow1); } GetDlgItem(IDC_BUTTON2)->ShowWindow(nShow1); // 带基线 GetDlgItem(IDC_BUTTON3)->ShowWindow(nShow1); // 带引线 GetDlgItem(IDC_STATIC_ABSOLUTE)->ShowWindow(nShow2); // 总图 GetDlgItem(IDC_STATIC_RELATIVE)->ShowWindow(nShow2); GetDlgItem(IDC_STATIC_CONVERSIONSHIP)->ShowWindow(nShow2); GetDlgItem(IDC_EDIT_ABSOLUTEELEV)->ShowWindow(nShow2); GetDlgItem(IDC_STATIC_EQUAL)->ShowWindow(nShow2); GetDlgItem(IDC_EDIT_RELATIVEELEV)->ShowWindow(nShow2); GetDlgItem(IDC_STATIC_PLUS)->ShowWindow(nShow2); GetDlgItem(IDC_EDIT_CONVERSION)->ShowWindow(nShow2); GetDlgItem(IDC_CHECK_DIMZERO)->ShowWindow(nShow2); GetDlgItem(IDC_STATIC_ALIGNSHIP)->ShowWindow(nShow2); GetDlgItem(IDC_RADIO_UPDOWN)->ShowWindow(nShow2); GetDlgItem(IDC_RADIO_LEFTRIGHT)->ShowWindow(nShow2); GetDlgItem(IDC_BUTTON_HOLLOW)->ShowWindow(nShow2); // 空心三角形地坪标高 GetDlgItem(IDC_BUTTON_ELEV_CROSS)->ShowWindow(nShow2); //十字标高 if (g_nElevType == 0) // 建筑,表格置顶 GetDlgItem(IDC_GRID)->BringWindowToTop(); else // 总图,根据是否自动换算,控制部分控件是否显示 SetShowByUseConversion(); } // 强制对建筑、总图标高进行的默认规定,只作为切换页面的默认设置,可修改 void CElevDlg::SetTabCurPage2() { if (g_nElevType == 0) // 建筑标高 { // sg add 090212,规范方式——>添加括号 GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE); //GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); // 带基线 //GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE); // 带引线 if (m_bDlgType) // sg add 090320,对象编辑对话框中,这项总不显示 GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE); // 自动对齐 GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE); // “文字齐线端”可改 if (g_bDote || g_bElevCross) { g_bDote = FALSE; g_bElevCross = FALSE; m_ButDote.SetCheck(0); m_ButCross.SetCheck(0); g_bCommonElev = TRUE; // 不支持圆点样式,切换到普通样式 m_ButCommon.SetCheck(1); } if (g_bHollow) { g_bHollow = FALSE; m_ButHollow.SetCheck(0); g_bCommonElev = TRUE; // 不支持空心三角形地坪标高,切换到普通样式 m_ButCommon.SetCheck(1); } if (g_bCommonElev || g_bHasBase || g_bHasLeader) // 建筑标高,必定左右排列 g_nElevTextAlign = 1; SetGridEnableWrite(g_bHightWrite); // 表格是否可写 } else // 总图标高 { g_bOrder = FALSE; if (m_bDlgType) m_ButOrder.SetCheck(g_bOrder); // 不支持“自动对齐” GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE); if (g_nElevTextAlign == 0) // 上下排列时,“文字齐线端”不可改 { g_bElevSideText = TRUE; // 总图,文字一般齐线端 GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE); } else // “文字齐线端”可改 GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE); // 圆点样式 //GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); //GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE); if (g_bHasLeader || g_bHasBase) { g_bHasLeader = FALSE; g_bHasBase = FALSE; m_ButLeadLine.SetCheck(0); m_ButBaseLine.SetCheck(0); g_bCommonElev = TRUE; // 不支持带基线、引线,切换到普通样式 m_ButCommon.SetCheck(1); } if (g_bElevCross) { m_ButCross.SetCheck(1); } } UpdateData(FALSE); } // sg add 090311,根据是否自动换算,设置各控件是否显示 void CElevDlg::SetShowByUseConversion() { int nShow = g_bUseConversion ? SW_SHOW : SW_HIDE; GetDlgItem(IDC_STATIC_EQUAL)->ShowWindow(nShow); // = GetDlgItem(IDC_STATIC_PLUS)->ShowWindow(nShow); // + GetDlgItem(IDC_EDIT_CONVERSION)->ShowWindow(nShow); // 换算值 GetDlgItem(IDC_STATIC_CONVERSIONSHIP)->ShowWindow(nShow); // 换算关系 } // sg add 090311,根据标高样式,设置部分控件是否显示、是否可编辑 void CElevDlg::SetTextLocationByStyle() { // if (g_bHatch || g_bDote) // 地坪标高 if (g_nElevType == 0 && g_bHatch) // 建筑填充三角形标高 { GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_SHOW); // 文字居中 GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(FALSE); } else if ((g_nElevType == 1) && (g_bHatch || g_bDote || g_bHollow || g_bElevCross)) // 总图的地坪标高 { GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_SHOW); // 文字位置 GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_SHOW);// 文字位置 GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(FALSE); m_cmbTextLoc.ResetContent(); if (g_bHatch) // 填充三角形 { m_cmbTextLoc.AddString(_T("上部")); m_cmbTextLoc.AddString(_T("右侧")); m_cmbTextLoc.AddString(_T("右上")); GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE); } else if (g_bDote) // 圆点 { m_cmbTextLoc.AddString(_T("上部")); m_cmbTextLoc.AddString(_T("右侧")); GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE); } else if (g_bElevCross) // 十字 { m_cmbTextLoc.AddString(_T("上部")); m_cmbTextLoc.AddString(_T("右侧")); m_cmbTextLoc.AddString(_T("右上")); GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE); } else // 空心三角形 { m_cmbTextLoc.AddString(_T("上部")); GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(FALSE); } int nRet = m_cmbTextLoc.FindStringExact(0, m_csTextLoc); if (nRet < 0) { nRet = 0; m_csTextLoc = _T("上部"); g_csTextLoc = m_csTextLoc; } m_cmbTextLoc.SetCurSel(nRet); } else // 普通样式 { GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_SHOW); // 文字齐线端 GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(TRUE); // 上下排列 GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(TRUE); // 左右排列 } } void CElevDlg::SetGridEnableWrite(BOOL bWrite) { // sg add 090505,处理多标高相关控件是否可编辑 if (m_bDlgType) // 绘制对话框 { GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->EnableWindow(bWrite); // 多标高 GetDlgItem(IDC_CHECK_STANDARD)->EnableWindow(bWrite); // 标高是否加括号 if (bWrite) GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); // 楼号是否加括号 else GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(bWrite); } else // 对象编辑对话框 { GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->EnableWindow(TRUE); // 多标高 GetDlgItem(IDC_CHECK_STANDARD)->EnableWindow(TRUE); // 标高是否加括号 GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); // 楼号是否加括号 } m_grid.SetReadOnly(!bWrite); if (bWrite) { m_grid.GetCol(0).SetBackColor(RGB(255, 255, 255)); m_grid.GetCol(1).SetBackColor(RGB(255, 255, 255)); // sg add 090212 } else { m_grid.GetCol(0).SetBackColor(GetSysColor(COLOR_3DFACE)); m_grid.GetCol(1).SetBackColor(GetSysColor(COLOR_3DFACE)); // sg add 090212 } // sg modify 090331,解决无模式对话框下,表格无法完全刷新的问题,丢失左侧向下箭头的问题 // m_grid.Invalidate(); m_grid.RecalcLayout(); } // sg add 090222,根据对象,填充表格内容 void CElevDlg::InitGridAndTextFromEnt() { CString csTexts1 = m_pElev->GetText(), // 基线上方文字 csTexts2 = m_pElev->GetLowText(); // 基线下方文字 XStringList lstCol1, // 第一列:标高、绝对标高 lstCol2; // 第二列:楼层号、相对标高 while (!csTexts1.IsEmpty()) { // sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$” // int nResult = csTexts1.Find(_T('/')), int nResult = csTexts1.Find(_T('$')), nLength = csTexts1.GetLength(); nResult = (nResult < 0) ? nLength : nResult; CString csRow = csTexts1.Left(nResult); // 获取表格中一行的文字 int nNext = nLength - nResult - 1; if (nNext > 0) csTexts1 = csTexts1.Right(nNext); else csTexts1 = _T(""); int nRet = csRow.Find(_T('&'), 0); if (nRet > 0) // 含有楼层号/相对标高 { CString csFloor = csRow.Right(csRow.GetLength() - nRet - 1); csRow = csRow.Left(nRet); lstCol2.Append(tstrnew(csFloor)); // 存入lstCol2 } else // 没有楼层号/相对标高 lstCol2.Append(tstrnew(_T(""))); // 存入空信息,保证两列数量、内容对应 lstCol1.Append(tstrnew(csRow)); // 楼层标高/绝对标高 } int nLen1 = lstCol1.Length(), nLen2 = lstCol2.Length(); if (nLen1 == 0) // 没有标注任何内容,表格中,至少会有一行内容 { lstCol1.Append(tstrnew(_T(""))); lstCol2.Append(tstrnew(_T(""))); nLen1++; nLen2++; } if (g_nElevType == 0) // 建筑,填充表格 { m_grid.SetRowNum(nLen1); for (long i = 0; i < nLen1; i++) m_grid[i][0].SetText(lstCol1[i]); // 楼层标高 for (i = 0; i < nLen2; i++) m_grid[i][1].SetText(lstCol2[i]); // 楼层号/标高说明 } else // 总图,只取第一行,填充编辑框 { g_csAbsoluteElev = lstCol1[0]; // 绝对标高 g_csRelativeElev = lstCol2[0]; // 相对标高 if (g_nElevTextAlign == 0 && g_bCommonElev) // 总图标高,上下排列 { g_csRelativeElev = csTexts2; } } } void CElevDlg::OnActivate(UINT nState, CWnd*pWndOther, BOOL bMinimized) { if (nState == WA_INACTIVE && m_bUpdateText) { m_grid.EndEditCell(); // 强制更新grid UpdateEntText(); } } void CElevDlg::UpdataEnt() // 更新对象中,除文字内容以外的属性 { double dSize = GlobalFunc::DocGetEleTriangleSize(); // if (g_bHatch) // 填充样式 if (g_bHatch || g_bHollow) // sg modify 120608,填充样式、三角形空心标高符号 // m_pElev->SetTextBaseLen(3); // sg modify 090212,读取全局设置 m_pElev->SetTextBaseLen(dSize); // else // modified by whl on 060110 else if (m_bModeless) m_pElev->SetTextBaseLen(m_pElev->GetDefaultTextBaseLen()); else // sg add 090320,对象编辑时,只在默认基线≤dSize时,做处理 { double dTextBaseLen = m_pElev->GetTextBaseLen(); if (dTextBaseLen < dSize + 1.0E-5) { dTextBaseLen = m_pElev->GetDefaultTextBaseLen(); m_pElev->SetTextBaseLen(dTextBaseLen); } } m_pElev->SetFilled(g_bHatch); m_pElev->SetDote(g_bDote); // sg add 090209,圆点样式 m_pElev->SetHollowTriangle(g_bHollow); // // sg add 120608,三角形空心标高符号 m_pElev->SetBaseLine(g_bHasBase); m_pElev->SetLeader(g_bHasLeader); m_pElev->SetCross(g_bElevCross); if (m_bModeless) // modified by whl on 060110 { m_pElev->SetBaseLen(g_nBaseLen); m_pElev->SetLeaderLen(g_nLeaderLen); } // sg add 090212,字高、文字样式 AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_csFontStyle); if (!idTextStyle) return; m_pElev->SetTextStyleId(idTextStyle); m_pElev->SetTextHeight(_tstof(m_csTextHeight)); m_pElev->SetStandard(g_bStandard); // sg add 090212,规范样式、添加括号、文字在线端 m_pElev->SetParentheses(g_bParentheses); m_pElev->SetAtLineSide(g_bElevSideText); m_pElev->SetArchElev(g_nElevType == 0); // sg add 090311,标高类型,是否上下排列 // if (g_bHatch || g_bDote) if (g_bHatch && g_nElevType == 0) // 只有建筑里的填充标高,才用数据g_bElevMidText { m_pElev->SetUpDownTextElev(g_bElevMidText); m_pElev->SetNewSitePlanElev(FALSE); } else if ((g_nElevType == 1) && (g_bHatch || g_bDote || g_bHollow || g_bElevCross)) { m_pElev->SetUpDownTextElev(g_csTextLoc == _T("上部")); m_pElev->SetNewSitePlanElev(g_csTextLoc == _T("右上")); } else m_pElev->SetUpDownTextElev(g_nElevTextAlign == 0); } void CElevDlg::UpdateEntText() // 根据表格、编辑框内内容更新对象 { UpdateData(TRUE); m_grid.EndEditCell(); // 强制更新grid TString sRes; // 基线上方文字 TString sLowText; // 基线下方文字 if (g_nElevType == 0) // 建筑,从表格里读取 { if (!m_grid.IsEmpty()) { // sg modify 090222,增加楼层号 // sRes << m_grid[0L][0].GetText(); // for (long i=1 ; iSetText(sRes); // 基线上方文字 m_pElev->SetLowText(sLowText); // sg add 090223,基线下方文字 if (g_iPrecision == 1) // 精确度 m_pElev->SetPrec2(FALSE); else m_pElev->SetPrec2(TRUE); } // 动态标注时,更新标高,TElevEdJig::update中调用 void CElevDlg::UpdateGrid(double newValue) { // if (g_bHightWrite) // sg modify 090312,只对自动建筑标高有效 if (g_nElevType == 1 || g_bHightWrite) return; double hight = newValue; CString sPrecision, ss; switch (g_iPrecision) { case 0: sPrecision = _T("%.2f"); m_pElev->SetPrec2(TRUE); break; case 1: sPrecision = _T("%.3f"); m_pElev->SetPrec2(FALSE); break; default: break; } ss.Format(sPrecision, hight); m_grid[long(0)][0].SetText(ss); m_grid[long(0)][0].Refresh(); // 按精确度给表格刷新 m_grid.FitLastCol(); // 内部数据精度更高一些,原误差很大! ss.Format(_T("%.5f"), hight); m_grid[long(0)][0].SetText(ss); // 内部修改,不刷新到表格中 acedGetAcadDwgView()->SetFocus(); m_pElev->SetText(ss); } // 保留第一个标高的首行内容,方便进行连续绘制 void CElevDlg::UpDateGridToStar() { // TString ss00, ss01; // if (!m_grid.IsEmpty()) // sg add 090310,防止表格行被全部删除 // { // ss00 = m_grid[0L][0].GetText(); // ss01 = m_grid[0L][1].GetText(); // } // // m_grid.Clear(); // m_grid.SetRowNum(1); // m_grid[0L][0].SetText(ss00); // m_grid[0L][1].SetText(ss01); g_szGridText.Clear(); // sg add 090313,记忆表格内容 long lRows = m_grid.GetRowNum(); for (long l = 0; l < lRows; l++) { TString sCol1 = m_grid[l][0].GetText(), sCol2 = m_grid[l][1].GetText(); if (l != 0) // sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$” // g_szGridText << _T("/"); g_szGridText << _T("$"); g_szGridText << sCol1; if (sCol2.Length() > 0) g_szGridText << _T("&") << sCol2; } } void CElevDlg::SetEntPoint(AecXDbSymbElevation * pElev) // 关联对像 { m_pElev = pElev; } BEGIN_MESSAGE_MAP(CElevDlg, CModelessDialog) //ON_BN_CLICKED(IDC_HATCH, OnCheckHatch) //ON_BN_CLICKED(IDC_BASE_LINE, OnCheckBaseLine) //ON_BN_CLICKED(IDC_LERDER, OnCheckLeader) ON_BN_CLICKED(IDC_BUTTON1, OnPickHatch) ON_BN_CLICKED(IDC_BUTTON2, OnPickBaseLine) ON_BN_CLICKED(IDC_BUTTON3, OnPickLeadLine) ON_BN_CLICKED(IDC_BUTTON4, OnContinueDim) ON_BN_CLICKED(IDC_BUTTON5, OnOrder) ON_BN_CLICKED(IDC_CHECKWRITER, OnPickCheckWriter) ON_CBN_SELENDCANCEL(IDC_COMBO1, OnPrecision) ON_WM_CLOSE() ON_WM_DESTROY() ON_WM_ACTIVATE() ON_BN_CLICKED(IDC_BUTTON6, OnPickDote) ON_BN_CLICKED(IDC_BUTTON_TEXTHEIGHT, OnButtonTextHeight) ON_CBN_SELCHANGE(IDC_COMBO_HEIGHT, OnSelchangeComboTextHeight) ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE, OnSelchangeComboFongstyle) ON_BN_CLICKED(IDC_CHECK_STANDARD, OnBnClickedStandard) ON_BN_CLICKED(IDC_CHECK_RIGHTTEXT, OnBnClickedSideText) ON_BN_CLICKED(IDC_CHECK_PARENTHESES, OnBnClickedParentheses) ON_CBN_EDITCHANGE(IDC_COMBO_HEIGHT, OnEditchangeComboTextHeight) ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_ELEVTYPE, OnSelchangeTabElevType) ON_BN_CLICKED(IDC_CHECK_DIMZERO, OnBnClickedUseConversion) ON_EN_CHANGE(IDC_EDIT_CONVERSION, OnChangeEditConversion) ON_BN_CLICKED(IDC_RADIO_UPDOWN, OnRadioElevAlignType1) ON_BN_CLICKED(IDC_BUTTON7, OnPickCommonElev) ON_BN_CLICKED(IDC_RADIO_LEFTRIGHT, OnRadioElevAlignType2) ON_BN_CLICKED(IDC_CHECK_UPTEXT, OnBnClickedUpText) ON_EN_CHANGE(IDC_EDIT_ABSOLUTEELEV, OnChangeEditAbsoluteElev) ON_EN_CHANGE(IDC_EDIT_RELATIVEELEV, OnChangeEditRelativeElev) ON_BN_CLICKED(IDC_BUTTON_ADDMUTIELEV, OnButtonAddMutiElev) ON_BN_CLICKED(IDC_BUTTON_HOLLOW, OnPickHollow) ON_BN_CLICKED(IDC_BUTTON_ELEV_CROSS, OnPickCross) ON_CBN_SELCHANGE(IDC_COMBO_SITEPLAN_TEXTLOC, OnSelchangeComboTextLoc) END_MESSAGE_MAP() void CElevDlg::OnClose() { if (m_bDlgType) { CElevDlg::g_pElevDlg = NULL; acedPostCommand(_T("\33\33")); DestroyWindow(); } else CModelessDialog::OnClose(); } void CElevDlg::OnDestroy() { if (m_pElev) { m_pElev = NULL; } CModelessDialog::OnDestroy(); } void CElevDlg::OnOK() { // sg add 090305,对象编辑时,以只读方式打开;更新数据时,升级到写打开 m_pElev->upgradeOpen(); // sg add 090507,防止切换到总图标高、上下排列后,文字基线不够长 double dOld = m_pElev->GetTextBaseLen(TRUE); UpdataEnt(); // 更新其他 UpdateEntText(); // 更新对象文字 XString sText = m_pElev->GetLowText(); // sg add 090507 //if (!m_pElev->IsArchElev() && !m_pElev->IsFilled() && // !m_pElev->IsDote() && m_pElev->IsUpDownTextElev() && !!sText) if (!m_pElev->IsArchElev() && !m_pElev->IsFilled() && !m_pElev->IsDote() && !m_pElev->IsHollowTriangle() && m_pElev->IsUpDownTextElev() && !!sText) { double dNew = m_pElev->GetDefaultTextBaseLen(TRUE); if (dNew > dOld + 1.0E-5) m_pElev->SetTextBaseLen(dNew, TRUE); } m_pElev->downgradeOpen(); // sg add 090305 CDialog::OnOK(); } void CElevDlg::OnPickCheckWriter() // 手动输入 { UpdateData(TRUE); if (m_bHatchTou) // JIG基线、引线,不可以切换手动输入与否的状态 { m_Rider.SetCheck(g_bHightWrite); UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); return; } if (m_Rider.GetCheck() == 0) { CElevDlg::g_pElevDlg->SetGridEnableWrite(FALSE); g_bHightWrite = FALSE; TString ss00; if (!m_grid.IsEmpty()) m_grid[long(0)][0].SetText(ss00); m_grid.Clear(); m_grid.SetRowNum(1); m_grid[long(0)][0].SetText(ss00); } else { CElevDlg::g_pElevDlg->SetGridEnableWrite(TRUE); g_bHightWrite = TRUE; } } void CElevDlg::OnPrecision() // add by zkm,精确度 { g_iPrecision = m_ComBox.GetCurSel(); } void CElevDlg::OnPickHatch() // 三角形填充样式 { if (m_bHatchTou) // JIG基线、引线,不可以修改样式 { g_bHatch = FALSE; m_ButHatch.SetCheck(0); } else { g_bHatch = 1 - g_bHatch; if (g_bHatch) { g_bHasBase = FALSE; m_ButBaseLine.SetCheck(0); g_bHasLeader = FALSE; m_ButLeadLine.SetCheck(0); g_bDote = FALSE; // sg add 090209,增加圆点样式 m_ButDote.SetCheck(0); g_bHollow = FALSE;// sg add 120608,三角形空心标高符号 m_ButHollow.SetCheck(0); g_bCommonElev = FALSE; // sg add 090226,增加普通样式 m_ButCommon.SetCheck(0); g_bElevCross = FALSE;// 十字标高符号 m_ButCross.SetCheck(0); } else // sg add 090301,所有按钮都不点取时,自动选普通样式 { // if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader) if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader) { g_bCommonElev = TRUE; m_ButCommon.SetCheck(1); } } SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题 UpdateData(FALSE); if (m_bDlgType) UpdataEnt(); } acedGetAcadDwgView()->SetFocus(); } // sg add 120608,三角形空心标高符号 void CElevDlg::OnPickHollow() { if (m_bHatchTou) // JIG基线、引线,不可以修改样式 { g_bHollow = FALSE; m_ButHollow.SetCheck(0); } else if (g_nElevType == 0) // 建筑图不支持该样式 { g_bHollow = FALSE; m_ButHollow.SetCheck(0); } else { g_bHollow = 1 - g_bHollow; if (g_bHollow) { g_bHatch = FALSE; m_ButHatch.SetCheck(0); g_bHasBase = FALSE; m_ButBaseLine.SetCheck(0); g_bHasLeader = FALSE; m_ButLeadLine.SetCheck(0); g_bDote = FALSE; m_ButDote.SetCheck(0); g_bCommonElev = FALSE; m_ButCommon.SetCheck(0); g_bElevCross = FALSE;// 十字标高符号 m_ButCross.SetCheck(0); } else { if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader) { g_bCommonElev = TRUE; m_ButCommon.SetCheck(1); } } SetTextLocationByStyle(); UpdateData(FALSE); if (m_bDlgType) UpdataEnt(); } acedGetAcadDwgView()->SetFocus(); } //十字标高符号 void CElevDlg::OnPickCross() { if (m_bHatchTou) // JIG基线、引线,不可以修改样式 { g_bElevCross = FALSE; m_ButCross.SetCheck(0); } else if (g_nElevType == 0) // 建筑图不支持该样式 { g_bElevCross = FALSE; m_ButCross.SetCheck(0); } else { g_bElevCross = 1 - g_bElevCross; if (g_bElevCross) { g_bHatch = FALSE; m_ButHatch.SetCheck(0); g_bHasBase = FALSE; m_ButBaseLine.SetCheck(0); g_bHasLeader = FALSE; m_ButLeadLine.SetCheck(0); g_bDote = FALSE; m_ButDote.SetCheck(0); g_bCommonElev = FALSE; m_ButCommon.SetCheck(0); g_bHollow = FALSE; m_ButHollow.SetCheck(0); } else { if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader && !g_bElevCross) { g_bCommonElev = TRUE; m_ButCommon.SetCheck(1); } } SetTextLocationByStyle(); UpdateData(FALSE); if (m_bDlgType) UpdataEnt(); } acedGetAcadDwgView()->SetFocus(); } void CElevDlg::OnPickDote() // sg add 090209,圆点样式 { if (m_bHatchTou) // JIG基线、引线,不可以修改样式 { g_bDote = FALSE; m_ButDote.SetCheck(0); } else if (g_nElevType == 0) // 建筑图不支持该样式 { g_bDote = FALSE; m_ButDote.SetCheck(0); } else { g_bDote = 1 - g_bDote; if (g_bDote) { g_bHatch = FALSE; m_ButHatch.SetCheck(0); g_bCommonElev = FALSE; m_ButCommon.SetCheck(0); g_bHasBase = FALSE; m_ButBaseLine.SetCheck(0); g_bHasLeader = FALSE; m_ButLeadLine.SetCheck(0); g_bHollow = FALSE;// sg add 120608,三角形空心标高符号 m_ButHollow.SetCheck(0); g_bElevCross = FALSE;// 十字标高符号 m_ButCross.SetCheck(0); } else // sg add 090301,所有按钮都不点取时,自动选普通样式 { // if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader) if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader) { g_bCommonElev = TRUE; m_ButCommon.SetCheck(1); } } SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题 UpdateData(FALSE); if (m_bDlgType) UpdataEnt(); } acedGetAcadDwgView()->SetFocus(); } void CElevDlg::OnPickCommonElev() // sg add 090226,普通样式 { if (m_bHatchTou) // JIG基线、引线,不可以修改样式 { g_bCommonElev = FALSE; m_ButCommon.SetCheck(0); } else { g_bCommonElev = 1 - g_bCommonElev; if (g_bCommonElev) { g_bHatch = FALSE; m_ButHatch.SetCheck(0); g_bDote = FALSE; m_ButDote.SetCheck(0); g_bHasBase = FALSE; m_ButBaseLine.SetCheck(0); g_bHasLeader = FALSE; m_ButLeadLine.SetCheck(0); g_bHollow = FALSE;// sg add 120608,三角形空心标高符号 m_ButHollow.SetCheck(0); g_bElevCross = FALSE;// 十字标高符号 m_ButCross.SetCheck(0); } else // sg add 090301,所有按钮都不点取时,自动选普通样式 { // if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader) if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader) { g_bCommonElev = TRUE; m_ButCommon.SetCheck(1); } } SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题 UpdateData(FALSE); if (m_bDlgType) UpdataEnt(); } acedGetAcadDwgView()->SetFocus(); } void CElevDlg::OnPickBaseLine() // add by zkm,带基线 { if (m_bHatchTou) { // g_bHasBase = TRUE; // sg modify 090303,JIG引线、基线时,基线按钮不可用 // m_ButBaseLine.SetCheck(1); m_ButBaseLine.SetCheck(g_bHasBase); UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); return; } if (g_nElevType == 1) // sg add 090303,总图不支持该样式 { g_bHasBase = FALSE; m_ButBaseLine.SetCheck(0); acedGetAcadDwgView()->SetFocus(); return; } g_bHasBase = 1 - g_bHasBase; if (g_bHasBase) { g_bHatch = FALSE; m_ButHatch.SetCheck(0); g_bDote = FALSE; // sg add 090209,增加圆点样式 m_ButDote.SetCheck(0); g_bHollow = FALSE;// sg add 120608,三角形空心标高符号 m_ButHollow.SetCheck(0); g_bCommonElev = FALSE; // sg add 090226,增加普通样式 m_ButCommon.SetCheck(0); g_bElevCross = FALSE;// 十字标高符号 m_ButCross.SetCheck(0); } else // sg add 090301,所有按钮都不点取时,自动选普通样式 { // if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader) if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader) { g_bCommonElev = TRUE; m_ButCommon.SetCheck(1); } } SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题 acedGetAcadDwgView()->SetFocus(); if (m_bDlgType) UpdataEnt(); } void CElevDlg::OnPickLeadLine() // add by zkm,带引线 { if (m_bHatchTou) { // g_bHasLeader = TRUE; // sg modify 090303,JIG引线、基线时,基线按钮不可用 // m_ButLeadLine.SetCheck(1); m_ButLeadLine.SetCheck(g_bHasLeader); UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); return; } if (g_nElevType == 1) // sg add 090303,总图不支持该样式 { g_bHasLeader = FALSE; m_ButLeadLine.SetCheck(0); acedGetAcadDwgView()->SetFocus(); return; } g_bHasLeader = 1 - g_bHasLeader; if (g_bHasLeader) { g_bHatch = FALSE; m_ButHatch.SetCheck(0); g_bDote = FALSE; // sg add 090209,增加圆点样式 m_ButDote.SetCheck(0); g_bHollow = FALSE;// sg add 120608,三角形空心标高符号 m_ButHollow.SetCheck(0); g_bCommonElev = FALSE; // sg add 090226,增加普通样式 m_ButCommon.SetCheck(0); g_bElevCross = FALSE;// 十字标高符号 m_ButCross.SetCheck(0); } else // sg add 090301,所有按钮都不点取时,自动选普通样式 { // if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader) if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader) { g_bCommonElev = TRUE; m_ButCommon.SetCheck(1); } } SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题 acedGetAcadDwgView()->SetFocus(); if (m_bDlgType) UpdataEnt(); } void CElevDlg::OnContinueDim() // add by zkm,连续标注 { // g_bContinue = 1 - g_bContinue; // sg delete 090301,8.0起必须连续标注 // acedGetAcadDwgView()->SetFocus(); } void CElevDlg::OnOrder() // add by zkm,自动对齐 { g_bOrder = 1 - g_bOrder; acedGetAcadDwgView()->SetFocus(); } void CElevDlg::SetOrderFa(BOOL bOrder) // 未使用 { m_bOrderTou = bOrder; acedGetAcadDwgView()->SetFocus(); } void CElevDlg::OnCheckHatch() // 未使用 { g_bHatch = 1 - g_bHatch; if (g_bHatch) { g_bHasBase = g_bHasLeader = FALSE; UpdateData(FALSE); } } void CElevDlg::OnCheckBaseLine() // 未使用 { g_bHasBase = 1 - g_bHasBase; if (g_bHasBase) { g_bHatch = FALSE; UpdateData(FALSE); } } void CElevDlg::OnCheckLeader() // 未使用 { g_bHasLeader = 1 - g_bHasLeader; if (g_bHasLeader) { g_bHatch = FALSE; UpdateData(FALSE); } } void CElevDlg::OnButtonTextHeight() // 字高按钮 { if (m_bModeless) { GlobalFunc::PostCommand(_T("` "), false); } else { GetTextHeight(); acedGetAcadDwgView()->SetFocus(); } } void CElevDlg::GetTextHeight() { XPushAutoHide noAutoHide(this); UpdateData(TRUE); double nHeight = _tstof(m_csTextHeight) * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), nHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { nHeight /= GlobalFunc::DocGetPScale(); m_csTextHeight.Format(_T("%.1f"), nHeight); } CompleteEditorCommand(); g_dTextHeight = _tstof(m_csTextHeight); UpdateData(FALSE); } void CElevDlg::OnSelchangeComboTextHeight() // 字高Combo { UpdateData(TRUE); int nIndex = m_cmbTextHeight.GetCurSel(); if (nIndex >= 0) m_cmbTextHeight.GetLBText(nIndex, m_csTextHeight); g_dTextHeight = _tstof(m_csTextHeight); if (m_bDlgType) // sg add 090305 UpdataEnt(); } void CElevDlg::OnEditchangeComboTextHeight() { UpdateData(TRUE); m_cmbTextHeight.GetWindowText(m_csTextHeight); g_dTextHeight = _tstof(m_csTextHeight); if (m_bDlgType) UpdataEnt(); } void CElevDlg::OnSelchangeComboFongstyle() // 字体样式 { UpdateData(TRUE); int nRet = m_cmbStyleName.GetCurSel(); if (nRet >= 0) m_cmbStyleName.GetLBText(nRet, m_csFontStyle); g_csFontStyle = m_csFontStyle; AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_csFontStyle); if (!idTextStyle) return; OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle); ASSERT(pStyle); CString strTemp; strTemp.Format(_T("%.1f"), pStyle->textSize()); // 读文字风格的字高 if (_tstof(strTemp) > 1.0E-3) m_csTextHeight = strTemp; OPENOBJ_END(); g_dTextHeight = _tstof(m_csTextHeight); UpdateData(FALSE); m_cmbStyleName.SetCurSel(m_cmbStyleName.FindStringExact(0, m_csFontStyle)); if (m_bDlgType) // sg add 090305 UpdataEnt(); } void CElevDlg::OnSelchangeComboTextLoc() // 文字位置 { UpdateData(TRUE); int nRet = m_cmbTextLoc.GetCurSel(); if (nRet >= 0) m_cmbTextLoc.GetLBText(nRet, m_csTextLoc); g_csTextLoc = m_csTextLoc; if (m_bDlgType) UpdataEnt(); } void CElevDlg::OnBnClickedSideText() // 文字是否在线端 { UpdateData(TRUE); if (m_bDlgType) // sg add 090305 UpdataEnt(); } void CElevDlg::OnBnClickedUpText() // sg add 090311,文字是否居中 { UpdateData(TRUE); if (m_bDlgType) UpdataEnt(); } void CElevDlg::OnBnClickedStandard() // 是否规范样式 { UpdateData(TRUE); // 控制“添加括号”是否可改 GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); UpdateData(FALSE); if (m_bDlgType) // sg add 090305 UpdataEnt(); } void CElevDlg::OnBnClickedParentheses() // 是否添加括号 { UpdateData(TRUE); if (m_bDlgType) // sg add 090305 UpdataEnt(); } // sg add 090220,切换属性页面 void CElevDlg::OnSelchangeTabElevType(NMHDR* pNMHDR, LRESULT* pResult) { if (IsSitePlanDlg()) { return; } if (m_bHatchTou) // JIG基线、引线,不可以切换到总图页面 { g_nElevType = 0; m_Tab.SetCurSel(g_nElevType); UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); return; } g_nElevType = m_Tab.GetCurSel(); SetTabCurPage1(); // 调整控件的显示 SetTabCurPage2(); // 强制规定 SetTextLocationByStyle(); // 设置显示哪种文字与符号的位置关系设置方式 g_iPrecision = 1 - g_nElevType; // 调整默认精确度,建筑.000,总图.00 m_ComBox.SetCurSel(g_iPrecision); if (m_bDlgType) // sg add 090305 m_pElev->SetPrec2(g_iPrecision == 0); if (!m_bDlgType) // 对象编辑对话框,更新表格内容 InitGridAndTextFromEnt(); else // sg add 090305,绘制对话框 UpdataEnt(); *pResult = 0; } void CElevDlg::OnBnClickedUseConversion() // sg add 090222,是否应用换算关系 { if (g_nElevType == 0) // 只对总图有效,OnSelchangeTabElevType函数中会调用 return; UpdateData(TRUE); SetShowByUseConversion(); // 处理控件显示 CalAbsoluteElev(); // 根据换算关系、相对标高修改绝对标高 UpdateData(FALSE); } void CElevDlg::OnChangeEditAbsoluteElev() // sg add 090312,改变绝对标高 { // 保留旧值,防止输入错误。绝对标高只允许输入数字,小数点,负号 CString csTmp = g_csAbsoluteElev; UpdateData(TRUE); // sg modify 120608,只有在自动换算的时候,才要求绝对标高的地方是数字 // if (!IsDigitEle(g_csAbsoluteElev)) //tyj modify 20160826:绝对标高不能有空格 if (g_csAbsoluteElev.Find(_T(" ")) != -1) { g_csAbsoluteElev.Remove(' '); } if (g_bUseConversion && !IsDigitEle(g_csAbsoluteElev)) g_csAbsoluteElev = csTmp; CalRelativeElev(); // 计算相对标高 UpdateData(FALSE); } void CElevDlg::OnChangeEditRelativeElev() // sg add 090312,改变相对标高 { UpdateData(TRUE); CalAbsoluteElev(); // 计算绝对标高 UpdateData(FALSE); } void CElevDlg::OnChangeEditConversion() // sg add 090223,改变换算关系 { // 保留旧值,防止输入错误。换算关系值只允许输入数字,小数点,负号 CString csTmp = g_csElevConversion; UpdateData(TRUE); if (!IsDigitEle(g_csElevConversion)) g_csElevConversion = csTmp; CalAbsoluteElev(); // 计算绝对标高 UpdateData(FALSE); } void CElevDlg::CalAbsoluteElev() // sg add 090223,用换算关系、相对标高,计算绝对标高 { if (g_nElevType == 0 || !g_bUseConversion) // 只对自动换算的总图标高有效 return; CString csRelativeElev = g_csRelativeElev; // 相对标高 csRelativeElev.TrimLeft(); csRelativeElev.TrimRight(); BOOL bFlag = csRelativeElev.IsEmpty(); if (bFlag || !IsDigitEle(csRelativeElev)) // 空,文字注释 csRelativeElev = _T("0"); CString csPrecision; if (g_iPrecision == 0) // .00 csPrecision = _T("%.2f"); else // .000 csPrecision = _T("%.3f"); double dRelativeElev = _tstof(csRelativeElev), dAbsoluteElev = dRelativeElev + _tstof(g_csElevConversion); g_csAbsoluteElev.Format(csPrecision, dAbsoluteElev); // 绝对标高 if (bFlag) // 相对标高不能为空,但可以为非数字 g_csRelativeElev.Format(csPrecision, dRelativeElev); } void CElevDlg::CalRelativeElev() // sg add 090312,用换算关系、绝对标高,计算相对标高 { if (g_nElevType == 0 || !g_bUseConversion) // 只对自动换算的总图标高有效 return; CString csAbsoluteElev = g_csAbsoluteElev; // 绝对标高 csAbsoluteElev.TrimLeft(); csAbsoluteElev.TrimRight(); BOOL bFlag = csAbsoluteElev.IsEmpty(); if (bFlag) // 空 csAbsoluteElev = _T("0"); CString csPrecision; if (g_iPrecision == 0) // .00 csPrecision = _T("%.2f"); else // .000 csPrecision = _T("%.3f"); double dAbsoluteElev = _tstof(csAbsoluteElev), dRelativeElev = dAbsoluteElev - _tstof(g_csElevConversion); // 相对标高 g_csRelativeElev.Format(csPrecision, dRelativeElev); if (bFlag) // 绝对标高不能为空 g_csAbsoluteElev.Format(csPrecision, dAbsoluteElev); } BOOL CElevDlg::IsDigitEle(const XString &sText) // sg add 090223,判断输入内容是否是数字 { BOOL bRet = TRUE; CString csText = (LPCTSTR)sText; int nLen = csText.GetLength(); for (int i = 0; i < nLen; i++) { if (_istdigit(csText[i]) || csText[i] == _T('.')) // 数字、小数点 continue; if (i == 0 && csText[i] == _T('-')) // 负号 continue; bRet = FALSE; break; } return bRet; } void CElevDlg::OnRadioElevAlignType1() // 上下排列 { UpdateData(TRUE); if (g_nElevTextAlign == 0) // 上下排列 { g_bElevSideText = TRUE; // 强制“文字齐线端” GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE); // “文字齐线端”不可改 } else // 左右排列 GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE); UpdateData(FALSE); if (m_bDlgType) // sg add 090305,如果是绘制对话框,更新对象 UpdataEnt(); } void CElevDlg::OnRadioElevAlignType2() // 左右排列 { UpdateData(TRUE); if (g_nElevTextAlign == 0) // 上下排列 { g_bElevSideText = TRUE; // 强制“文字齐线端” GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE); // “文字齐线端”不可改 } else // 左右排列 GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE); UpdateData(FALSE); if (m_bDlgType) // sg add 090305,如果是绘制对话框,更新对象 UpdataEnt(); } void CElevDlg::OnButtonAddMutiElev() // sg add 090401,调用自动多层标高 { /*CTemporaryResourceOverride vTemp; CEditMutiElevDlg dlg; dlg.SetPrecision(g_iPrecision != 0); // 设置精确度 CString csCell01; // 首层楼层高 XStringList lstElevs; // 全部标高 long lRows = m_grid.GetRowNum(); for (long l = 0; l < lRows; l++) { if (l == 0) csCell01 = m_grid[l][1l].GetText(); TString sCol1 = m_grid[l][0l].GetText(); lstElevs.Append(tstrnew(sCol1)); } dlg.SetCell01(csCell01); // 设置首层楼层高 dlg.SetKnownElev(lstElevs); // 设置全部标高 if (dlg.DoModal() == IDOK) { XStringList lstCol1, lstCol2; dlg.GetGridTexts(lstCol1, lstCol2); int nLen = lstCol1.Length(); m_grid.Clear(); m_grid.SetRowNum(nLen); for (long i = 0; i < nLen; i++) { m_grid[i][0l].SetText(lstCol1[i]); // 楼层标高 m_grid[i][1l].SetText(lstCol2[i]); // 楼层号/标高说明 } g_bHightWrite = TRUE; SetGridEnableWrite(g_bHightWrite); }*/ } // sg add 120609,下面这些函数用于提供外界与上面定义的静态变量交互使用 BOOL CElevDlg::IsHightWrite() const { return g_bHightWrite; } BOOL CElevDlg::IsHasBase() const { return g_bHasBase; } BOOL CElevDlg::IsHasLeader() const { return g_bHasLeader; } BOOL CElevDlg::IsOrder() const { return g_bOrder; } void CElevDlg::SetLeaderLen(double dLen) { g_nLeaderLen = dLen; } void CElevDlg::SetBaseLen(double dLen) { g_nBaseLen = dLen; } void CElevDlg::SetSitePlanDlg(BOOL bSitePlan) { m_bSitePlanDlg = TRUE; return; /*m_bSitePlanDlg = bSitePlan; if (g_bFirstExecute) { if (bSitePlan) g_iPrecision = 0; else g_iPrecision = 1; g_bFirstExecute = FALSE; }*/ } #pragma endregion #pragma region CLeaderDlg extern double g_nHeight; static int g_nArrowStyle = 1; static AecXDbSymbMultiLeader::TArrowStyle g_ArrowStyle[] = { AecXDbSymbMultiLeader::kArrow, AecXDbSymbMultiLeader::kDote, AecXDbSymbMultiLeader::kCrossing, AecXDbSymbMultiLeader::kNone }; CString CLeaderDlg::g_csArrowSize = _T("3.0"); CString CLeaderDlg::m_strInputUp = _T(""); CString CLeaderDlg::m_strInputDown = _T(""); // add by cwk on 060706 extern CString g_sLeadFixAngle; extern BOOL g_bLeadFixAngle; //add by lgy 20120206 固定转角不能记忆 CString CLeaderDlg::m_sFixAngle = _T("45"); BOOL CLeaderDlg::m_bFixAngle = FALSE; BOOL CLeaderDlg::m_bContinue = TRUE; // Add by lcf on 2005-06-29 BOOL CLeaderDlg::m_bAllPtsOnLine = FALSE; // sg add 090327 int CLeaderDlg::m_nTextAlign = 2; // sg add 090402 int CLeaderDlg::s_iLeaderStyle = 0; IMPLEMENT_DYNAMIC(CLeaderDlg, CBaseTextDlg) CLeaderDlg::CLeaderDlg(BOOL bEdit, CWnd* pParent /*=NULL*/) : CBaseTextDlg(CLeaderDlg::IDD, pParent), m_bEditObj(bEdit) { //注释 by lgy 20120206 固定转角不能记忆 // add by cwk on 060706 //m_sFixAngle = g_sLeadFixAngle; //m_bFixAngle = g_bLeadFixAngle; } CLeaderDlg::CLeaderDlg(BOOL bEdit, UINT resID, CWnd* pParent /*=NULL*/) : CBaseTextDlg(resID, pParent), m_bEditObj(bEdit) { //注释 by lgy 20120206 固定转角不能记忆 // add by cwk on 060706 //m_sFixAngle = g_sLeadFixAngle; //m_bFixAngle = g_bLeadFixAngle; } void CLeaderDlg::DoDataExchange(CDataExchange* pDX) { CBaseTextDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLeaderDlg) // sg modify 090507,仿照图名标注,试着解决“对象编辑中,有时候文字显示有问题”的BUG if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_COMBO_INPUTTEXT, m_strInputUp); DDX_CBString(pDX, IDC_COMBO_INPUTTEXT1, m_strInputDown); } else { GetDlgItem(IDC_COMBO_INPUTTEXT)->SetWindowText(m_strInputUp); GetDlgItem(IDC_COMBO_INPUTTEXT1)->SetWindowText(m_strInputDown); } DDX_Control(pDX, IDC_COMBO_INPUTTEXT, m_comboInputText); DDX_Control(pDX, IDC_COMBO_INPUTTEXT1, m_comboInputText1); DDX_Text(pDX, IDC_EDIT1, m_sFixAngle); DDX_CBIndex(pDX, IDC_COMBO_STYLE, g_nArrowStyle); DDX_CBString(pDX, IDC_ARROW_SIZE, g_csArrowSize); if (pDX->m_bSaveAndValidate && _tstof(g_csArrowSize) < 1.0E-3) pDX->Fail(); DDX_Check(pDX, IDC_CONTINUE, m_bContinue); DDX_Check(pDX, IDC_CHECK1, m_bFixAngle); DDX_Check(pDX, IDC_CHECK_ONLINE, m_bAllPtsOnLine); // sg add 090327 DDX_CBIndex(pDX, IDC_COMBO_TEXTALIGN, m_nTextAlign); // sg add 090402 DDX_Check(pDX, IDC_CHK_LERDER, s_iLeaderStyle); // add by lxb on 111229 //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLeaderDlg, CBaseTextDlg) //{{AFX_MSG_MAP(CLeaderDlg) ON_BN_CLICKED(IDC_CHECK1, OnUnChangeAngle) ON_BN_CLICKED(IDC_CHECK_ONLINE, OnCHKOnline) ON_BN_CLICKED(IDC_CHK_LERDER, OnCHKLeader) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLeaderDlg message handlers BOOL CLeaderDlg::OnInitDialog() { CBaseTextDlg::OnInitDialog(); LoadHisText(); UpdateData(FALSE); GetDlgItem(IDC_COMBO_INPUTTEXT)->SetFocus(); // add by cwk on 060705 if (!m_bEditObj) { GetDlgItem(IDC_EDIT1)->EnableWindow(m_bFixAngle); } else { GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE); } UpdateData(FALSE); return FALSE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } // Modify by lcf On 2005-07-05 CWnd* CLeaderDlg::GetCurWnd() { UpdateData(TRUE); CWnd *pWnd = this->GetFocus(); CWnd *pWnd2 = NULL; if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd) { pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT); // 把CWnd 回传给基类 m_strInputText = m_strInputUp; } else if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd) { pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT1); // 把CWnd 回传给基类 m_strInputText = m_strInputDown; } else { int nSel = m_comboInputText.GetWindowTextLength(); m_comboInputText.SetEditSel(nSel, nSel); pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT); } return(pWnd2); } void CLeaderDlg::UpdateInputText() { CWnd *pWnd = this->GetFocus(); if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd) { m_strInputUp = m_strInputText; } if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd) { m_strInputDown = m_strInputText; } UpdateData(FALSE); } void CLeaderDlg::Dlg2Obj(AecXDbSymbMultiLeader *pText) { CBaseTextDlg::Dlg2Obj(pText); pText->SetText1(m_strInputUp); pText->SetText2(m_strInputDown); pText->SetArrow(g_ArrowStyle[g_nArrowStyle]); double nSize = _tstof(g_csArrowSize); if (nSize > 1.0E-3) pText->SetArrowSize(nSize); // sg add 090402,增加文字相对于基线的对齐方式 AecXDbSymbMultiLeader::TSymbMLTextAlign nAlign = (AecXDbSymbMultiLeader::TSymbMLTextAlign)(m_nTextAlign + 1); pText->SetTextAlign(nAlign); //引线平行 add by lxb on 111229 pText->SetLeaderParalle(s_iLeaderStyle); } void CLeaderDlg::Obj2Dlg(AecXDbSymbMultiLeader *pText) { CBaseTextDlg::Obj2Dlg(pText); m_strInputUp = pText->GetText1(); m_strInputDown = pText->GetText2(); AecXDbSymbMultiLeader::TArrowStyle Style = pText->GetArrow(); for (int i = 0; i < 4; i++) { if (Style == g_ArrowStyle[i]) g_nArrowStyle = i; } g_csArrowSize.Format(_T("%.1f"), pText->GetArrowSize()); // sg add 090402,增加文字相对于基线的对齐方式 m_nTextAlign = (int)(pText->GetTextAlign() - 1); //是否为引线平行 add by lxb on 111229 s_iLeaderStyle = pText->IsLeaderParall(); if (s_iLeaderStyle) m_bAllPtsOnLine = FALSE; } void CLeaderDlg::OnOK() { AddToRecent(); CBaseTextDlg::OnOK(); } // Add by lcf on 20050708 void CLeaderDlg::AddToRecent() { { UpdateData(TRUE); int len = m_lstHistory.Length(); TCHAR strTmpPath[256] = _T(""); GetTempPath(255, strTmpPath); _tcscat(strTmpPath, _T("leader.his")); #if (ARX>15) std:: #endif ofstream out(strTmpPath); if (m_strInputUp != _T("")) { out << (const char *)_AS(m_strInputUp) << "\n"; int index = m_lstHistory.Index(m_strInputUp); 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"; len = m_lstHistory1.Length(); TCHAR strTmpPath1[256] = _T(""); GetTempPath(255, strTmpPath1); _tcscat(strTmpPath1, _T("leader1.his")); #if (ARX>15) std:: #endif ofstream out1(strTmpPath1); if (m_strInputDown != _T("")) { out1 << (const char *)_AS(m_strInputDown) << "\n"; int index = m_lstHistory1.Index(m_strInputDown); if (index >= 0) { m_lstHistory1.Remove(index); len--; } if (len > maxHisList - 1) len = maxHisList - 1; } for (i = 0; i < len; i++) out1 << _AS(m_lstHistory1[i]) << "\n"; } m_lstHistory.Reset(); m_lstHistory1.Reset(); m_comboInputText.ResetContent(); m_comboInputText1.ResetContent(); LoadHisText(); } void CLeaderDlg::LoadHisText() { TCHAR strTmpPath[256] = _T(""); GetTempPath(255, strTmpPath); _tcscat(strTmpPath, _T("leader.his")); #if (ARX>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_comboInputText.AddString(m_lstHistory[m]); TCHAR strTmpPath1[256] = _T(""); GetTempPath(255, strTmpPath1); _tcscat(strTmpPath1, _T("leader1.his")); #if (ARX>15) std:: #endif ifstream in1(strTmpPath1); while (!(!in1)) { char line[256]; in1.getline(line, 255); if (!in1) break; m_lstHistory1.Append(tstrnew(TString(line))); } for (m = 0; m < m_lstHistory1.Length(); m++) m_comboInputText1.AddString(m_lstHistory1[m]); UpdateData(false); } // add by cwk on 060705 void CLeaderDlg::OnUnChangeAngle() { // TODO: Add your control notification handler code here if (!m_bEditObj) { if (m_bFixAngle) { m_bFixAngle = FALSE; GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE); } else { m_bFixAngle = TRUE; GetDlgItem(IDC_EDIT1)->EnableWindow(); } } } //add by lxb 111228 void CLeaderDlg::OnCHKOnline() { CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE)); CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER)); if (pBtn1->GetCheck() == BST_CHECKED) { pBtn2->SetCheck(BST_UNCHECKED); } UpdateData(); } //add by lxb 111228 void CLeaderDlg::OnCHKLeader() { CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE)); CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER)); if (pBtn2->GetCheck() == BST_CHECKED) { pBtn1->SetCheck(BST_UNCHECKED); } UpdateData(); } //add by lxb 111228 void CLeaderDlg::SetCheckBoxStatus(BOOL bEnableFlag) { if (!bEnableFlag) { if (s_iLeaderStyle == 1) { ((CButton*)GetDlgItem(IDC_CHECK_ONLINE))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(FALSE); } else { ((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(FALSE); } } else { ((CButton*)GetDlgItem(IDC_CHECK_ONLINE))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(TRUE); } } int CLeaderDlg::GetLeaderStyle() { return s_iLeaderStyle; } #pragma endregion #pragma region CCloudLineDlg BOOL CCloudLineDlg::m_bCommon = TRUE; int CCloudLineDlg::m_iMaxValue = 15; int CCloudLineDlg::m_iMinValue = 5; CString CCloudLineDlg::m_strEdition = _T("1"); CString CCloudLineDlg::m_strHeight = _T("5.0"); BOOL CCloudLineDlg::m_bEdit = FALSE; int CCloudLineDlg::m_iDrawLineStyle = 2; CString CCloudLineDlg::m_strType = GetTextStyleName(TS_SECTION); IMPLEMENT_DYNAMIC(CCloudLineDlg, CModelessDialog) CCloudLineDlg::CCloudLineDlg(CWnd* pParent) : CModelessDialog(CCloudLineDlg::IDD, pParent) { m_bStyeChange = false; //为了控制是否切换云线的绘制方式 } CCloudLineDlg::~CCloudLineDlg() { } void CCloudLineDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_CMB_MAXARC, m_iMaxValue); DDX_Text(pDX, IDC_CMB_MINARC, m_iMinValue); DDX_Radio(pDX, IDC_RAD_COMMON, m_bCommon); DDX_Check(pDX, IDC_CHK_EDITION, m_bEdit); DDX_CBString(pDX, IDC_CMB_EDITHEIGHT, m_strHeight); //DDX_CBString(pDX, IDC_CMB_EDITSTYLE, m_strType); if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_CMB_EDITSTYLE, m_strType); } else { GetDlgItem(IDC_CMB_EDITSTYLE)->SetWindowText(m_strType); } DDX_CBString(pDX, IDC_CMB_EDITON, m_strEdition); DDX_Control(pDX, IDC_CMB_EDITSTYLE, m_cmbDrawStyle); } BOOL CCloudLineDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); //createToolBar(); //创建工具条 InitTextType(); OnClickEdition(); //add by lgy 20120522 设置按钮状态 CheckTypeButton(); int ctrlID = IDC_RADIO1; if (m_iDrawLineStyle == 0) // 圆 ctrlID = IDC_RADIO3; else if (m_iDrawLineStyle == 1) // 矩 ctrlID = IDC_RADIO1; else if (m_iDrawLineStyle == 2) // 矩 ctrlID = IDC_RADIO4; else ctrlID = IDC_RADIO5; CButton *pWnd = (CButton*)GetDlgItem(ctrlID); if (pWnd) pWnd->SetCheck(1); UpdateData(FALSE); return TRUE; } BEGIN_MESSAGE_MAP(CCloudLineDlg, CModelessDialog) ON_BN_CLICKED(IDC_CHK_EDITION, OnClickEdition) ON_BN_CLICKED(IDC_RADIO1, OnClickEditionA) ON_BN_CLICKED(IDC_RADIO3, OnClickEditionB) ON_BN_CLICKED(IDC_RADIO4, OnClickEditionC) ON_BN_CLICKED(IDC_RADIO5, OnClickEditionD) ON_BN_CLICKED(IDC_BTN_EDITHEIGHT, OnClickBtnTextHeight) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) END_MESSAGE_MAP() void CCloudLineDlg::OnClickEdition() { UpdateData(TRUE); if (m_bEdit) //是否编辑版次文字 { GetDlgItem(IDC_CMB_EDITON)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_EDITHEIGHT)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_EDITHEIGHT)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_EDITSTYLE)->EnableWindow(TRUE); } else { GetDlgItem(IDC_CMB_EDITON)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_EDITHEIGHT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_EDITHEIGHT)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_EDITSTYLE)->EnableWindow(FALSE); } UpdateData(FALSE); } /*void CCloudLineDlg::createToolBar()//创建工具条 { UINT buttonID[] = { ID_BTN_EDITIONA, ID_BTN_EDITIONB, ID_BTN_EDITIONC, ID_BTN_EDITIOND }; CAcModuleResourceOverride vTmp; m_toolbar.Create(WS_VISIBLE | WS_CHILD | CCS_BOTTOM | TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE, CRect(0, 0, 0, 0), this, IDR_CLOUDLINE); TBBUTTON *pIndex, *pRTF_Button = new TBBUTTON[20]; pIndex = pRTF_Button; for (long lIndex = 0; lIndex < 4; lIndex++) //创建四个BUTTON { memset(pIndex, NULL, sizeof(TBBUTTON)); pIndex->iBitmap = lIndex; pIndex->idCommand = buttonID[lIndex]; pIndex->fsStyle = TBSTYLE_CHECKGROUP; pIndex->fsState = TBSTATE_ENABLED; pIndex++; } CSize size(16, 15); m_toolbar.SetButtonSize(size); m_toolbar.AddButtons(4, pRTF_Button); // sg delete 120613,解决64位下的崩溃问题 // delete pIndex; delete[] pRTF_Button; m_toolbar.SetBitmapSize(size); m_toolbar.ModifyStyle(0, TBSTYLE_FLAT); m_toolbar.AddBitmap(4, IDR_CLOUDLINE); }*/ BOOL CCloudLineDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)//工具条的button功能说明 { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); if (GetRoutingFrame() != NULL) return FALSE; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; CString strTipText; UINT nID = (UINT)pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { return FALSE; } if (nID != 0) { { CAcModuleResourceOverride vTmp; strTipText.LoadString(nID); } #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #endif *pResult = 0; ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE; } return TRUE; } void CCloudLineDlg::OnClickEditionA() { UpdateData(TRUE); m_iDrawLineStyle = 1; //绘制类型为矩形云线 m_bStyeChange = true; //add by lgy 20120522 设置按钮状态 CheckTypeButton(); UpdateData(FALSE); acedPostCommand(_T("\33"));//发送一个esc } void CCloudLineDlg::OnClickEditionB() { UpdateData(TRUE); m_iDrawLineStyle = 0; //绘制类型为圆形云线 m_bStyeChange = true; //add by lgy 20120522 设置按钮状态 CheckTypeButton(); UpdateData(FALSE); acedPostCommand(_T("\33")); } void CCloudLineDlg::OnClickEditionC() { UpdateData(TRUE); m_iDrawLineStyle = 2; //任意绘制 m_bStyeChange = true; //add by lgy 20120522 设置按钮状态 CheckTypeButton(); UpdateData(FALSE); acedPostCommand(_T("\33")); } void CCloudLineDlg::OnClickEditionD() { UpdateData(TRUE); m_iDrawLineStyle = 3; //选择对象生成 m_bStyeChange = true; //add by lgy 20120522 设置按钮状态 CheckTypeButton(); UpdateData(FALSE); acedPostCommand(_T("\33")); } void CCloudLineDlg::OnClickBtnTextHeight()//字高 { UpdateData(TRUE); XPushAutoHide noAutoHide(this); double dHeight = _tstof(m_strHeight); dHeight = dHeight * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { dHeight /= GlobalFunc::DocGetPScale(); //将得到的字高长度除以当前图纸比例显示到对话框中 CString str; str.Format(_T("%.1f"), dHeight); m_strHeight = str; } CompleteEditorCommand(); UpdateData(FALSE); } BOOL CCloudLineDlg::DestroyWindow() { UpdateData(TRUE); // sg delete 120613,无法理解下面4句话是什么意思 //m_iMinValue; //m_iMaxValue; //m_strEdition; //m_strType; return CModelessDialog::DestroyWindow(); } void CCloudLineDlg::InitTextType() { XSymbolList lstStyle(_T("STYLE")); for (int m = 0; m < lstStyle.Length(); m++) //初始化文字样式 { m_cmbDrawStyle.AddString(lstStyle[m]); } // sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式 //m_cmbDrawStyle.SetCurSel(m_cmbDrawStyle.FindStringExact(0, m_strType)); int nRet = m_cmbDrawStyle.FindStringExact(0, m_strType); if (nRet < 0) { nRet = m_cmbDrawStyle.FindStringExact(0, _T("_TCH_LABEL")); } m_cmbDrawStyle.SetCurSel(nRet); } void CCloudLineDlg::CheckTypeButton() { //m_toolbar.CheckButton(ID_BTN_EDITIONA, m_iDrawLineStyle == 1); //m_toolbar.CheckButton(ID_BTN_EDITIONB, m_iDrawLineStyle == 0); //m_toolbar.CheckButton(ID_BTN_EDITIONC, m_iDrawLineStyle == 2); //m_toolbar.CheckButton(ID_BTN_EDITIOND, m_iDrawLineStyle == 3); } bool CCloudLineDlg::GetIsChangeType() { return m_bStyeChange; } void CCloudLineDlg::SetIsChangeType(bool bIs) { m_bStyeChange = bIs; } BOOL CCloudLineDlg::GetIsDrawing() { UpdateData(TRUE); return m_bCommon; } int CCloudLineDlg::GetDrawLineStyle() { UpdateData(TRUE); return m_iDrawLineStyle; } BOOL CCloudLineDlg::GetIsEdition() { UpdateData(TRUE); return m_bEdit; } double CCloudLineDlg::GetMaxValue(BOOL bAsPaperUnit) { UpdateData(TRUE); double dMax = m_iMaxValue; if (bAsPaperUnit) dMax *= GlobalFunc::DocGetPScale(); return dMax; } double CCloudLineDlg::GetMinValue(BOOL bAsPaperUnit) { UpdateData(TRUE); double dMin = m_iMinValue; if (bAsPaperUnit) dMin *= GlobalFunc::DocGetPScale(); return dMin; } double CCloudLineDlg::GetEndWidth() { UpdateData(TRUE); double dEndWidth = 0, dMax = m_iMaxValue; if (m_bCommon) dEndWidth = dMax / 10; return dEndWidth; } void CCloudLineDlg::GetTextParam(BOOL &bHasText, CString &csText, double &dHeight, AcDbObjectId &idTextStyle) { UpdateData(TRUE); bHasText = m_bEdit; csText = m_strEdition; dHeight = _tstof(m_strHeight); idTextStyle = InitTextStyle(m_strType); } void CCloudLineDlg::GetCloudLinePoly(const XCurveSegment &cvSegment, XPoly2D &polyModi) { UpdateData(TRUE); double dMax = m_iMaxValue * GlobalFunc::DocGetPScale(), dMin = m_iMinValue * GlobalFunc::DocGetPScale(); double dLengh(0.0), nLast = polyModi.GetLength() - 1; // 当前的最后一个 while (dLengh < cvSegment.GetLength()) { ADSGePointDir2d pt; cvSegment.Polar(dLengh, pt); polyModi.AppendNode(pt.AsAcGePoint3d()); double dTotalLen = (rand() % 10) / 10.000; dTotalLen = dTotalLen * dMax; if (dTotalLen < dMin) { dTotalLen += dMin; } dLengh = dLengh + dTotalLen; } } void CCloudLineDlg::GetCloudLinePoly(const XPoly2D &polyOld, XPoly2D &polyModi) { XCurveSegment cvSegment, cvPrevSegment; XPoint ptPrevEnd; BOOL bReverseArc(FALSE), bReversePrevArc(FALSE); int nSeg = polyOld.TotalSegments(); for (int i = 0; i < nSeg; i++) { polyOld.Nth(i, cvSegment); if (cvSegment.Is(CURVE_ARC)) // 弧 { int nPrev = i - 1; nPrev = GlobalFunc::DePeriod(nSeg, nPrev); polyOld.Nth(nPrev, cvPrevSegment); if (bReversePrevArc) // 前一段的情况 ptPrevEnd = cvPrevSegment.StartPoint(); else ptPrevEnd = cvPrevSegment.EndPoint(); XArc arc = cvSegment.GetArc(); XPoint ptStart; arc.GetStartPoint(ptStart); bReverseArc = ptPrevEnd != ptStart; } double dMax = m_iMaxValue * GlobalFunc::DocGetPScale(), dMin = m_iMinValue * GlobalFunc::DocGetPScale(); double dLengh(0.0); int nLast = polyModi.Length(); // 当前的最后一个 while (dLengh < cvSegment.GetLength()) { ADSGePointDir2d pt; cvSegment.Polar(dLengh, pt); if (bReverseArc) polyModi.InsertNodeAt(nLast, pt.AsAcGePoint3d()); else polyModi.AppendNode(pt.AsAcGePoint3d()); double dTotalLen = (rand() % 10) / 10.000; dTotalLen = dTotalLen * dMax; if (dTotalLen < dMin) { dTotalLen += dMin; } dLengh = dLengh + dTotalLen; } bReversePrevArc = bReverseArc; bReverseArc = FALSE; } } #pragma endregion #pragma region CCharToolbarDlg IMPLEMENT_DYNAMIC(CCharToolbarDlg, CModelessDialog) CCharToolbarDlg::CCharToolbarDlg(UINT IDD, CWnd* pParent /*=NULL*/) : CModelessDialog(IDD, pParent) { m_nOperCode = -1; m_bNeedSingleLineText = TRUE; // sg add 090324 } void CCharToolbarDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CCharToolbarDlg, CModelessDialog) ON_COMMAND_RANGE(ID_SPECIAL_CHAR, ID_PICKTEXT, OnChar) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCharToolbarDlg message handlers BOOL CCharToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); // if there is a top level routing frame then let it handle the message if (GetRoutingFrame() != NULL) return FALSE; // to be thorough we will need to handle UNICODE versions of the message also !! TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; //TCHAR szFullText[512]; CString strTipText; // Zyu modify on 100726,支持64位 //UINT nID = pNMHDR->idFrom; UINT nID = (UINT)pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { // idFrom is actually the HWND of the tool //nID = ::GetDlgCtrlID((HWND)nID); return FALSE; // shen rui add 对话框控件不显示 } if (nID != 0) // will be zero on a separator { //LoadString(AfxGetResourceHandle(), nID, szFullText, 8); //strTipText=szFullText; CTemporaryResourceOverride vTmp; strTipText.LoadString(nID); //=szFullText; #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #endif *pResult = 0; // bring the tooltip window above other popup windows ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE; } return TRUE; } BOOL CCharToolbarDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); CTemporaryResourceOverride vTmp; m_toolbar.Create(this); m_toolbar.LoadToolBar(IDR_TOOLBAR_TEXT); m_toolbar.ShowWindow(SW_SHOW); m_toolbar.SetBarStyle(CBRS_ALIGN_TOP | CBRS_TOOLTIPS | CBRS_FLYBY); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCharToolbarDlg::OnChar(UINT nID) { UpdateData(TRUE); int h, l; if (!GetPosition(h, l)) return; int i = 0;// Modify By Lcf On 2005-07-01 switch (nID) { case ID_DOWN_MARK: if (h == l) { AfxMessageBox(_T("请先在文字框中选择字符!")); return; } m_strInputText.Insert(l, _T("^L")); m_strInputText.Insert(h + 2, _T("^L")); i = h + 4; break; case ID_UP_MARK: if (h == l) { AfxMessageBox(_T("请先在文字框中选择字符!")); return; } m_strInputText.Insert(l, _T("^U")); m_strInputText.Insert(h + 2, _T("^U")); i = h + 4; break; case ID_CIRCLE: if (h == l) { AfxMessageBox(_T("请先在文字框中选择字符!")); return; } m_strInputText.Insert(l, _T("^C")); m_strInputText.Insert(h + 2, _T("^C")); i = h + 4; break; case ID_ANGLE_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%d")); i = l + 3; break; case ID_DIA_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%c")); i = l + 3; break; case ID_TOLERANCE_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%p")); i = l + 3; break; case ID_PERCENT_CHAR: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("%%%")); i = l + 3; break; case ID_ONE_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^1")); i = l + 2; break; case ID_TWO_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^2")); i = l + 2; break; case ID_THREE_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^3")); i = l + 2; break; case ID_FOUR_STEEL: m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, _T("^4")); i = l + 2; break; case ID_SPECIAL_CHAR:// Add By Lcf On 2005-07-01 { XPushAutoHide noAutoHide(this); CCharDlg dlg(this); CString str; CTemporaryResourceOverride vTemp; if (dlg.DoModal() != IDOK || dlg.m_character == _T("")) return; str = dlg.m_character; m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, str); i = l + str.GetLength(); } break; case ID_WORD://词库 { /*XPushAutoHide noAutoHide(this); CInsTextDlg dlg(this); dlg.SetPreText(m_strInputText); // sg add 090324,控制返回值是单行文字,还是多行文字 dlg.SetSingleText(m_bNeedSingleLineText); if (dlg.DoModal() != IDOK || dlg.GetEditText() == _T("")) return; m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, dlg.GetEditText()); i = l + dlg.GetEditText().GetLength();;*/ } break; case ID_PICKTEXT://拾取文字Add By Lcf On 2005-07-01 { if (m_bModeless) { m_nOperCode = 1; GlobalFunc::PostCommand(_T("` "), false); } else { GetPickText(); acedGetAcadDwgView()->SetFocus(); } } return; } CComboBox *pComboBox = NULL; CEdit *pEdit = NULL; if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CComboBox))) { pComboBox = (CComboBox*)m_ctrlInputText; int index = pComboBox->FindStringExact(0, m_strInputText); if (index < 0) pComboBox->InsertString(0, m_strInputText); pComboBox->SelectString(0, m_strInputText); pComboBox->SetEditSel(i, i); }// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。 if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CEdit))) { pEdit = (CEdit*)m_ctrlInputText; pEdit->SetSel(i, i); } UpdateData(FALSE); if (pEdit) pEdit->SetSel(i, i); else pComboBox->SetEditSel(i, i); } // Add by lcf On 2005-07-01 BOOL CCharToolbarDlg::GetPickText() { BeginEditorCommand(); Entity ent; RBList mask(RTDXF0, _T("TCH_*,TEXT,MTEXT"), NULL); XPoint pt; PickEntSet pickents; for (;;) { XPushAutoHide noAutoHide(this); m_nOperCode = -1; int h, l; if (!GetPosition(h, l)) return FALSE; int i = 0;// Modify By Lcf On 2005-07-01 if (GlobalFunc::SelectEntity(_T("\n屏幕拾取文字内容:"), ent, pt, mask) != RTNORM) { pickents.Redraw(4); CompleteEditorCommand(); return TRUE; } ent.Redraw(3); pickents += ent; PickSet ss(SS_FREE); ss += ent; SubText* pSubText = GlobalFunc::HitTestOnText(ss, GlobalFunc::Ucs2Wcs(pt)); if (pSubText != NULL) { CString sText = pSubText->GetText(); delete pSubText; m_strInputText.Delete(l, h - l); m_strInputText.Insert(l, sText); i = l + sText.GetLength(); } CComboBox *pComboBox = NULL; CEdit *pEdit = NULL; if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CComboBox))) { pComboBox = (CComboBox*)m_ctrlInputText; int index = pComboBox->FindStringExact(0, m_strInputText); if (index < 0) pComboBox->InsertString(0, m_strInputText); pComboBox->SelectString(0, m_strInputText); pComboBox->SetEditSel(i, i); }// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。 if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CEdit))) { pEdit = (CEdit*)m_ctrlInputText; pEdit->SetSel(i, i); } UpdateData(FALSE); if (pEdit) pEdit->SetSel(i, i); else pComboBox->SetEditSel(i, i); } pickents.Redraw(4); CompleteEditorCommand(); return TRUE; } // Modify by lcf On 2005-07-05 BOOL CCharToolbarDlg::GetPosition(int& h, int& l) { DWORD n; CComboBox *pComboBox = NULL; CEdit *pEdit = NULL; CWnd *pWnd1 = this->GetFocus(); if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CComboBox))) { pComboBox = (CComboBox*)m_ctrlInputText; if (pComboBox->m_hWnd != pWnd1->GetParent()->m_hWnd) { int nSel = pComboBox->GetWindowTextLength(); pComboBox->SetEditSel(nSel, nSel); } n = pComboBox->GetEditSel(); } else if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CEdit))) { pEdit = (CEdit*)m_ctrlInputText; if (pEdit->m_hWnd != pWnd1->m_hWnd) { int nBegin = pEdit->LineIndex(pEdit->GetLineCount() - 1); int nEnd = nBegin + pEdit->LineLength(nBegin); pEdit->SetSel(nEnd, nEnd); } n = pEdit->GetSel(); } else return FALSE; l = (int)LOWORD(n); h = (int)HIWORD(n); #if (ARX>15) if (!GlobalFunc::FindRT_MANIFEST()) return TRUE; OSVERSIONINFO osVer; osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); VERIFY(GetVersionEx(&osVer) == TRUE); if (osVer.dwPlatformId == VER_PLATFORM_WIN32_NT && osVer.dwMajorVersion >= 5 && osVer.dwMinorVersion >= 1) { CString csText; m_ctrlInputText->GetWindowText(csText); XString xsText; xsText = csText; // Zyu modify on 100726,去掉编译警告 //int nCount=_tcslen(xsText); int nCount = (int)_tcslen(xsText); int iLow = l, iUp = h; for (int idx = 0; idx < nCount; idx++) { if (idx >= iUp) break; TCHAR c = xsText[idx]; if (c < 0) { //汉字 if (idx < iLow) iLow++; if (idx < iUp) iUp++; idx++; } } l = iLow; h = iUp; } #endif return TRUE; } #pragma endregion #pragma region CDrawingNameDlg int CDrawingNameDlg::m_nStyle = 1; // sg modify 120706,9.0起不再使用当前样式,而是使用记忆上一次的样式 //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(""); // sg delete 120706,9.0起不再使用当前样式,而是使用记忆上一次的样式 //xg_getvar(_T("TEXTSTYLE"), sStyle); //m_strFontStyle1 = sStyle; //m_strFontStyle2 = sStyle; if (m_csScaleText == _T("")) { double bScale = GlobalFunc::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¢er, double&length, double &width) { AecXDbDrawingName *pDrawingName = new AecXDbDrawingName; 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); //modify by xlc on 091019 解决2010平台编辑时对象不显示的问题 #if ARX<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()); std:: 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(); // sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式 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) m_strInputText = _T("上华图名标注输入"); 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; GlobalFunc::PostCommand(_T("` "), false); } else { GetTextHeight(); acedGetAcadDwgView()->SetFocus(); } } void CDrawingNameDlg::OnButtonTextHeight1() { m_nHeightType = 1; if (m_bModeless && m_bPost) { m_nOperCode = 0; GlobalFunc::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 (ARX>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(AecXDbDrawingName* pDrawingName) { AcDbObjectId idTextStyle1 = GlobalFunc::GetTextStyleId(m_strFontStyle1); if (!idTextStyle1) return; pDrawingName->SetNameText(m_strInputText); pDrawingName->SetNameStyleId(idTextStyle1); pDrawingName->SetNameHeight(_tstof(m_strHeight1)); AcDbObjectId idTextStyle2 = GlobalFunc::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(AecXDbDrawingName* pDrawingName) { if (pDrawingName == NULL) return; m_strInputText = pDrawingName->GetNameText(); m_csScaleText = pDrawingName->GetScaleText(); m_strFontStyle1 = GlobalFunc::GetSymbolName(pDrawingName->GetNameStyleId()); m_strFontStyle2 = GlobalFunc::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) GlobalFunc::PostCommand(_T("` "), false); } } // Add By Lcf On 2005-6-06-30 void CDrawingNameDlg::OnClose() { if (m_bModeless) { m_bPost = FALSE; GlobalFunc::PostCommand(_T(" "), false); } CCharToolbarDlg::OnClose(); } // Add By Lcf On 2005-6-06-30 void CDrawingNameDlg::GetTextHeight() { XPushAutoHide noAutoHide(this); XPushMemVar vTemp(m_bPost, FALSE); m_nOperCode = -1; UpdateData(TRUE); double nHeight; if (m_nHeightType == 1) nHeight = _tstof(m_strHeight1) * GlobalFunc::DocGetPScale(); else nHeight = _tstof(m_strHeight2) * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), nHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { nHeight /= GlobalFunc::DocGetPScale(); if (m_nHeightType == 1) m_strHeight1.Format(_T("%.1f"), nHeight); else m_strHeight2.Format(_T("%.1f"), nHeight); } CompleteEditorCommand(); UpdateData(FALSE); } #pragma endregion #pragma region CDrawingIndexDlg IMPLEMENT_DYNAMIC(CDrawingIndexDlg, CModelessDialog) CString CDrawingIndexDlg::s_sIndexLabel = _T("1"); //索引编号 CString CDrawingIndexDlg::s_sDrawingLabel = _T("-"); //索引图号 //modify by lgy 20120110 文字样式应有程序自动获得 //CString CDrawingIndexDlg::s_sTextStyle = _T("_TCH_LABEL"); //文字样式 CString CDrawingIndexDlg::s_sTextStyle = GetTextStyleName(TS_LABEL);//文字样式 //modify by lgy 20120206 索引图名中比例应该设置成为1:的形式 //int CDrawingIndexDlg:: s_iScale = 20; //比例值 CString CDrawingIndexDlg::s_strScale = _T("1:20"); //比例值 int CDrawingIndexDlg::s_iCheck = 1; //double CDrawingIndexDlg::s_dTextHight = 3.5; //字高 double CDrawingIndexDlg::s_dTextHight = GetTextHeightByTs(TS_INDEXSCALE);//字高 //add by lgy 20120110 新添加的文字样式 CString CDrawingIndexDlg::s_sWorldStyle = GetTextStyleName(TS_INDEXSCALE); CDrawingIndexDlg::CDrawingIndexDlg(CWnd* pParent) : CModelessDialog(CDrawingIndexDlg::IDD, pParent), m_bScale(TRUE), m_bClose(false), m_bTextHeight(FALSE) { } CDrawingIndexDlg::~CDrawingIndexDlg() { } void CDrawingIndexDlg::DoDataExchange(CDataExchange* pDX) { DDX_Text(pDX, IDC_EDT_INDEX, s_sIndexLabel); DDX_Text(pDX, IDC_EDT_LAYNUM, s_sDrawingLabel); DDX_Text(pDX, IDC_CMB_FONTSTYLE, s_sTextStyle); //modify by lgy 20120206 索引图名中比例应该设置成为1:的形式 //DDX_Text(pDX,IDC_CMB_SCALE,s_iScale); DDX_Text(pDX, IDC_CMB_SCALE, s_strScale); DDX_Text(pDX, IDC_CMB_FONTHIGHT, s_dTextHight); DDX_Check(pDX, IDC_CHK_SCALE, s_iCheck); //add by lgy 20120110 将原来的索引编号变量与组合框关联起来 DDX_Text(pDX, IDC_CMB_INDEX, s_sIndexLabel); DDX_Text(pDX, IDC_CMB_WORLDSTYLE, s_sWorldStyle); CModelessDialog::DoDataExchange(pDX); // sg add 120706,增加与文字样式相关联的控制变量 DDX_Control(pDX, IDC_CMB_FONTSTYLE, m_cmbFontStyle); DDX_Control(pDX, IDC_CMB_WORLDSTYLE, m_cmbWordStyle); } BEGIN_MESSAGE_MAP(CDrawingIndexDlg, CModelessDialog) ON_BN_CLICKED(IDC_CHK_SCALE, OnBnClickedChkScale) ON_BN_CLICKED(IDC_BTN_FONTHIGHT, OnBnClickedBtnFonthight) ON_BN_CLICKED(IDOK, OnBnClickedOk) ON_WM_ACTIVATE() ON_WM_CLOSE() END_MESSAGE_MAP() BOOL CDrawingIndexDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); //add by lgy 20120110 索引图名对话框中索引编号控件变为组合框 GetDlgItem(IDC_EDT_INDEX)->ShowWindow(SW_HIDE); if (m_bModeless) { GetDlgItem(IDOK)->ShowWindow(SW_HIDE); GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE); } LoadTextStyle(); // sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式 int nRet = m_cmbFontStyle.FindStringExact(0, s_sTextStyle); if (nRet < 0) // 当前图纸没有此样式 { nRet = m_cmbFontStyle.FindStringExact(0, _T("_TCH_LABEL")); } m_cmbFontStyle.SetCurSel(nRet); nRet = m_cmbWordStyle.FindStringExact(0, s_sWorldStyle); if (nRet < 0) // 当前图纸没有此样式 { nRet = m_cmbWordStyle.FindStringExact(0, _T("_TCH_DIM")); } m_cmbWordStyle.SetCurSel(nRet); //add by lgy 20120110 第二次显示对话框是不能记忆是否显示比例 OnBnClickedChkScale(); //add by lgy 20120110 根据是模式对话框还是非模式对话框调整对话框大小 AdjustDlgRect(); //模态对话框显示时,检查对象是否包含比例属性 if (!m_bScale) { GetDlgItem(IDC_CMB_SCALE)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_FONTHIGHT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_FONTHIGHT)->EnableWindow(FALSE); //add by lgy 20120110 文字样式静态文本和组合框需要灰显 GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_WORLDSTYLE)->EnableWindow(FALSE); } UpdateData(FALSE); return TRUE; } //把对象属性显示在对话框上 void CDrawingIndexDlg::Obj2Dlg(AecXDbSymbDrawingIndex *pEnt) { if (!pEnt) { return; } // 图号 s_sDrawingLabel = pEnt->GetDrawingLabel(); if (s_sDrawingLabel == _T("")) { s_sDrawingLabel = _T("-"); } // 编号 s_sIndexLabel = pEnt->GetIndexLabel(); // 比例 CString sScaleText = (LPCTSTR)pEnt->GetScaleText(); // sg add 120612,只要是对象编辑对话框,无论是否显示比例,对话框上的值,应该从对象中读取,而不是使用最后一次对话框中记忆值 s_strScale = sScaleText; m_bScale = pEnt->IsDrawScale(); //if (m_bScale) //{ // CString csTmp = sScaleText; // int nFind = csTmp.Find(_T("1:"), 0); // if (nFind < 0) // { //注释 by lgy 20120206 索引图名中对象编辑时指出文字 //m_bScale = FALSE; //} //else //{ //modify by lgy 20120206 索引图名中比例应该设置成为1:的形式 //int nNum = csTmp.GetLength() - (nFind + 2); //csTmp = csTmp.Right(nNum); //s_iScale = _ttoi(csTmp); // s_strScale = csTmp; // } //} // sg modify 120612,从对象中获取比例文字样式 s_sWorldStyle = GlobalFunc::GetSymbolName(pEnt->GetScaleStyleId()); //比例选框 if (m_bScale) { s_iCheck = 1; } else { s_iCheck = 0; } //文字样式 s_sTextStyle = GlobalFunc::GetSymbolName(pEnt->GetTextStyleId()); //字高 s_dTextHight = pEnt->GetScaleTextHeight(); } //把对话框上的数据与对象属性关联 void CDrawingIndexDlg::Dlg2Obj(AecXDbSymbDrawingIndex* pEnt) { if (!pEnt) { return; } AcDbObjectId idTextStyle = InitTextStyle(s_sTextStyle); //add by lgy 20120111 增加比例文字样式 AcDbObjectId idScaleStyle = InitTextStyle(s_sWorldStyle); //修改属性 if ((s_sDrawingLabel == _T("-"))) { s_sDrawingLabel = _T(""); } pEnt->SetDrawingLabel(s_sDrawingLabel); //图号 pEnt->SetIndexLabel(s_sIndexLabel); //编号 pEnt->SetTextStyleId(idTextStyle); //文字样式 //modify by lgy 20120111 修改比例文字样式 //pEnt->SetScaleStyleId(idTextStyle); pEnt->SetScaleStyleId(idScaleStyle); pEnt->SetScaleTextHeight(s_dTextHight); //字高 pEnt->SetDrawScale(IsDrawScale()); //是否画比例 pEnt->SetScaleText(GetScaleText()); //比例内容 //add by lgy 20120110 将s_sDrawingLabel改变之后要记得还原 if ((s_sDrawingLabel == _T(""))) { s_sDrawingLabel = _T("-"); } } //加载现有的字体样式 void CDrawingIndexDlg::LoadTextStyle() { XSymbolList lstStyle(_T("STYLE")); for (int i = 0; i < lstStyle.Length(); i++) { m_cmbFontStyle.AddString(lstStyle[i]); // add by lgy 20120110 增加索引图名比例的文字样式 m_cmbWordStyle.AddString(lstStyle[i]); } } bool CDrawingIndexDlg::IsDrawScale() { bool bRe = (s_iCheck == BST_CHECKED); return bRe; } void CDrawingIndexDlg::UpdateDataEx() { UpdateData(); } CString CDrawingIndexDlg::GetDrawingLabel() { return s_sDrawingLabel; } CString CDrawingIndexDlg::GetIndexLabel() { return s_sIndexLabel; } CString CDrawingIndexDlg::GetTextStyle() { return s_sTextStyle; } CString CDrawingIndexDlg::GetScaleText() { //modify by lgy 20120206 比例已经改成cstring类型 // CString sScale; // sScale.Format(_T("1:%d"), s_iScale); // return sScale; return s_strScale; } double CDrawingIndexDlg::GetTextHight() { return s_dTextHight; } void CDrawingIndexDlg::OnBnClickedChkScale() { if ((((CButton*)GetDlgItem(IDC_CHK_SCALE))->GetCheck()) == BST_CHECKED) { GetDlgItem(IDC_CMB_SCALE)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_FONTHIGHT)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_FONTHIGHT)->EnableWindow(TRUE); //add by lgy 20120110 新增文字样式受单选框控制 GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_WORLDSTYLE)->EnableWindow(TRUE); } else { GetDlgItem(IDC_CMB_SCALE)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_FONTHIGHT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_FONTHIGHT)->EnableWindow(FALSE); //add by lgy 20120110 新增文字样式受单选框控制 GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_WORLDSTYLE)->EnableWindow(FALSE); } UpdateDataEx(); } void CDrawingIndexDlg::OnBnClickedBtnFonthight() { if (m_bModeless) { m_bTextHeight = TRUE; GlobalFunc::PostCommand(_T("` "), false); } else { TextHight(); acedGetAcadDwgView()->SetFocus(); } } void CDrawingIndexDlg::TextHight() { XPushAutoHide noAutoHide(this); double dHeight = s_dTextHight * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { dHeight /= GlobalFunc::DocGetPScale(); CString str; str.Format(_T("%.1f"), dHeight); s_dTextHight = _tstof(str); } CompleteEditorCommand(); m_bTextHeight = FALSE; UpdateData(FALSE); } void CDrawingIndexDlg::OnBnClickedOk() { UpdateDataEx(); OnOK(); } void CDrawingIndexDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CModelessDialog::OnActivate(nState, pWndOther, bMinimized); if (!m_bModeless) { return; } if (nState == WA_CLICKACTIVE) { } else if (nState == WA_INACTIVE) { UpdateDataEx(); if (!m_bClose && !m_bTextHeight) { GlobalFunc::PostCommand(_T("` "), false); } } } void CDrawingIndexDlg::OnClose() { if (m_bModeless) { m_bClose = true; GlobalFunc::PostCommand(_T(" "), false); } CModelessDialog::OnClose(); } BOOL CDrawingIndexDlg::IsOpTextHeight() { return m_bTextHeight; } //add by lgy 20120110 根据是模式对话框还是非模式对话框调整对话框大小 void CDrawingIndexDlg::AdjustDlgRect() { if (!m_bModeless) { return; } CRect rcExpansion; GetWindowRect(&rcExpansion); CWnd *pWnd = GetDlgItem(IDOK); if (pWnd) { CRect rect; pWnd->GetWindowRect(&rect); rcExpansion.bottom -= rect.Height() * 1.3; MoveWindow(rcExpansion); } } //add by lgy 20120111 返回比例文字样式 CString CDrawingIndexDlg::GetScaleStyle() { //if (BST_CHECKED == s_iCheck) //{ // return s_sWorldStyle; //} //else //{ // return _T(""); //} // sg modify 120612,文字样式不允许是空的 return s_sWorldStyle; } #pragma endregion #pragma region CIndexDimDlg CString CIndexDimDlg::m_strInputUp = _T(""); CString CIndexDimDlg::m_strInputDown = _T(""); CString CIndexDimDlg::m_strDrawing = _T("-"); CString CIndexDimDlg::m_strIndex = _T("1"); int CIndexDimDlg::m_iIndexType = 0; // add by cwk on 060706 extern CString g_sIndexDimFixAngle = _T("90");// [11/12/2007 nsh] extern BOOL g_bIndexDimFixAngle = FALSE; BOOL CIndexDimDlg::m_bContinue = TRUE; // Add by lcf on 2005-06-29 BOOL CIndexDimDlg::m_bAddIndex = TRUE; // sg add 090122 int CIndexDimDlg::m_nTextAlign = 2; // sg add 090402 BOOL CIndexDimDlg::m_bDimOnExtent = FALSE; // lgh add 101216, 是否在延长线上标注文字 BOOL CIndexDimDlg::m_bMoreCut = FALSE; // lgh add 101216,是否绘制多段剖切线 BOOL CIndexDimDlg::m_bAddTurn = FALSE; // lgh add 101216, 是否添加一个转折点 // modify by lgy 20120111 标注文字样式要从文字管理中初始化 // CString CIndexDimDlg::m_strDimStyle = _T(""); // lgh add 101216, 标注文字样式。 CString CIndexDimDlg::m_strDimStyle = GetTextStyleName(TS_LABEL);// lgh add 101216, 圆圈文字样式。 IMPLEMENT_DYNAMIC(CIndexDimDlg, CBaseTextDlg) CIndexDimDlg::CIndexDimDlg(BOOL bEdit, CWnd* pParent /*=NULL*/) : CBaseTextDlg(CIndexDimDlg::IDD, pParent), m_bEditObj(bEdit) { //{{AFX_DATA_INIT(CIndexDimDlg) // add by cwk on 060706 m_sFixAngle = g_sIndexDimFixAngle; m_bFixAngle = g_bIndexDimFixAngle; //}}AFX_DATA_INIT } CIndexDimDlg::CIndexDimDlg(BOOL bEdit, UINT Id, CWnd* pParent) : CBaseTextDlg(Id, pParent), m_bEditObj(bEdit) { //{{AFX_DATA_INIT(CIndexDimDlg) // add by cwk on 060706 m_sFixAngle = g_sIndexDimFixAngle; m_bFixAngle = g_bIndexDimFixAngle; //}}AFX_DATA_INIT } void CIndexDimDlg::DoDataExchange(CDataExchange* pDX) { CBaseTextDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIndexDimDlg) // sg modify 090507,仿照图名标注,试着解决“对象编辑中,有时候文字显示有问题”的BUG if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_COMBO_INPUTTEXT, m_strInputUp); DDX_CBString(pDX, IDC_COMBO_INPUTTEXT1, m_strInputDown); DDX_CBString(pDX, IDC_CMB_DIMTEXT_STYLE, m_strDimStyle); // add by lgh 101216 } else { GetDlgItem(IDC_COMBO_INPUTTEXT)->SetWindowText(m_strInputUp); GetDlgItem(IDC_COMBO_INPUTTEXT1)->SetWindowText(m_strInputDown); GetDlgItem(IDC_CMB_DIMTEXT_STYLE)->SetWindowText(m_strDimStyle); // add by lgh 101216 } DDX_Control(pDX, IDC_COMBO_INPUTTEXT, m_comboInputText); DDX_Control(pDX, IDC_COMBO_INPUTTEXT1, m_comboInputText1); // modify by cwk on 060706 if (!m_bEditObj) { // [11/12/2007 nsh] /*DDX_Text(pDX, IDC_EDIT_ANGLE, m_sFixAngle);*/ DDX_Text(pDX, IDC_COMBO1, m_sFixAngle); // 对固定角度的combox映射 } DDX_Text(pDX, IDC_DRAWING_LABEL, m_strDrawing); DDX_CBString(pDX, IDC_INDEX_LABEL, m_strIndex); //Modify by cwk on 060706 DDX_Check(pDX, IDC_CONTINUE, m_bContinue); DDX_Radio(pDX, IDC_INDEX_RADIO, m_iIndexType); if (!m_bEditObj) DDX_Check(pDX, IDC_CHECK1, m_bFixAngle); // sg add 090122 DDX_Check(pDX, IDC_ADD_INDEX, m_bAddIndex); DDX_CBIndex(pDX, IDC_COMBO_TEXTALIGN, m_nTextAlign); // sg add 090402 // lgh add 101216 DDX_Check(pDX, IDC_CHK_EXTTEXT, m_bDimOnExtent); DDX_Check(pDX, IDC_CHK_MORE_CUT, m_bMoreCut); DDX_Check(pDX, IDC_CHK_ADD_TURN, m_bAddTurn); DDX_Control(pDX, IDC_CMB_DIMTEXT_STYLE, m_cmbDimStyle); //}}AFX_DATA_MAP } // [11/12/2007 nsh]------------------- void CIndexDimDlg::ShowFixAngle() { this->UpdateData(TRUE); if (m_iIndexType == 0) { this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_SHOW); // 固定角度 this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_SHOW); // sg add 090122,索引范围 GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_HIDE); // lgh add 101216 GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_HIDE); // lgh ... } else if (m_iIndexType == 1) { this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE); // sg add 090122 GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_SHOW); // lgh add 101216 GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_SHOW); // lgh ... } this->UpdateData(FALSE); }//--------------------------------------- BEGIN_MESSAGE_MAP(CIndexDimDlg, CBaseTextDlg) //{{AFX_MSG_MAP(CIndexDimDlg) ON_BN_CLICKED(IDC_CHECK1, OnCheckAngle) // [11/12/2007 nsh] ON_BN_CLICKED(IDC_SECT_RADIO, ShowFixAngle) ON_BN_CLICKED(IDC_INDEX_RADIO, ShowFixAngle) //----------------------- //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CIndexDimDlg message handlers BOOL CIndexDimDlg::OnInitDialog() { CBaseTextDlg::OnInitDialog(); // [11/12/2007 nsh] if (m_bFixAngle) { this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle); this->UpdateData(FALSE); } else { this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle); this->UpdateData(FALSE); } if (m_iIndexType == 0) { if (!m_bModeless) { this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE); } else { this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_SHOW); this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_SHOW); } GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_HIDE); // lgh add 101216 GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_HIDE); // lgh ... } else if (m_iIndexType == 1) { this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE); this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_SHOW); // lgh add 101216 GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_SHOW); // lgh ... } ////////////////////////////////////////////////// LoadHisText(); LoadDimTextStyle(); // lgh add 101216,初始化标注文字样式。 // sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式 //m_cmbDimStyle.SetCurSel(m_cmbDimStyle.FindString(0, m_strDimStyle)); int nRet = m_cmbDimStyle.FindStringExact(0, m_strDimStyle); if (nRet < 0) // 当前图纸没有此样式 { nRet = m_cmbDimStyle.FindStringExact(0, _T("_TCH_LABEL")); } m_cmbDimStyle.SetCurSel(nRet); m_comboInputText.SetFocus(); UpdateVisible(!m_bEditObj); return FALSE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } // Modify by lcf On 2005-07-05 CWnd* CIndexDimDlg::GetCurWnd() { UpdateData(TRUE); CWnd *pWnd = this->GetFocus(); CWnd *pWnd2 = NULL; if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd) { pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT); // 把CWnd 回传给基类 m_strInputText = m_strInputUp; } else if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd) { pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT1); // 把CWnd 回传给基类 m_strInputText = m_strInputDown; } else { int nSel = m_comboInputText.GetWindowTextLength(); m_comboInputText.SetEditSel(nSel, nSel); pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT); } return(pWnd2); } void CIndexDimDlg::UpdateInputText() { CWnd *pWnd = this->GetFocus(); if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd) { m_strInputUp = m_strInputText; } if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd) { m_strInputDown = m_strInputText; } UpdateData(FALSE); } void CIndexDimDlg::LoadDimTextStyle() { XSymbolList lstStyle(_T("STYLE")); for (int m = 0; m < lstStyle.Length(); m++) m_cmbDimStyle.AddString(lstStyle[m]); } void CIndexDimDlg::OnOK() { AddToRecent(); CBaseTextDlg::OnOK(); } // Add by lcf on 20050708 void CIndexDimDlg::AddToRecent() { UpdateData(TRUE); { int len = m_lstHistory.Length(); TCHAR strTmpPath[256] = _T(""); GetTempPath(255, strTmpPath); _tcscat(strTmpPath, _T("index.his")); std:: ofstream out(strTmpPath); if (m_strInputUp != _T("")) { out << (const char *)_AS(m_strInputUp) << "\n"; int index = m_lstHistory.Index(m_strInputUp); 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"; } { int len1 = m_lstHistory1.Length(); TCHAR strTmpPath1[256] = _T(""); GetTempPath(255, strTmpPath1); _tcscat(strTmpPath1, _T("index1.his")); std:: ofstream out1(strTmpPath1); if (m_strInputDown != _T("")) { out1 << (const char *)_AS(m_strInputDown) << "\n"; int index = m_lstHistory1.Index(m_strInputDown); if (index >= 0) { m_lstHistory1.Remove(index); len1--; } if (len1 > maxHisList - 1) len1 = maxHisList - 1; } for (int i = 0; i < len1; i++) out1 << _AS(m_lstHistory1[i]) << "\n"; } m_lstHistory.Reset(); m_lstHistory1.Reset(); m_comboInputText.ResetContent(); m_comboInputText1.ResetContent(); LoadHisText(); } void CIndexDimDlg::LoadHisText() { { TCHAR strTmpPath[256] = _T(""); GetTempPath(255, strTmpPath); _tcscat(strTmpPath, _T("index.his")); #if (ARX>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_comboInputText.AddString(m_lstHistory[m]); } { TCHAR strTmpPath[256] = _T(""); GetTempPath(255, strTmpPath); _tcscat(strTmpPath, _T("index1.his")); #if (ARX>15) std:: #endif ifstream in(strTmpPath); while (!(!in)) { char line[256]; in.getline(line, 255); if (!in) break; m_lstHistory1.Append(tstrnew(TString(line))); } for (int m = 0; m < m_lstHistory1.Length(); m++) m_comboInputText1.AddString(m_lstHistory1[m]); } UpdateData(false); } // Add by lcf on 20050713,设置“指向索引”、“剖切索引”是否可见 void CIndexDimDlg::UpdateVisible(BOOL bVisible) { if (bVisible) { GetDlgItem(IDC_INDEX_RADIO)->ShowWindow(SW_SHOW); // 指向索引 GetDlgItem(IDC_SECT_RADIO)->ShowWindow(SW_SHOW); // 剖切索引 } else { GetDlgItem(IDC_INDEX_RADIO)->ShowWindow(SW_HIDE); GetDlgItem(IDC_SECT_RADIO)->ShowWindow(SW_HIDE); } } // sg add 090415,设置“添加索引范围”是否可见 void CIndexDimDlg::SetSourceExtentVisible(BOOL bVisible) { if (bVisible && m_iIndexType == 0) GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_SHOW); else GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE); } void CIndexDimDlg::SetSectRunView(BOOL bVisible) { if (bVisible && m_iIndexType == 1) { GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_SHOW); } else { GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_HIDE); } } double CIndexDimDlg::GetUpDimLen() { AcDbObjectId textStyle = GlobalFunc::GetTextStyleId(m_strFontStyle); if (!textStyle) return 0.0; double dHei = _tstof(m_strHeight); // 初始化宽度,按照单字节计算 int iMoreText = m_strInputUp.IsEmpty() ? 0 : 1; // 如果为空则不计算多余长度,否则多计算一个字符的长度 return AecXDbSymbIndexPointer::CalcTextLen(m_strInputUp, textStyle, dHei, iMoreText); } double CIndexDimDlg::GetDownDimLen() { AcDbObjectId textStyle = GlobalFunc::GetTextStyleId(m_strFontStyle); if (!textStyle) return 0.0; double dHei = _tstof(m_strHeight); // 初始化宽度,按照单字节计算 int iMoreText = m_strInputDown.IsEmpty() ? 0 : 1; return AecXDbSymbIndexPointer::CalcTextLen(m_strInputDown, textStyle, dHei, iMoreText); } BOOL CIndexDimDlg::GetExtendsProp(CString &strUp, CString &strDown, double &dHei, AcDbObjectId &textStyle) { UpdateData(); if (m_bDimOnExtent) { strUp = m_strInputUp; strDown = m_strInputDown; textStyle = GlobalFunc::GetTextStyleId(m_strFontStyle); if (!textStyle) return FALSE; dHei = _tstof(m_strHeight); return TRUE; } return FALSE; } void CIndexDimDlg::Dlg2Obj(AecXDbSymbIndexPointer *pText) { /* AcDbObjectId idTextStyle = GetTextStyleId(sTextStyle); if (!idTextStyle) return; pText->SetTextStyleId(idTextStyle); g_nHeight = _tstof(m_strHeight); pText->SetTextHeight(g_nHeight); */ CBaseTextDlg::Dlg2Obj(pText); pText->SetText1(m_strInputUp); pText->SetText2(m_strInputDown); pText->SetIndexLabel(m_strIndex); pText->SetDrawingLabel(m_strDrawing); if (m_bModeless) // add by whl on 060324,设置索引符号类型 pText->SetIndexPointer(m_iIndexType == 0); // sg add 090402,增加文字相对于基线的对齐方式 AecXDbSymbIndexPointer::TSymbIPTextAlign nAlign = (AecXDbSymbIndexPointer::TSymbIPTextAlign)(m_nTextAlign + 1); pText->SetTextAlign(nAlign); AcDbObjectId idFontStyle = GlobalFunc::GetTextStyleId(m_strFontStyle); if (!idFontStyle) return; pText->SetDimTextStyle(idFontStyle); AcDbObjectId idCircleTextStyle = GlobalFunc::GetTextStyleId(m_strDimStyle); if (!idCircleTextStyle) return; pText->SetTextStyleId(idCircleTextStyle); } void CIndexDimDlg::Obj2Dlg(AecXDbSymbIndexPointer *pText) { CBaseTextDlg::Obj2Dlg(pText); m_strInputUp = pText->GetText1(); m_strInputDown = pText->GetText2(); m_strDrawing = pText->GetDrawingLabel(); m_strIndex = pText->GetIndexLabel(); // sg add 090402,增加文字相对于基线的对齐方式 m_nTextAlign = (int)(pText->GetTextAlign() - 1); m_strDimStyle = m_strFontStyle; // lgh add 101224,标注文字样式 AcDbObjectId idDimStyle = pText->GetDimTextStyle(); OPENOBJ_BEGIN(idDimStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle); ASSERT(pStyle); const TCHAR* pName = NULL; if (pStyle->getName(pName) == Acad::eOk && pName != NULL) m_strFontStyle = pName; else AfxMessageBox(_T("文字风格已删除!")); OPENOBJ_END(); // lgh add 101224,是否在延长线上标注文字 if (pText->GetDimPos() == 1) m_bDimOnExtent = TRUE; else m_bDimOnExtent = FALSE; } // add by cwk on 060705 void CIndexDimDlg::OnCheckAngle() { // TODO: Add your control notification handler code here if (m_bFixAngle) { m_bFixAngle = false; /*GetDlgItem(IDC_EDIT_ANGLE)->EnableWindow(FALSE);*/ GetDlgItem(IDC_COMBO1)->EnableWindow(FALSE);// [11/12/2007 nsh] } else { m_bFixAngle = true; /*GetDlgItem(IDC_EDIT_ANGLE)->EnableWindow();*/ GetDlgItem(IDC_COMBO1)->EnableWindow();// [11/12/2007 nsh] } } #pragma endregion #pragma region CComposingDlg extern double g_nHeiht; static CString g_strOldText = ""; BOOL CComposingDlg::m_bContinue = TRUE;// Add by lcf on 2005-06-29 int CComposingDlg::m_nSide = 1; // sg add 081103 BOOL CComposingDlg::m_bHasCirPoint = FALSE;// add by xly on 100916 CString CComposingDlg::m_csPointSize = _T("0.8");// add by xly on 100916 IMPLEMENT_DYNAMIC(CComposingDlg, CBaseTextDlg) CComposingDlg::CComposingDlg(CWnd* pParent /*=NULL*/) : CBaseTextDlg(CComposingDlg::IDD, pParent) { //{{AFX_DATA_INIT(CComposingDlg) // m_nSide = 1; // sg delete 081103 //}}AFX_DATA_INIT // sg add 090324,做法标注支持多行文字 m_bNeedSingleLineText = FALSE; } void CComposingDlg::DoDataExchange(CDataExchange* pDX) { CBaseTextDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CComposingDlg) DDX_Control(pDX, IDC_INPUT_TEXT, m_editInputText); DDX_Text(pDX, IDC_INPUT_TEXT, m_strInputText); DDX_Radio(pDX, IDC_RADIO_UPLINE, m_nSide); DDX_Check(pDX, IDC_CONTINUE, m_bContinue); DDX_Check(pDX, IDC_CHK_CIRPOINTSIZE, m_bHasCirPoint);// add by xly on 100916 //DDX_Text(pDX, IDC_CMB_CIRPOINTSIZE, m_csPointSize);// add by xly on 100916 DDX_Text(pDX, IDC_CMB_CIRPOINTSIZE, m_csPointSizeTemp);// add by xly on 110314 //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CComposingDlg, CBaseTextDlg) //{{AFX_MSG_MAP(CComposingDlg) ON_BN_CLICKED(IDC_CHK_CIRPOINTSIZE, OnHasPoint)// add by xly on 100916 ON_BN_CLICKED(IDC_BUT_ADDPOINT, OnButtonAddPoint)// add by xly on 100921 ON_CBN_KILLFOCUS(IDC_CMB_CIRPOINTSIZE, OnKillFocusPointSize)// add by xly on 101221 //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CComposingDlg message handlers BOOL CComposingDlg::OnInitDialog() { CBaseTextDlg::OnInitDialog(); m_editInputText.GetFocus(); if (m_strInputText == "") m_strInputText = g_strOldText; // add by xly on 100916 是否圆点标注 if (!m_bHasCirPoint) { GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(FALSE); } // add by xly on 10921 做法标注对象编辑时,添加一个按钮和一个静态文本标签 GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_HIDE); if (!m_bModeless) { GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_CHK_CIRPOINTSIZE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(TRUE); // 对象编辑时没有没标注点的情况 if (!m_bHasPoint) { GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CMB_CIRPOINTSIZE)->ShowWindow(SW_HIDE); } } // add by xly on 110311 初始化圆点的大小 m_csPointSizeTemp = m_csPointSize; // add by xly on 110328 增加对象编辑的圆点大小的设置 if (!m_bModeless) { double dSize = m_pComposing->GetCirPointSize(); m_csPointSizeTemp.Format(_T("%.1f"), dSize); } UpdateData(FALSE); m_editInputText.SetSel(0, -1); return FALSE; // return TRUE unless you set the focus to a control } CWnd* CComposingDlg::GetCurWnd() { CWnd *pWnd = GetDlgItem(IDC_INPUT_TEXT);// 把CWnd 回传给基类 return (pWnd); } extern void TrimTail(CString &str); // add by xly on 101109 判断csStr中是否含有字母 bool IsAllDigital(CString csStr) { int nLen = csStr.GetLength(), nTemp(0); for (int i = 0; i < nLen; i++) { nTemp = (int)csStr.GetAt(i); if ((nTemp <= 'z' && nTemp >= 'a') || (nTemp <= 'Z' && nTemp >= 'A')) { return false; } } return true; } void CComposingDlg::Dlg2Obj(AecXDbSymbComposing *pText) { CBaseTextDlg::Dlg2Obj(pText); g_strOldText = m_strInputText; pText->SetText(m_strInputText); pText->SetSideText(m_nSide); // add by xly on 101210 解决对象编辑时出现的对话框提示“视图执行不支持的操作” pText->SetCirPointSize(_tstof(m_csPointSize)); } void CComposingDlg::Obj2Dlg(AecXDbSymbComposing *pText) { CBaseTextDlg::Obj2Dlg(pText); m_strInputText = pText->GetText(); m_nSide = pText->IsSideText(); // add by xly on 100926 对象编辑使用,存在标注点与不存在标注点对话框显示不同 m_bHasPoint = pText->HasOtherPoint(); // delete by xly on 1104 提到初始化中设置 //// add by xly on 110327 增加对象编辑的圆点大小的设置 //double dSize = pText->GetCirPointSize(); //m_csPointSizeTemp.Format(_T("%.1f"),dSize); //m_csPointSize = m_csPointSizeTemp; // add by xly on 101227 增加做法标注对象 m_pComposing = pText; } // add by xly on 100916 是否有圆点标注 void CComposingDlg::OnHasPoint() { UpdateData(TRUE); GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(m_bHasCirPoint); UpdateData(FALSE); } // add by xly on 100916 设置对话框控件不可用 void CComposingDlg::SetLableEnable(BOOL bShow) { UpdateData(TRUE); GetDlgItem(IDC_CHK_CIRPOINTSIZE)->EnableWindow(bShow); UpdateData(FALSE); } // add by xly on 101227 编辑时增加其他标注点 void AddOtherPoint(AecXDbSymbComposing *pComposing) { AcGePoint3d ptDim = pComposing->GetStartPoint(), ptBase = pComposing->GetTurnPoint(); while (1) { // jig // modify by xly on 110314 支持用户坐标系 //TComposingAddOtherPtJig jig2(Ucs2Wcs(ptDim),ptBase); ComposingAddOtherPtJig jig2(ptDim, ptBase); jig2.SetPrompt(_T("\n请点取要增加的标注点<退出>:")); jig2.SetKeyword(_T("`")); int nRet = jig2.DoIt(); if (nRet == RTNORM) { // 将其他标注点添加到实体中 XPoint ptNew = jig2.GetPickPoint(); AcGePoint3d ptS = pComposing->GetStartPoint(), ptTurn = pComposing->GetTurnPoint(); // 引线长度 double dLineLen = ptS.distanceTo(ptTurn); // 新进入点的长度 double dNewLineLen = ptNew.Distance(ptTurn); if (pComposing->upgradeOpen() == Acad::eOk) { // 新进入点的长度大于引线长度,更新m_ptStart if (dLineLen < dNewLineLen) { pComposing->SetStartPoint(ptNew); pComposing->AddDotLoc(ptS); } else { pComposing->AddDotLoc(ptNew); } pComposing->downgradeOpen(); } } else { pComposing->downgradeOpen(); break; } } } // add by xly on 100921 做法标注对象编辑是添加“增加标注点<”按钮事件 void CComposingDlg::OnButtonAddPoint() { // 隐藏对话框,设置软件的环境可用 CWnd * pWnd = acedGetAcadFrame(); pWnd->EnableWindow(TRUE); pWnd->SetFocus(); pWnd->SetActiveWindow(); this->ShowWindow(SW_HIDE); // 修改实体的添加夹点 m_pComposing->upgradeOpen(); Dlg2Obj(m_pComposing); m_pComposing->downgradeOpen(); // 增加标注点 AddOtherPoint(m_pComposing); // 恢复对话框可见 pWnd->EnableWindow(FALSE); this->ShowWindow(SW_SHOW); this->EnableWindow(TRUE); this->SetActiveWindow(); // sg add 101228,解决添加其他圆点标注点后,对话框的显示问题 if (m_pComposing->HasOtherPoint()) { GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_CHK_CIRPOINTSIZE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_CIRPOINTSIZE)->ShowWindow(SW_SHOW); } } // add by xly on 101221 圆点大小的编辑框设置焦点 void CComposingDlg::OnKillFocusPointSize() { // 记录修改前的值 CString csSize = m_csPointSizeTemp; UpdateData(TRUE); int nPointPos(-1); double dSize = _tstof(m_csPointSizeTemp); nPointPos = m_csPointSizeTemp.Find(_T('.')); if (m_csPointSizeTemp == _T("") || dSize < -1E-6 || !IsAllDigital(m_csPointSizeTemp)) { // modify by xly on 110223 修改提示语 //MessageBox(_T("圆点大小请给出一个不小于0的数值。")); AfxMessageBox(_T("请输入不小于0的数值。")); m_csPointSizeTemp = m_csPointSize; } else if (nPointPos > -1) { m_csPointSizeTemp = m_csPointSizeTemp.Left(nPointPos + 2); } m_csPointSize = m_csPointSizeTemp; UpdateData(FALSE); } #pragma endregion #pragma region ///////////////////////////////////////////////////////// IMPLEMENT_DYNAMIC(CEditLeaderDlg, CLeaderDlg) CEditLeaderDlg::CEditLeaderDlg(CWnd *pParent) : CLeaderDlg(TRUE, CEditLeaderDlg::IDD, pParent) { } BEGIN_MESSAGE_MAP(CEditLeaderDlg, CLeaderDlg) ON_BN_CLICKED(IDC_ADDDIM, OnBnClickedAdddim) ON_BN_CLICKED(IDC_CHECK_ONLINE, OnBnClickedCheckOnline) ON_BN_CLICKED(IDC_CHK_LERDER, OnBnClickedChkEditleaer) END_MESSAGE_MAP() void CEditLeaderDlg::OnBnClickedAdddim() { EndDialog(1000); } //add by lxb 111228 void CEditLeaderDlg::OnBnClickedCheckOnline() { CButton *pBtn1 = ((CButton *)GetDlgItem(IDC_CHECK_ONLINE)); CButton *pBtn2 = ((CButton *)GetDlgItem(IDC_CHK_LERDER)); if (pBtn1->GetCheck() == BST_CHECKED) { pBtn2->SetCheck(BST_UNCHECKED); } UpdateData(); } //add by lxb 111228 void CEditLeaderDlg::OnBnClickedChkEditleaer() { CButton *pBtn1 = ((CButton *)GetDlgItem(IDC_CHECK_ONLINE)); CButton *pBtn2 = ((CButton *)GetDlgItem(IDC_CHK_LERDER)); if (pBtn2->GetCheck() == BST_CHECKED) { pBtn1->SetCheck(BST_UNCHECKED); } UpdateData(); } #pragma endregion #pragma region CEditIndexDimDlg::CEditIndexDimDlg(CWnd *pParent /*=NULL*/) : CIndexDimDlg(TRUE, CEditIndexDimDlg::IDD, pParent) { //{{AFX_DATA_INIT(CEditIndexDimDlg) //}}AFX_DATA_INIT } void CEditIndexDimDlg::DoDataExchange(CDataExchange *pDX) { CIndexDimDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CEditIndexDimDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CEditIndexDimDlg, CIndexDimDlg) //{{AFX_MSG_MAP(CEditIndexDimDlg) ON_BN_CLICKED(IDC_BTN_ADD_CUT, OnAddCut) //}}AFX_MSG_MAP END_MESSAGE_MAP() void CEditIndexDimDlg::AttachObject(AecXDbSymbIndexPointer *pText) { m_pTextAttached = pText; } BOOL CEditIndexDimDlg::OnInitDialog() { ASSERT(m_pTextAttached != NULL); CBaseTextDlg::OnInitDialog(); ////////////////////////////////////////////////// LoadHisText(); LoadDimTextStyle(); // lgh add 101216,初始化标注文字样式。 m_cmbDimStyle.SetCurSel(m_cmbDimStyle.FindString(0, m_strDimStyle)); m_comboInputText.SetFocus(); UpdateVisible(!m_bEditObj); if (m_pTextAttached->IsIndexPointer()) { GetDlgItem(IDC_BTN_ADD_CUT)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDC_BTN_ADD_CUT)->ShowWindow(SW_NORMAL); } return TRUE; } void CEditIndexDimDlg::OnAddCut() { GetParent()->EnableWindow(TRUE); GetParent()->SetFocus(); GetParent()->SetActiveWindow(); ShowWindow(SW_HIDE); // 动态绘制命令 AddCutLineForIndexPointer(m_pTextAttached); m_pTextAttached->draw(); // 调用CAD窗口立即更新 acedGetAcadDwgView()->Invalidate(); acedGetAcadDwgView()->UpdateWindow(); // 显示对话框 GetParent()->EnableWindow(FALSE); EnableWindow(TRUE); SetActiveWindow(); ShowWindow(SW_SHOW); } void CEditIndexDimDlg::AdjustExtentProp() { AecXDbSymbIndexPointer *pText = m_pTextAttached; // if (!pText->HasExtendLine() && m_bDimOnExtent) if (m_bDimOnExtent) { // 原先没有延长线,现在需要表在延长线上,需要计算延长线的长度,其他不管 CString sUpDim = m_strInputUp, sDownDim = m_strInputDown; AcDbObjectId idDim = GlobalFunc::GetTextStyleId(m_strDimStyle); if (!idDim) return; double dHei = _tstof(m_strHeight); double dUpLen = 0.0, dDownLen = 0.0; if (pText->IsSingleLineText(true)) { dUpLen = AecXDbSymbIndexPointer::CalcTextLen(sUpDim, idDim, dHei, 1); } else { dUpLen = CalcMTextLen(sUpDim, idDim, dHei, pText->GetTextWidthUp(), 1); } if (pText->IsSingleLineText(false)) { dDownLen = AecXDbSymbIndexPointer::CalcTextLen(sDownDim, idDim, dHei, 1); } else { dDownLen = CalcMTextLen(sDownDim, idDim, dHei, pText->GetTextWidthDown(), 1); } double dLen = max(dUpLen, dDownLen) / pText->GetPScale(); const double dMinLen = AecXDbSymbIndexPointer::GetDefaultExtendLineLen(); if (dLen < dMinLen) dLen = dMinLen; if (pText->GetExtendLineLen() < dLen) pText->SetExtendLineLen(dLen); } else pText->SetExtendLineLen(0.0); pText->SetDimPos(m_bDimOnExtent ? 1 : 0); } #pragma endregion #pragma region CString CEditSectionDlg::m_strSectionNum = _T("1"); CString CEditSectionDlg::m_strStyle = GetTextStyleName(TS_SECTION); //获得默认剖切编号的文字样式 CString CEditSectionDlg::m_strHeight = _T("5.0"); int CEditSectionDlg::m_bCheck = FALSE; CString CEditSectionDlg::m_strDrawingNum = _T("1"); int CEditSectionDlg::m_iLocal = 0; int CEditSectionDlg::m_iDirect = 0; CString CEditSectionDlg::m_strDrawingHeight = _T("3.5"); CString CEditSectionDlg::m_strTextStyle = GetTextStyleName(TS_INDEXSCALE);//获得默认剖切图号文字样式 BOOL CEditSectionDlg::m_bSection = FALSE; IMPLEMENT_DYNAMIC(CEditSectionDlg, CModelessDialog) CEditSectionDlg::CEditSectionDlg(CWnd *pParent) :CModelessDialog(CEditSectionDlg::IDD, pParent) { } CEditSectionDlg::~CEditSectionDlg(void) { } BEGIN_MESSAGE_MAP(CEditSectionDlg, CModelessDialog) ON_BN_CLICKED(IDC_CHK_EDRAWING, OnBnClickDrawNum) ON_BN_CLICKED(IDC_BTN_EWORDHIGHT, OnBnClickedBtnWordhight) ON_BN_CLICKED(IDC_BTN_EDRAWINGHEIGHT, OnBnClickedBtnDrawingheight) END_MESSAGE_MAP() void CEditSectionDlg::DoDataExchange(CDataExchange *pDX) { CModelessDialog::DoDataExchange(pDX); DDX_CBString(pDX, IDC_CMB_ESECTIONNUM, m_strSectionNum); if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_CMB_ESECTIONTEXT, m_strStyle); } DDX_CBString(pDX, IDC_CMB_EWORDHEIGHT, m_strHeight); DDX_Text(pDX, IDC_EDT_EDRAWINGNUM, m_strDrawingNum); DDX_CBIndex(pDX, IDC_CMB_ESECTIONPOSITION, m_iLocal); DDX_CBIndex(pDX, IDC_CMB_ESECTIONDIRECT, m_iDirect); DDX_CBString(pDX, IDC_CMB_EDRAWINGHEIGHT, m_strDrawingHeight); if (pDX->m_bSaveAndValidate) { DDX_CBString(pDX, IDC_CMB_EDRAWTEXTSTYLE, m_strTextStyle); } DDX_Check(pDX, IDC_CHK_EDRAWING, m_bCheck); DDX_Control(pDX, IDC_CMB_EDRAWTEXTSTYLE, m_cmbDrawStyle); DDX_Control(pDX, IDC_CMB_ESECTIONTEXT, m_cmbStyleName); DDX_Radio(pDX, IDC_RAD_SECTION, m_bSection); } BOOL CEditSectionDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); AddTip(IDC_STATIC_LOCAL, _T("设置剖面图号是标注在剖切符号的两端还是其中一端")); AddTip(IDC_STATIC_DIRECT, _T("设置剖面图号的文字方向是沿剖切方向还是剖视方向")); LoadTextStyle(); //加载文字样式 OnBnClickDrawNum(); UpdateData(FALSE); return TRUE; } void CEditSectionDlg::LoadTextStyle() { XSymbolList lstStyle(_T("STYLE")); for (int m = 0; m < lstStyle.Length(); m++) //初始化文字样式 { m_cmbStyleName.AddString(lstStyle[m]); m_cmbDrawStyle.AddString(lstStyle[m]); } m_cmbStyleName.SetCurSel(m_cmbStyleName.FindStringExact(0, m_strStyle)); m_cmbDrawStyle.SetCurSel(m_cmbDrawStyle.FindStringExact(0, m_strTextStyle)); } CString CEditSectionDlg::GetSectionNum() { UpdateData(TRUE); return m_strSectionNum; } CString CEditSectionDlg::GetNumStyle() { UpdateData(TRUE); return m_strStyle; } double CEditSectionDlg::GetNumHeight() { UpdateData(TRUE); return _tstof(m_strHeight); } CString CEditSectionDlg::GetDrawNum() { UpdateData(TRUE); return m_strDrawingNum; } int CEditSectionDlg::GetLocal() { UpdateData(TRUE); return m_iLocal; } int CEditSectionDlg::GetDirect() { UpdateData(TRUE); return m_iDirect; } CString CEditSectionDlg::GetDrawingStyle() { UpdateData(TRUE); return m_strTextStyle; } double CEditSectionDlg::GetDrawHeight() { UpdateData(TRUE); return _tstof(m_strDrawingHeight); } void CEditSectionDlg::OnBnClickDrawNum() { UpdateData(TRUE); if (!m_bCheck) //是否编辑剖切图号 { GetDlgItem(IDC_CMB_EDRAWTEXTSTYLE)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_EDRAWINGNUM)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_ESECTIONPOSITION)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_ESECTIONDIRECT)->EnableWindow(FALSE); GetDlgItem(IDC_CMB_EDRAWINGHEIGHT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_EDRAWINGHEIGHT)->EnableWindow(FALSE); } else { GetDlgItem(IDC_CMB_EDRAWTEXTSTYLE)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_EDRAWINGNUM)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_ESECTIONPOSITION)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_ESECTIONDIRECT)->EnableWindow(TRUE); GetDlgItem(IDC_CMB_EDRAWINGHEIGHT)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_EDRAWINGHEIGHT)->EnableWindow(TRUE); } UpdateData(FALSE); } BOOL CEditSectionDlg::GetIsShowDrawText() { return m_bCheck; } void CEditSectionDlg::Dlg2Obj(AecXDbSymbSection *pSection)//将对话框中内容设置到实体中 { pSection->SetText(m_strSectionNum); pSection->SetTextStyleId(InitTextStyle(m_strStyle));//设置剖切编号文字样式 pSection->SetTextHeight(_tstof(m_strHeight)); if (m_bCheck) { pSection->SetIndexStyleId(InitTextStyle(m_strTextStyle)); pSection->SetIndexHeight(_tstof(m_strDrawingHeight)); pSection->SetDrawingIndex(m_strDrawingNum); if (m_iDirect == 0)//沿剖切线 { pSection->SetDimDirection(0); } else { pSection->SetDimDirection(1); } if (m_iLocal == 0)//两端 { pSection->SetIsHasIndexS(TRUE); pSection->SetIsHasIndexE(TRUE); } else if (m_iLocal == 1)//始端 { pSection->SetIsHasIndexS(TRUE); pSection->SetIsHasIndexE(FALSE); } else if (m_iLocal == 2)//终端 { pSection->SetIsHasIndexS(FALSE); pSection->SetIsHasIndexE(TRUE); } } else { pSection->SetIsHasIndexE(FALSE); pSection->SetIsHasIndexS(FALSE); } pSection->SetViewLine(!m_bSection);//是否是断面剖切还是剖面剖切 } void CEditSectionDlg::Obj2Dlg(AecXDbSymbSection *pSection) { m_strSectionNum = pSection->GetText(); double dHeight = pSection->GetTextHeight(); m_strHeight.Format(_T("%0.1f"), dHeight); dHeight = pSection->GetIndexHeight(); m_strDrawingHeight.Format(_T("%0.1f"), dHeight); m_strStyle = GlobalFunc::GetSymbolName(pSection->GetTextStyleId()); if (!pSection->GetIsHasIndexS() && !pSection->GetIsHasIndexE())//判断是否编辑剖切图号 { m_bCheck = FALSE; } else { m_bCheck = TRUE; } // sg modify 120612,以下数据从“m_bCheck = TRUE”分支中移出,无论是否标注图号,数据都是要来自对象的 if (pSection->GetIsHasIndexS() && pSection->GetIsHasIndexE()) { m_iLocal = 0; //两端标注 } if (pSection->GetIsHasIndexS() && !pSection->GetIsHasIndexE()) { m_iLocal = 1; //首端标注 } if (!pSection->GetIsHasIndexS() && pSection->GetIsHasIndexE()) { m_iLocal = 2; //尾端标注 } m_strTextStyle = GlobalFunc::GetSymbolName(pSection->GetIndexStyleId()); m_strDrawingNum = pSection->GetDrawingIndex(); m_iDirect = pSection->GetDimDirection(); m_bSection = !pSection->HasViewLine(); } void CEditSectionDlg::OnBnClickedBtnWordhight() { UpdateData(TRUE); XPushAutoHide noAutoHide(this); double dHeight = _tstof(m_strHeight); dHeight = dHeight * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { dHeight /= GlobalFunc::DocGetPScale();//获得的字高除以当前图纸比例 CString str; str.Format(_T("%.1f"), dHeight); m_strHeight = str; } CompleteEditorCommand(); UpdateData(FALSE); } void CEditSectionDlg::OnBnClickedBtnDrawingheight() { UpdateData(TRUE); XPushAutoHide noAutoHide(this); double dHeight = _tstof(m_strDrawingHeight); dHeight = dHeight * GlobalFunc::DocGetPScale(); BeginEditorCommand(); if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { dHeight /= GlobalFunc::DocGetPScale(); CString str; str.Format(_T("%.1f"), dHeight); m_strDrawingHeight = str; } CompleteEditorCommand(); UpdateData(FALSE); } #pragma endregion