237 lines
4.9 KiB
C++
237 lines
4.9 KiB
C++
// 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);
|
|
}
|