281 lines
5.8 KiB
C++
281 lines
5.8 KiB
C++
#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);
|
|||
|
|
}
|