// SprinklerDimDlg.cpp : 实现文件 // #include "stdafx.h" #include "SprinklerDimDlg.h" // CSprinklerDimDlg 对话框 IMPLEMENT_DYNAMIC(CSprinklerDimDlg, CModelessDialog) CSprinklerDimDlg::CSprinklerDimDlg(CWnd* pParent /*=NULL*/) : CModelessDialog(CSprinklerDimDlg::IDD, pParent) , m_nDim(0) , m_nDimType(0) , m_sDst(_T("3.00")) { m_bIsSelected = false; } CSprinklerDimDlg::~CSprinklerDimDlg() { } void CSprinklerDimDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); DDX_Radio(pDX, IDC_RADIO_NODIM, m_nDim); DDX_Radio(pDX, IDC_RADIO_WALL, m_nDimType); DDX_Control(pDX, IDC_STATIC_DST, m_wndText1); DDX_Control(pDX, IDC_STATIC_EDIT, m_wndText2); DDX_Text(pDX, IDC_EDIT_DST, m_sDst); DDX_Control(pDX, IDC_RADIO_WALL, m_wndWall); DDX_Control(pDX, IDC_EDIT_DST, m_wndEdtDst); } BEGIN_MESSAGE_MAP(CSprinklerDimDlg, CModelessDialog) ON_BN_CLICKED(IDC_RADIO_WALL, &CSprinklerDimDlg::OnBnClickedRadioWall) ON_BN_CLICKED(IDC_RADIO_LINE, &CSprinklerDimDlg::OnBnClickedRadioLine) ON_EN_KILLFOCUS(IDC_EDIT_DST, &CSprinklerDimDlg::OnEnKillfocusEditDst) ON_WM_DESTROY() ON_BN_CLICKED(IDC_RADIO_NODIM, &CSprinklerDimDlg::OnBnClickedRadioNodim) ON_BN_CLICKED(IDC_RADIO_DIM, &CSprinklerDimDlg::OnBnClickedRadioDim) ON_WM_CLOSE() END_MESSAGE_MAP() BOOL CSprinklerDimDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); CRegProperty regProp(GetRegLocation(), _T("Sprinkler")); regProp.SetTopRootKey(HKEY_CURRENT_USER); if (!regProp.GetValue(_T("IsDimWall"), m_nDim)) { m_nDim = 0; } if (!regProp.GetValue(_T("DimWallType"), m_nDimType)) { m_nDimType = 0; } if (!regProp.GetValue(_T("DistOfSearch"), m_sDst)) { m_sDst = _T("3.00"); } UpdateData(FALSE); CWnd *pWnd = GetDlgItem(IDC_RADIO_LINE); if (m_nDim == 0) { m_wndEdtDst.EnableWindow(FALSE); m_wndWall.EnableWindow(FALSE); if (pWnd != NULL) { pWnd->EnableWindow(FALSE); } } else { m_wndEdtDst.EnableWindow(TRUE); m_wndWall.EnableWindow(TRUE); if (pWnd != NULL) { pWnd->EnableWindow(TRUE); } } ChangeDimType(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSprinklerDimDlg::ChangeDimType() { CString sText1 = _T("两端喷头距墙体距离"); CString sText2 = _T("两端喷头距轴线距离"); CString sText3 = _T("喷头距墙体距离≤"); CString sText4 = _T("喷头距轴线距离≤"); if (m_nDimType == 0) { m_wndText1.SetWindowText(sText1); m_wndText2.SetWindowText(sText3); } else { m_wndText1.SetWindowText(sText2); m_wndText2.SetWindowText(sText4); } UpdateData(FALSE); } void CSprinklerDimDlg::OnBnClickedRadioWall() { UpdateData(TRUE); ChangeDimType(); if (m_bIsSelected) { PostCommand(_T("R "), false); } acedGetAcadDwgView()->SetFocus(); } void CSprinklerDimDlg::OnBnClickedRadioLine() { UpdateData(TRUE); ChangeDimType(); if (m_bIsSelected) { PostCommand(_T("R "), false); } acedGetAcadDwgView()->SetFocus(); } bool StringIsAllNum(CString str) { // 判断字符是否是合法数字 CString sText = str.SpanIncluding(_T("0123456789.-")); // 小数点可以出现在中间,但只能出现一次 int nIndex = sText.Find(_T("."), 0); if (nIndex > 0) { nIndex = sText.Find(_T("."), ++nIndex); } // 负号可以出现在起始处,但只能出现一次 int nIndex2 = sText.Find(_T("-")); if (nIndex2 == 0) { nIndex2 = sText.Find(_T("-"), 1); } bool bFigure = true; if (str == sText && nIndex < 0 && nIndex2 <= 0)// 全是数字 { return true; } return false; } void CSprinklerDimDlg::OnEnKillfocusEditDst() { CString sText = m_sDst; UpdateData(TRUE); double dDst = _tstof(m_sDst); if (dDst <= 0.0 || !StringIsAllNum(m_sDst)) { m_sDst = sText; UpdateData(FALSE); } else { m_sDst.Format(_T("%.3f"), dDst); } UpdateData(FALSE); if (m_bIsSelected) { PostCommand(_T("R "), false); } } void CSprinklerDimDlg::WriteRegData() { UpdateData(TRUE); CRegProperty regProp(GetRegLocation(), _T("Sprinkler")); regProp.SetTopRootKey(HKEY_CURRENT_USER); regProp.SetValue(_T("IsDimWall"), m_nDim); regProp.SetValue(_T("DimWallType"), m_nDimType); regProp.SetValue(_T("DistOfSearch"), m_sDst); } void CSprinklerDimDlg::OnDestroy() { WriteRegData(); CModelessDialog::OnDestroy(); } void CSprinklerDimDlg::OnBnClickedRadioNodim() { if (m_bIsSelected) { PostCommand(_T("R "), false); } m_wndEdtDst.EnableWindow(FALSE); m_wndWall.EnableWindow(FALSE); CWnd *pWnd = GetDlgItem(IDC_RADIO_LINE); if (pWnd != NULL) { pWnd->EnableWindow(FALSE); } acedGetAcadDwgView()->SetFocus(); } void CSprinklerDimDlg::OnBnClickedRadioDim() { if (m_bIsSelected) { PostCommand(_T("R "), false); } m_wndEdtDst.EnableWindow(TRUE); m_wndWall.EnableWindow(TRUE); CWnd *pWnd = GetDlgItem(IDC_RADIO_LINE); if (pWnd != NULL) { pWnd->EnableWindow(TRUE); } acedGetAcadDwgView()->SetFocus(); } void CSprinklerDimDlg::OnClose() { WriteRegData(); CModelessDialog::OnClose(); PostCommand(_T("\33"), false); }