Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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);
}