Files
envi-code/SourceCode/Code2026/tg_shs/shs_siteplan/MultPlaceTreeDlg.cpp
T

281 lines
5.8 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#include "stdafx.h"
#include "MultPlaceTreeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// 初始化对话框中的全局变量
BOOL CMultPlaceTreeDlg::m_bSameDis = FALSE;
BOOL CMultPlaceTreeDlg::m_bSameRad = FALSE;
int CMultPlaceTreeDlg::m_iTreeType = 0;
double CMultPlaceTreeDlg::m_dRadMin = 800.0;
double CMultPlaceTreeDlg::m_dRadMax = 1500.0;
double CMultPlaceTreeDlg::m_dDisMin = 1000.0;
double CMultPlaceTreeDlg::m_dDisMax = 2000.0;
CMultPlaceTreeDlg::CMultPlaceTreeDlg(CWnd* pParent /*=NULL*/)
: CModelessDialog(CMultPlaceTreeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMultPlaceTreeDlg)
//}}AFX_DATA_INIT
m_csRadMin = GetFormatData(m_dRadMin);
m_csRadMax = GetFormatData(m_dRadMax);
m_csDisMin = GetFormatData(m_dDisMin);
m_csDisMax = GetFormatData(m_dDisMax);
}
// 根据需求修改编辑框中的数据格式
CString CMultPlaceTreeDlg::GetFormatData(double dData)
{
CString csTemp;
if (DocGetMeterUnitDraw())
{
csTemp.Format(_T("%.1f"), _AS_SYS_UNIT(dData));
}
else
{
csTemp.Format(_T("%.0f"), _AS_SYS_UNIT(dData));
}
return csTemp;
}
CMultPlaceTreeDlg::~CMultPlaceTreeDlg()
{
m_dRadMin = _AS_MM(_tstof(m_csRadMin));
m_dRadMax = _AS_MM(_tstof(m_csRadMax));
m_dDisMin = _AS_MM(_tstof(m_csDisMin));
m_dDisMax = _AS_MM(_tstof(m_csDisMax));
}
void CMultPlaceTreeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMultPlaceTreeDlg)
DDX_Text(pDX, IDC_EDIT_RADMIN, m_csRadMin);
DDX_Text(pDX, IDC_EDIT_RADMAX, m_csRadMax);
DDX_Text(pDX, IDC_EDIT_DISMIN, m_csDisMin);
DDX_Text(pDX, IDC_EDIT_DISMAX, m_csDisMax);
DDX_Check(pDX, IDC_CHK_SAMEDIS,m_bSameDis);
DDX_Check(pDX, IDC_CHK_SAMERAD,m_bSameRad);
DDX_Radio(pDX, IDC_RAD_TREEONE, m_iTreeType);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMultPlaceTreeDlg, CModelessDialog)
//{{AFX_MSG_MAP(CMultPlaceTreeDlg)
ON_BN_CLICKED(IDC_CHK_SAMEDIS, OnChkSamedis)
ON_BN_CLICKED(IDC_CHK_SAMERAD, OnChkSamerad)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_RAD_TREEONE, OnRadioTree)
ON_BN_CLICKED(IDC_RAD_TREETWO, OnRadioTree)
ON_BN_CLICKED(IDC_RAD_TREETHREE, OnRadioTree)
ON_BN_CLICKED(IDC_RAD_TREEFOUR, OnRadioTree)
ON_EN_KILLFOCUS(IDC_EDIT_RADMIN, OnKillfocusRadMin)
ON_EN_KILLFOCUS(IDC_EDIT_RADMAX, OnKillfocusRadMax)
ON_EN_KILLFOCUS(IDC_EDIT_DISMIN, OnKillfocusDisMin)
ON_EN_KILLFOCUS(IDC_EDIT_DISMAX, OnKillfocusDisMax)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CMultPlaceTreeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(TRUE);
// 设置幻灯片
SetPicture();
// 获取当前的绘图单位 bIsMetre=true:M;bIsMetre=false:mm
BOOL bIsMetre = DocGetMeterUnitDraw();
if (bIsMetre)
{
this->SetWindowText(_T("成片布树(单位:M)")); // 对话框标题设置
}
else
{
this->SetWindowText(_T("成片布树(单位:mm)"));
}
// 固定半径被选
GetDlgItem(IDC_EDIT_DISMAX)->EnableWindow(!m_bSameDis);
// 固定间距被选
GetDlgItem(IDC_EDIT_RADMAX)->EnableWindow(!m_bSameRad);
return TRUE;
}
// 固定间距的实现
void CMultPlaceTreeDlg::OnChkSamedis()
{
UpdateData();
GetDlgItem(IDC_EDIT_DISMAX)->EnableWindow(!m_bSameDis);
}
// 固定半径的实现
void CMultPlaceTreeDlg::OnChkSamerad()
{
UpdateData();
GetDlgItem(IDC_EDIT_RADMAX)->EnableWindow(!m_bSameRad);
}
// 树形切换
void CMultPlaceTreeDlg::OnRadioTree()
{
UpdateData();
SetPicture(); // 设置幻灯片
}
// 设置幻灯片显示
void CMultPlaceTreeDlg::SetPicture()
{
XString sFilePath(256);
if (m_iTreeType == 0) // 树形1
{
sFilePath << _T("TArch(multplacetree01)");
}
else if (m_iTreeType == 1) // 树形2
{
sFilePath << _T("TArch(multplacetree02)");
}
else if(m_iTreeType == 2) // 树形3
{
sFilePath << _T("TArch(multplacetree03)");
}
else if(m_iTreeType == 3) // 树形4
{
sFilePath << _T("TArch(multplacetree04)");
}
// 获得图片控件
CWnd* pWndBmp = GetDlgItem(IDC_STATIC_PREVIEW);
ASSERT(pWndBmp);
// 获得图片区域
CDC *pDC = pWndBmp->GetDC();
CRect rect;
pWndBmp->GetClientRect(rect);
m_imgPreview.InitDC(pDC, rect, GetAcadBackColor());
m_imgPreview.PaintSlide(sFilePath);
m_imgPreview.SetDC(NULL);
pWndBmp->ReleaseDC(pDC);
}
// 窗口重绘消息
void CMultPlaceTreeDlg::OnPaint()
{
CPaintDC dc(this);
CRect rcClip, rcImage;
dc.GetClipBox(&rcClip);
CWnd *pImageBox = GetDlgItem(IDC_STATIC_PREVIEW);
if (pImageBox)
{
pImageBox->GetWindowRect(&rcImage);
ScreenToClient(&rcImage);
if (!rcImage.IntersectRect(&rcImage, &rcClip))
return;
CDC *pDC = pImageBox->GetDC();
m_imgPreview.SetDC(pDC);
m_imgPreview.Redraw();
m_imgPreview.SetDC(NULL);
pImageBox->ReleaseDC(pDC);
}
}
// 修改树形半径
void CMultPlaceTreeDlg::OnKillfocusRadMin()
{
UpdateData();
if (IsDigital(m_csRadMin) || m_csRadMin.Find(_T("."), 0)>0)
{
m_dRadMin = _AS_MM(GetRadMin());
}
else
{
MessageBox(_T("请输入数字!"));
}
m_csRadMin = GetFormatData(m_dRadMin);
UpdateData(FALSE);
}
void CMultPlaceTreeDlg::OnKillfocusRadMax()
{
UpdateData();
if (IsDigital(m_csRadMax) || m_csRadMax.Find(_T("."), 0)>0)
{
m_dRadMax = _AS_MM(GetRadMax());
}
else
{
MessageBox(_T("请输入数字!"));
}
m_csRadMax = GetFormatData(m_dRadMax);
UpdateData(FALSE);
}
// 修改树间距
void CMultPlaceTreeDlg::OnKillfocusDisMin()
{
UpdateData();
if (IsDigital(m_csDisMin) || m_csDisMin.Find(_T("."), 0)>0)
{
m_dDisMin = _AS_MM(GetDisMin());
}
else
{
MessageBox(_T("请输入数字!"));
}
m_csDisMin = GetFormatData(m_dDisMin);
UpdateData(FALSE);
}
void CMultPlaceTreeDlg::OnKillfocusDisMax()
{
UpdateData();
if (IsDigital(m_csDisMax) || m_csDisMax.Find(_T("."), 0)>0)
{
m_dDisMax = _AS_MM(GetDisMax());
}
else
{
MessageBox(_T("请输入数字!"));
}
m_csDisMax = GetFormatData(m_dDisMax);
UpdateData(FALSE);
}
double CMultPlaceTreeDlg::GetDisMax() const
{
return _tstof(m_csDisMax);
}
double CMultPlaceTreeDlg::GetDisMin() const
{
return _tstof(m_csDisMin);
}
double CMultPlaceTreeDlg::GetRadMax() const
{
return _tstof(m_csRadMax);
}
double CMultPlaceTreeDlg::GetRadMin() const
{
return _tstof(m_csRadMin);
}