439 lines
11 KiB
C++
439 lines
11 KiB
C++
// Elevator.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
#include "Elevator.h"
|
|
|
|
#ifdef _DEBUG
|
|
//#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
// extern GEOAPI int XGetCorner(const XPoint &ptCorn1, const TCHAR *pszMsg, XPoint &ptCorn2);
|
|
|
|
// 电梯数据的结构体
|
|
struct TElevatorData
|
|
{
|
|
const TCHAR *szCarring;
|
|
double dRoomWidth;
|
|
double dRoomDeep;
|
|
double dWellWidth;
|
|
double dWellDeep;
|
|
double dDoorWidth;
|
|
};
|
|
|
|
// 客梯数据
|
|
struct TElevatorData passenger[5] = {
|
|
{_T("630"), 1100.0, 1400.0, 1800.0, 2100.0, 800.0},
|
|
{_T("800"), 1350.0, 1400.0, 1900.0, 2300.0, 800.0},
|
|
{_T("1000"), 1600.0, 1400.0, 2400.0, 2300.0, 1100.0},
|
|
{_T("1250"), 1950.0, 1400.0, 2600.0, 2300.0, 1100.0},
|
|
{_T("1600"), 1950.0, 1750.0, 2600.0, 2600.0, 1100.0}
|
|
};
|
|
|
|
// 住宅梯数据
|
|
struct TElevatorData house[3] = {
|
|
{_T("400"), 1100.0, 950.0, 1800.0, 1600.0, 800.0},
|
|
{_T("630"), 1100.0, 1400.0, 1800.0, 2100.0, 800.0},
|
|
{_T("1000"), 1100.0, 2100.0, 1800.0, 2600.0, 800.0}
|
|
};
|
|
|
|
// 医梯数据
|
|
struct TElevatorData medicine[3] = {
|
|
{_T("1600"), 1400.0, 2400.0, 2400.0, 3000.0, 1300.0},
|
|
{_T("2000"), 1500.0, 2700.0, 2400.0, 3300.0, 1300.0},
|
|
{_T("2500"), 1800.0, 2700.0, 2700.0, 3300.0, 1400.0}
|
|
};
|
|
|
|
// 货梯数据
|
|
struct TElevatorData goods[5] = {
|
|
{_T("630"), 1100.0, 1400.0, 2100.0, 1900.0, 1100.0},
|
|
{_T("1000"), 1300.0, 1750.0, 2400.0, 2300.0, 1300.0},
|
|
{_T("1600"), 1500.0, 2250.0, 2700.0, 2800.0, 1500.0},
|
|
{_T("2000"), 1500.0, 2750.0, 2700.0, 3200.0, 1500.0},
|
|
{_T("3000"), 2200.0, 2940.0, 3150.0, 3400.0, 1800.0}
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CElevatorDlg dialog
|
|
|
|
int CElevatorDlg::m_iForm = 0;
|
|
int CElevatorDlg::m_iType = 0;
|
|
int CElevatorDlg::m_iCarrying = 0;
|
|
// Add by Zyu on 100401
|
|
BOOL CElevatorDlg::m_bUseDefault = false;
|
|
|
|
// sg add 100426,保留按井道决定轿厢尺寸时,输入的门宽
|
|
double CElevatorDlg::m_dDefaultDoorWidth = 1100;
|
|
|
|
IMPLEMENT_DYNAMIC(CElevatorDlg, CModelessDialog)
|
|
|
|
CElevatorDlg::CElevatorDlg(CWnd* pParent /*=NULL*/)
|
|
: CModelessDialog(CElevatorDlg::IDD, pParent)
|
|
{
|
|
m_dDoorWidth = 0.0;
|
|
m_dRoomDeep = 0.0;
|
|
m_dRoomWidth = 0.0;
|
|
}
|
|
|
|
CElevatorDlg::~CElevatorDlg()
|
|
{
|
|
}
|
|
|
|
// Add by Zyu on 100401
|
|
// 查询是否使用"按井道决定轿厢尺寸"一项设置
|
|
// Begin
|
|
BOOL CElevatorDlg::IsUseDefault()
|
|
{
|
|
if (::IsWindow(this->GetSafeHwnd()))
|
|
{
|
|
CDataExchange dataExc(this, true);
|
|
DDX_Check(&dataExc, IDC_CHK_DEFAULT, m_bUseDefault);
|
|
}
|
|
return m_bUseDefault;
|
|
}
|
|
// End
|
|
|
|
void CElevatorDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CModelessDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CElevatorDlg)
|
|
DDX_Control(pDX, IDC_COMBO_TYPE, m_cmbType);
|
|
DDX_Control(pDX, IDC_COMBO_FORM, m_cmbForm);
|
|
DDX_Control(pDX, IDC_COMBO_CARRYING, m_cmbCarrying);
|
|
DDX_Text(pDX, IDC_EDIT_DOOR_WIDTH, m_dDoorWidth);
|
|
DDX_Text(pDX, IDC_EDIT_ROOM_DEEP, m_dRoomDeep);
|
|
DDX_Text(pDX, IDC_EDIT_ROOM_WIDTH, m_dRoomWidth);
|
|
DDX_CBIndex(pDX, IDC_COMBO_FORM, m_iForm);
|
|
DDX_CBIndex(pDX, IDC_COMBO_TYPE, m_iType);
|
|
DDX_CBIndex(pDX, IDC_COMBO_CARRYING, m_iCarrying);
|
|
// Add by Zyu on 100401
|
|
DDX_Check(pDX, IDC_CHK_DEFAULT, m_bUseDefault);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CElevatorDlg, CModelessDialog)
|
|
//{{AFX_MSG_MAP(CElevatorDlg)
|
|
ON_WM_PAINT()
|
|
ON_CBN_SELCHANGE(IDC_COMBO_CARRYING, OnSelchangeComboCarrying)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType)
|
|
ON_BN_CLICKED(IDC_CHK_DEFAULT, OnBnClickedChkDefault)
|
|
ON_EN_KILLFOCUS(IDC_EDIT_DOOR_WIDTH, OnKillFocusDoorWidth)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_FORM, OnCbnSelchangeComboForm)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CElevatorDlg message handlers
|
|
|
|
void CElevatorDlg::OnOK()
|
|
{
|
|
UpdateData();
|
|
if (CheckData() == RTERROR)
|
|
{
|
|
return ;
|
|
}
|
|
|
|
CModelessDialog::OnOK();
|
|
}
|
|
|
|
BOOL CElevatorDlg::OnInitDialog()
|
|
{
|
|
CModelessDialog::OnInitDialog();
|
|
|
|
// Set Tip
|
|
// Set Default elevator type
|
|
UpdateData(FALSE);
|
|
// Initialize the door form combox data
|
|
SetDoorForm(); // 此函数应在UpdateData(TRUE)前运行,Zyu add on 101207
|
|
// Change sample picture
|
|
// Initialize the carrying combox data
|
|
SetCarrying();
|
|
// Set the default elevator data
|
|
SetData();
|
|
|
|
// Add by Zyu on 100401
|
|
SetControls(!m_bUseDefault);
|
|
SetPicture();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
// Add by Zyu on 100401
|
|
// Begin
|
|
// 点击复选框后,调整对话框
|
|
void CElevatorDlg::OnBnClickedChkDefault()
|
|
{
|
|
CDataExchange dataExt(this, true);
|
|
DDX_Check(&dataExt, IDC_CHK_DEFAULT, m_bUseDefault);
|
|
|
|
SetControls(!m_bUseDefault);
|
|
|
|
SetPicture();
|
|
}
|
|
// End
|
|
|
|
void CElevatorDlg::OnSelchangeComboCarrying()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
// Initialize the door form combox data
|
|
SetDoorForm();
|
|
// Set the default elevator data
|
|
SetData();
|
|
}
|
|
|
|
void CElevatorDlg::OnSelchangeComboType()
|
|
{
|
|
UpdateData(TRUE);
|
|
m_iCarrying = 0; // zjt add 160906
|
|
// Change sample picture
|
|
SetPicture();
|
|
// Initialize the carrying combox data
|
|
SetCarrying();
|
|
// Initialize the door form combox data
|
|
SetDoorForm();
|
|
// Set the default elevator data
|
|
SetData();
|
|
}
|
|
|
|
void CElevatorDlg::SetPicture()
|
|
{
|
|
XString sFilePath(256);
|
|
// Add by Zyu on 100401
|
|
// Begin
|
|
//if (m_iType < 2)
|
|
// sFilePath << _T("TArch(lift01)"); //FindFile(_T("lift01.sld"), sFilePath);
|
|
//else
|
|
// sFilePath << _T("TArch(lift02)"); //FindFile(_T("lift02.sld"), sFilePath);
|
|
|
|
// 如果选择"按井道决定轿厢尺寸",设置相应的幻灯片
|
|
if (((CButton*)GetDlgItem(IDC_CHK_DEFAULT))->GetCheck())
|
|
{
|
|
// Zyu modify on 101207,调用相应的幻灯片
|
|
//sFilePath << _T("TArch(lift03)");
|
|
// 调用中分样式幻灯片
|
|
if (m_iForm == 0)
|
|
{
|
|
sFilePath << _T("TArch(lift03)");
|
|
}
|
|
// 调用旁开样式幻灯片
|
|
else
|
|
{
|
|
sFilePath << _T("TArch(lift04)");
|
|
}
|
|
}
|
|
else if (m_iType < 2)
|
|
{
|
|
sFilePath << _T("TArch(lift01)"); //FindFile(_T("lift01.sld"), sFilePath);
|
|
}
|
|
else
|
|
{
|
|
sFilePath << _T("TArch(lift02)"); //FindFile(_T("lift02.sld"), sFilePath);
|
|
}
|
|
// End
|
|
|
|
//if (!sFilePath)
|
|
// return;
|
|
CWnd* pBmpWnd = GetDlgItem(IDC_BITMAP);
|
|
ASSERT(pBmpWnd);
|
|
|
|
CDC *pDC = pBmpWnd->GetDC();
|
|
CRect rect;
|
|
pBmpWnd->GetClientRect(rect);
|
|
m_imgPreview.InitDC(pDC, rect, GetAcadBackColor());
|
|
m_imgPreview.PaintSlide(sFilePath);
|
|
m_imgPreview.SetDC(NULL);
|
|
pBmpWnd->ReleaseDC(pDC);
|
|
}
|
|
|
|
void CElevatorDlg::OnPaint()
|
|
{
|
|
CPaintDC dc(this);
|
|
CRect rcClip, rcImage;
|
|
dc.GetClipBox(&rcClip);
|
|
|
|
CWnd *pImageBox = GetDlgItem(IDC_BITMAP);
|
|
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);
|
|
}
|
|
}
|
|
|
|
int CElevatorDlg::CheckData()
|
|
{
|
|
return RTNORM;
|
|
}
|
|
|
|
void CElevatorDlg::SetData()
|
|
{
|
|
// Get room standard value
|
|
switch(m_iType)
|
|
{
|
|
case 0:
|
|
m_dDoorWidth = passenger[m_iCarrying].dDoorWidth;
|
|
m_dRoomDeep = passenger[m_iCarrying].dRoomDeep;
|
|
m_dRoomWidth = passenger[m_iCarrying].dRoomWidth;
|
|
break;
|
|
case 1:
|
|
m_dDoorWidth = house[m_iCarrying].dDoorWidth;
|
|
m_dRoomDeep = house[m_iCarrying].dRoomDeep;
|
|
m_dRoomWidth = house[m_iCarrying].dRoomWidth;
|
|
break;
|
|
case 2:
|
|
m_dDoorWidth = medicine[m_iCarrying].dDoorWidth;
|
|
m_dRoomDeep = medicine[m_iCarrying].dRoomDeep;
|
|
m_dRoomWidth = medicine[m_iCarrying].dRoomWidth;
|
|
break;
|
|
case 3:
|
|
m_dDoorWidth = goods[m_iCarrying].dDoorWidth;
|
|
m_dRoomDeep = goods[m_iCarrying].dRoomDeep;
|
|
m_dRoomWidth = goods[m_iCarrying].dRoomWidth;
|
|
}
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CElevatorDlg::SetCarrying()
|
|
{
|
|
// zjt add 160906 记录上一次选择的选项
|
|
int iCarry = m_iCarrying;
|
|
UpdateData();
|
|
m_iCarrying = iCarry;
|
|
|
|
m_cmbCarrying.ResetContent();
|
|
switch(m_iType)
|
|
{
|
|
case 0:
|
|
m_cmbCarrying.AddString(CString(passenger[0].szCarring));
|
|
m_cmbCarrying.AddString(CString(passenger[1].szCarring));
|
|
m_cmbCarrying.AddString(CString(passenger[2].szCarring));
|
|
m_cmbCarrying.AddString(CString(passenger[3].szCarring));
|
|
m_cmbCarrying.AddString(CString(passenger[4].szCarring));
|
|
break;
|
|
case 1:
|
|
m_cmbCarrying.AddString(CString(house[0].szCarring));
|
|
m_cmbCarrying.AddString(CString(house[1].szCarring));
|
|
m_cmbCarrying.AddString(CString(house[2].szCarring));
|
|
break;
|
|
case 2:
|
|
m_cmbCarrying.AddString(CString(medicine[0].szCarring));
|
|
m_cmbCarrying.AddString(CString(medicine[1].szCarring));
|
|
m_cmbCarrying.AddString(CString(medicine[2].szCarring));
|
|
break;
|
|
case 3:
|
|
for (long i=0; i<ELEMENTS(goods); i++)
|
|
{
|
|
m_cmbCarrying.AddString(CString(goods[i].szCarring));
|
|
//m_cmbCarrying.AddString(CString(goods[1].szCarring));
|
|
//m_cmbCarrying.AddString(CString(goods[2].szCarring));
|
|
//m_cmbCarrying.AddString(CString(goods[3].szCarring));
|
|
//m_cmbCarrying.AddString(CString(goods[5].szCarring));
|
|
}
|
|
}
|
|
|
|
if(m_iCarrying < 0)
|
|
{
|
|
m_iCarrying = 0;
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CElevatorDlg::SetDoorForm()
|
|
{
|
|
// Zyu modify on 101207,先更新,后重置控件
|
|
//m_cmbForm.ResetContent();
|
|
//int iForm = m_iForm; // 保证索引值不被改变
|
|
//UpdateData();
|
|
//m_iForm = iForm;
|
|
// zjt delete 160906
|
|
|
|
m_cmbForm.ResetContent();
|
|
if (m_iType==0 && !m_bUseDefault)
|
|
{
|
|
m_cmbForm.AddString(CString(_T("中分")));
|
|
// Zyu add on 101207,只有中分样式时,默认选中
|
|
m_iForm = 0;
|
|
}
|
|
else
|
|
{
|
|
m_cmbForm.AddString(CString(_T("中分")));
|
|
m_cmbForm.AddString(CString(_T("旁开")));
|
|
}
|
|
// Zyu modify on 101207,此处不强制选择中分样式
|
|
//m_iForm = 0;
|
|
if (m_iForm < 0)
|
|
{
|
|
m_iForm = 0;
|
|
}
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
// Add by Zyu on 100401
|
|
// Begin
|
|
// 设置对话框里的相关控件是否可用
|
|
void CElevatorDlg::SetControls(BOOL bEnable)
|
|
{
|
|
GetDlgItem(IDC_COMBO_TYPE)->EnableWindow(bEnable);
|
|
GetDlgItem(IDC_COMBO_CARRYING)->EnableWindow(bEnable);
|
|
GetDlgItem(IDC_EDIT_ROOM_WIDTH)->EnableWindow(bEnable);
|
|
GetDlgItem(IDC_EDIT_ROOM_DEEP)->EnableWindow(bEnable);
|
|
|
|
SetDoorForm();
|
|
|
|
// sg add 100426,保留按井道决定轿厢尺寸时,输入的门宽
|
|
if (!bEnable)
|
|
{
|
|
m_dDoorWidth = m_dDefaultDoorWidth;
|
|
}
|
|
else
|
|
{
|
|
switch(m_iType)
|
|
{
|
|
case 0:
|
|
m_dDoorWidth = passenger[m_iCarrying].dDoorWidth;
|
|
break;
|
|
case 1:
|
|
m_dDoorWidth = house[m_iCarrying].dDoorWidth;
|
|
break;
|
|
case 2:
|
|
m_dDoorWidth = medicine[m_iCarrying].dDoorWidth;
|
|
break;
|
|
case 3:
|
|
m_dDoorWidth = goods[m_iCarrying].dDoorWidth;
|
|
}
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
// End
|
|
|
|
// sg add 100426,保留按井道决定轿厢尺寸时,输入的门宽
|
|
void CElevatorDlg::OnKillFocusDoorWidth()
|
|
{
|
|
UpdateData(TRUE);
|
|
if (m_bUseDefault)
|
|
{
|
|
m_dDefaultDoorWidth = m_dDoorWidth;
|
|
}
|
|
}
|
|
|
|
// Zyu add on 101207,按井道决定轿厢尺寸时,调整门形式幻灯片
|
|
void CElevatorDlg::OnCbnSelchangeComboForm()
|
|
{
|
|
UpdateData(TRUE);
|
|
SetPicture();
|
|
}
|