Files
envi-code/SourceCode/Code2026/tg_shs/shs_siteplan/MultPlaceTreeDlg.cpp
T
2026-09-28 15:28:50 +08:00

282 lines
5.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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);
}