// 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; iEnableWindow(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(); }