#include "stdafx.h" #include "CroodGridSetDlg.h" #include "GlwGlobalVariable.h" #include "CoordGrid.h" #include "resource.h" namespace { #if ADS <= 18 double _ttof(LPCTSTR psz) { if (!psz) return .0; USES_CONVERSION; return atof(W2A(psz)); } #endif } int CcoordGridSetDlg::s_nMode = 0; IMPLEMENT_DYNAMIC(CcoordGridSetDlg, CModelessDialog) CcoordGridSetDlg::CcoordGridSetDlg(CWnd* pParent /*=NULL*/) : CModelessDialog(CcoordGridSetDlg::IDD, pParent) , m_bCheckEquationForm(FALSE) , m_strTextStyle(_T("")) , m_strTextHeight(_T("")) { } CcoordGridSetDlg::~CcoordGridSetDlg() { } void CcoordGridSetDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); DDX_Check(pDX, IDC_CHECK_EQUATION_FORM, m_bCheckEquationForm); DDX_Control(pDX, IDC_COMBO_TEXT_STYLE, m_wndCmbTextStyle); if (!pDX->m_bSaveAndValidate) { m_toolbar.CheckButton(IDC_BTN_POLYLINE, s_nMode==0); m_toolbar.CheckButton(IDC_BTN_DIAGONAL_PT, s_nMode==1); } } BEGIN_MESSAGE_MAP(CcoordGridSetDlg, CModelessDialog) ON_BN_CLICKED(IDC_BTN_POLYLINE, &CcoordGridSetDlg::OnBnClickedBtnPolyline) ON_BN_CLICKED(IDC_BTN_DIAGONAL_PT, &CcoordGridSetDlg::OnBnClickedBtnDiagonalPt) ON_BN_CLICKED(IDC_BTN_TEXT_HEIGHT, &CcoordGridSetDlg::OnBnClickedBtnTextHeight) ON_BN_CLICKED(IDC_CHECK_EQUATION_FORM, &CcoordGridSetDlg::OnBnClickedCheckEquationForm) ON_BN_CLICKED(IDC_RADIO_CROSS_GRID, &CcoordGridSetDlg::OnBnClickedRadioCrossGrid) ON_BN_CLICKED(IDC_RADIO_LINE_GRID, &CcoordGridSetDlg::OnBnClickedRadioLineGrid) ON_CBN_SELCHANGE(IDC_COMBO_TEXT_HEIGHT, &CcoordGridSetDlg::OnCbnSelchangeComboTextHeight) ON_CBN_EDITCHANGE(IDC_COMBO_TEXT_HEIGHT, &CcoordGridSetDlg::OnEditchangeComboTextHeight) ON_CBN_SELCHANGE(IDC_COMBO_GRID_SPACING, &CcoordGridSetDlg::OnCbnSelchangeComboGridSpacing) ON_CBN_SELCHANGE(IDC_COMBO_TEXT_STYLE, &CcoordGridSetDlg::OnCbnSelchangeComboTextStyle) ON_WM_CLOSE() ON_CBN_EDITCHANGE(IDC_COMBO_GRID_SPACING, &CcoordGridSetDlg::OnCbnEditchangeComboGridSpacing) ON_CBN_KILLFOCUS(IDC_COMBO_GRID_SPACING, &CcoordGridSetDlg::OnCbnKillfocusComboGridSpacing) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) ON_WM_CTLCOLOR() END_MESSAGE_MAP() BOOL CcoordGridSetDlg::LoadTextStyle() { XSymbolList lstStyle(_T("STYLE"));//控件初始化 m_wndCmbTextStyle.ResetContent(); for (int m = 0; m < lstStyle.Length(); m++) { CString strTemp = lstStyle[m]; m_wndCmbTextStyle.AddString(lstStyle[m]); } int nRet = m_wndCmbTextStyle.FindStringExact(0, m_strTextStyle); if (nRet < 0) //当前图纸没有此文字样式 { if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); pDataManage->SetDefalutTextStyleAndTextHight(); nRet = m_wndCmbTextStyle.FindStringExact(0, m_strTextStyle); if (nRet < 0) nRet = 0; } m_wndCmbTextStyle.SetCurSel(nRet); return TRUE; } void CcoordGridSetDlg::LoadTextHeightSize(int iID) { ((CComboBox*)GetDlgItem(iID))->InsertString(0, _T("1.0")); //0 ((CComboBox*)GetDlgItem(iID))->InsertString(1, _T("1.5")); //1 ((CComboBox*)GetDlgItem(iID))->InsertString(2, _T("2.0")); //2 ((CComboBox*)GetDlgItem(iID))->InsertString(3, _T("2.5")); //3 ((CComboBox*)GetDlgItem(iID))->InsertString(4, _T("3.0")); //4 ((CComboBox*)GetDlgItem(iID))->InsertString(5, _T("3.5")); //5 ((CComboBox*)GetDlgItem(iID))->InsertString(6, _T("5.0")); //6 ((CComboBox*)GetDlgItem(iID))->InsertString(7, _T("7.0")); //7 ((CComboBox*)GetDlgItem(iID))->InsertString(8, _T("10.0")); //8 ((CComboBox*)GetDlgItem(iID))->InsertString(9, _T("14.0")); //9 ((CComboBox*)GetDlgItem(iID))->InsertString(10, _T("20.0")); //10 } void CcoordGridSetDlg::LoadGridSpacingSize(int iID) { ((CComboBox*)GetDlgItem(iID))->InsertString(0, _T("20")); //0 ((CComboBox*)GetDlgItem(iID))->InsertString(1, _T("25")); //1 ((CComboBox*)GetDlgItem(iID))->InsertString(2, _T("50")); //2 ((CComboBox*)GetDlgItem(iID))->InsertString(3, _T("100")); //3 ((CComboBox*)GetDlgItem(iID))->InsertString(4, _T("200")); //4 } BOOL CcoordGridSetDlg::OnInitDialog() { //文字样式 CModelessDialog::OnInitDialog(); CAcModuleResourceOverride vTmp; m_toolbar.Create( WS_VISIBLE | WS_CHILD |CCS_BOTTOM| TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE ,CRect(0,0,0,0), this, IDB_BTM_BTNS); TBBUTTON *pIndex, *pRTF_Button = new TBBUTTON[2]; pIndex = pRTF_Button; memset(&pRTF_Button[0] ,NULL, sizeof(TBBUTTON)); pRTF_Button[0].iBitmap = 0; pRTF_Button[0].idCommand = IDC_BTN_POLYLINE; pRTF_Button[0].fsStyle = TBSTYLE_CHECKGROUP; pRTF_Button[0].fsState = TBSTATE_ENABLED; memset(&pRTF_Button[1] ,NULL, sizeof(TBBUTTON)); pRTF_Button[1].iBitmap = 1; pRTF_Button[1].idCommand = IDC_BTN_DIAGONAL_PT; pRTF_Button[1].fsStyle = TBSTYLE_CHECKGROUP; pRTF_Button[1].fsState = TBSTATE_ENABLED; CSize size(16, 15); m_toolbar.SetButtonSize(size); m_toolbar.AddButtons(2, pRTF_Button); delete[] pRTF_Button; m_toolbar.AddBitmap(2, IDB_BTM_BTNS); m_toolbar.AutoSize(); if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); m_strTextStyle = pDataManage->GetTextStyle(); LoadTextStyle();//设置文字样式下拉框 LoadTextHeightSize(IDC_COMBO_TEXT_HEIGHT); LoadGridSpacingSize(IDC_COMBO_GRID_SPACING); if (kCrossGrid == pDataManage->GetGirdType()) { OnBnClickedRadioCrossGrid(); } else { OnBnClickedRadioLineGrid(); } //等式形式 m_bCheckEquationForm = pDataManage->GetEquationForm(); //网格间距 int iGridSpacing = 0; if (DocGetMeterUnitDraw()) iGridSpacing = pDataManage->GetGridSpacing(); else iGridSpacing = pDataManage->GetGridSpacing() / 1000; CString strGridSpading(_T("")); strGridSpading.Format(_T("%d"), iGridSpacing); m_strGridSpacing = strGridSpading; int nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->FindStringExact(0, strGridSpading); if (nRet < 0) // 当前图纸没有此网格间距 { ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->InsertString(0, strGridSpading); ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(0); UpdateData(FALSE); } else ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(nRet); //字高 m_strTextHeight.Format(_T("%0.1f"), pDataManage->GetTextHeight()); nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->FindStringExact(0, m_strTextHeight); if (nRet < 0) // 当前图纸没有此文字高度 { ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->InsertString(0, m_strTextHeight); ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(0); UpdateData(FALSE); } else ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(nRet); //绘制模式,等待 if (kSelectPolyLine == pDataManage->GetDrawType()) s_nMode = 0; else s_nMode = 1; EnableToolTips(TRUE); m_wndToolTip.Create(this, TTS_ALWAYSTIP); m_wndToolTip.Activate(TRUE); //设置是否启用提示 m_wndToolTip.AddTool(GetDlgItem(IDC_STATIC_LINE), _T("按当前坐标系确定坐标值及网格文字显示方向")); m_wndToolTip.AddTool(GetDlgItem(IDC_STATIC_CROSS), _T("按世界坐标系确定坐标值及网格文字显示方向")); //更新界面控件 UpdateData(FALSE); return TRUE; } void CcoordGridSetDlg::OnClose() { m_bUseEsc = true; if (m_bModeless) { acedPostCommand(_T("\33\33")); } else { CModelessDialog::OnClose(); } } void CcoordGridSetDlg::OnDestroy() { CModelessDialog::OnDestroy(); } //绘制方式,取多段线 void CcoordGridSetDlg::OnBnClickedBtnPolyline() { s_nMode = 0; if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); pDataManage->SetDrawType(kSelectPolyLine); m_bUseEsc = false; acedPostCommand(_T("\33")); } //绘制方式,取对角点 void CcoordGridSetDlg::OnBnClickedBtnDiagonalPt() { s_nMode = 1; if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); pDataManage->SetDrawType(kSelectDiagonalPt); m_bUseEsc = false; acedPostCommand(_T("\33")); } //网格类型,十字交叉 void CcoordGridSetDlg::OnBnClickedRadioCrossGrid() { if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); pDataManage->SetGirdType(kCrossGrid); ((CButton *)GetDlgItem(IDC_RADIO_CROSS_GRID))->SetCheck(TRUE); ((CButton *)GetDlgItem(IDC_RADIO_LINE_GRID))->SetCheck(FALSE); GetDlgItem(IDC_STATIC_X)->SetWindowTextW(_T("X")); GetDlgItem(IDC_STATIC_Y)->SetWindowTextW(_T("Y")); } //网格类型,网格通线 void CcoordGridSetDlg::OnBnClickedRadioLineGrid() { if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); pDataManage->SetGirdType(kLineGrid); ((CButton *)GetDlgItem(IDC_RADIO_CROSS_GRID))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_LINE_GRID))->SetCheck(TRUE); GetDlgItem(IDC_STATIC_X)->SetWindowTextW(_T("A")); GetDlgItem(IDC_STATIC_Y)->SetWindowTextW(_T("B")); } //拾取字高 void CcoordGridSetDlg::OnBnClickedBtnTextHeight() { double dHeight = _tstof(m_strTextHeight)*DocGetPScale(); BeginEditorCommand(); if (GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) { dHeight /= DocGetPScale(); m_strTextHeight.Format(_T("%.1f"), dHeight); } CompleteEditorCommand(); int nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->FindStringExact(0, m_strTextHeight); if (nRet < 0) // 当前没有此文字高度 { ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->InsertString(0, m_strTextHeight); ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(0); UpdateData(FALSE); } else ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->SetCurSel(nRet); OnCbnSelchangeComboTextHeight(); acedGetAcadDwgView()->SetFocus(); } void CcoordGridSetDlg::OnEditchangeComboTextHeight() { UpdateData(TRUE); CString strTextHeight(_T("")); ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->GetWindowText(strTextHeight); ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->AddString(strTextHeight); double dGridSpacing = _ttof(strTextHeight); if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); pDataManage->SetTextHeight(dGridSpacing); } //字高 void CcoordGridSetDlg::OnCbnSelchangeComboTextHeight() { if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); int iCurSel = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->GetCurSel(); CString strTextHeight(_T("")); ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_HEIGHT))->GetLBText(iCurSel, strTextHeight); double dGridSpacing = _ttof(strTextHeight); pDataManage->SetTextHeight(dGridSpacing); } //等式形式 void CcoordGridSetDlg::OnBnClickedCheckEquationForm() { UpdateData(TRUE); if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); if (m_bCheckEquationForm) pDataManage->SetEuqationForm(true); else pDataManage->SetEuqationForm(false); } //网格间距 void CcoordGridSetDlg::OnCbnSelchangeComboGridSpacing() { if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); int iCurSel = ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->GetCurSel(); CString strGrid(_T("")); ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->GetLBText(iCurSel, strGrid); int iGridSpacing = _ttoi(strGrid); m_strGridSpacing = strGrid; pDataManage->SetGridSpacing(iGridSpacing); } //文字样式 void CcoordGridSetDlg::OnCbnSelchangeComboTextStyle() { if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); int iCurSel = ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_STYLE))->GetCurSel(); ((CComboBox*)GetDlgItem(IDC_COMBO_TEXT_STYLE))->GetLBText(iCurSel, m_strTextStyle); pDataManage->SetTextStyle(m_strTextStyle); } void CcoordGridSetDlg::OnCbnEditchangeComboGridSpacing() { //网格间距允许输入大于0的数值, //当输入小于等于0的数值、非数值或此项为空时, //弹出错误对话框提示“请输入大于0的数值!”,同时间距值恢复到修改前数值; CString strGrid(_T("")); ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->GetWindowTextW(strGrid); if (!strGrid.IsEmpty()) { CString sTem; sTem.Format(_T("%d"),_ttoi(strGrid)); if (sTem != strGrid || sTem == _T("0")) { AfxMessageBox(_T("请输入大于0的数值!")); } else { m_strGridSpacing = strGrid; } } else { AfxMessageBox(_T("请输入大于0的数值!")); } } void CcoordGridSetDlg::OnCbnKillfocusComboGridSpacing() { int nRet = ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->FindStringExact(0, m_strGridSpacing); if (nRet < 0) // 当前图纸没有此网格间距 { ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->InsertString(0, m_strGridSpacing); ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(0); } else ((CComboBox*)GetDlgItem(IDC_COMBO_GRID_SPACING))->SetCurSel(nRet); if(!GET_GLOBAL_VARIABLE(CCoordGridDataManage)) SET_GLOBAL_VARIABLE(CCoordGridDataManage, new CCoordGridDataManage); CCoordGridDataManage *pDataManage = GET_GLOBAL_VARIABLE(CCoordGridDataManage); int iGridSpacing = _ttoi(m_strGridSpacing); pDataManage->SetGridSpacing(iGridSpacing); } // add by xly on 11o120 设置控件的显示与灰显 void CcoordGridSetDlg::SetItemEnable(BOOL bEnable) { GetDlgItem(IDC_BTN_POLYLINE)->EnableWindow(bEnable); GetDlgItem(IDC_BTN_DIAGONAL_PT)->EnableWindow(bEnable); } HBRUSH CcoordGridSetDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CModelessDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd-> GetDlgCtrlID() == IDC_STATIC_CROSS || pWnd-> GetDlgCtrlID() == IDC_STATIC_LINE) { pDC-> SetTextColor(RGB(0,0,255)); //字体颜色 } return hbr; } BOOL CcoordGridSetDlg::PreTranslateMessage(MSG* pMsg) { m_wndToolTip.RelayEvent(pMsg); return CModelessDialog::PreTranslateMessage(pMsg); } // 工具栏提示 BOOL CcoordGridSetDlg::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; }