// CPagePortStatus.cpp: 实现文件 // #include "stdafx.h" #include "Servo.h" #include "CPagePortStatus.h" #include "afxdialogex.h" // CPagePortStatus 对话框 IMPLEMENT_DYNAMIC(CPagePortStatus, CHMPropertyPage) CPagePortStatus::CPagePortStatus(CWnd* pParent /*=nullptr*/) : CHMPropertyPage(IDD_PAGE_PORT_STATUS, pParent) { m_pPort = nullptr; } CPagePortStatus::~CPagePortStatus() { } void CPagePortStatus::DoDataExchange(CDataExchange* pDX) { CHMPropertyPage::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CPagePortStatus, CHMPropertyPage) ON_WM_CTLCOLOR() ON_WM_DESTROY() ON_WM_SIZE() END_MESSAGE_MAP() // CPagePortStatus 消息处理程序 void CPagePortStatus::setLoadPort(SERVO::CLoadPort* pPort) { m_pPort = pPort; } BOOL CPagePortStatus::OnInitDialog() { CHMPropertyPage::OnInitDialog(); ASSERT(m_pPort); CComboBox* pComboBox; std::string strTemp; pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_PORT_STATUS); for (int i = 1; i <= 6; i++) { pComboBox->InsertString(i - 1, SERVO::CLoadPort::getPortStatusDescription(i, strTemp).c_str()); } int portStatus = m_pPort->getPortStatus(); if (1 <= portStatus && portStatus <= 6) { pComboBox->SetCurSel(portStatus - 1); } SetDlgItemInt(IDC_EDIT_CASSETTE_NO, m_pPort->getCassetteSequenceNo()); SetDlgItemText(IDC_EDIT_CASSETTE_ID, m_pPort->getCassetteId().c_str()); pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_LOADING_CASSETTE_TYPE); for (int i = 1; i <= 4; i++) { pComboBox->InsertString(i - 1, SERVO::CLoadPort::getLoadingCassetteTypeDescription(i, strTemp).c_str()); } int loadingCassetteType = m_pPort->getLoadingCassetteType(); if (1 <= loadingCassetteType && loadingCassetteType <= 4) { pComboBox->SetCurSel(loadingCassetteType - 1); } pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_QTIME_FLAG); for (int i = 1; i <= 2; i++) { pComboBox->InsertString(i - 1, SERVO::CLoadPort::getQTimeFlagDescription(i, strTemp).c_str()); } int qTimeFlag = m_pPort->getQTimeFlag(); if (1 <= qTimeFlag && qTimeFlag <= 2) { pComboBox->SetCurSel(qTimeFlag - 1); } pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_CASSETTE_MAPPING_STATE); for (int i = 1; i <= 2; i++) { pComboBox->InsertString(i - 1, SERVO::CLoadPort::getCassetteMappingStateDescription(i, strTemp).c_str()); } int mappingState = m_pPort->getCassetteMappingState(); if (1 <= mappingState && mappingState <= 2) { pComboBox->SetCurSel(mappingState - 1); } pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_CASSETTE_STATUS); for (int i = 1; i <= 7; i++) { pComboBox->InsertString(i - 1, SERVO::CLoadPort::getCassetteStatusDescription(i, strTemp).c_str()); } int cassetteStatus = m_pPort->getCassetteStatus(); if (1 <= cassetteStatus && cassetteStatus <= 7) { pComboBox->SetCurSel(cassetteStatus - 1); } // 创建Job Existence Slots控件 m_ctrlJobSlotGrid.Create(AfxRegisterWndClass(0), _T("JobSlotGrid"), WS_CHILD | WS_VISIBLE, CRect(0, 0, 88, 32), this, 1001); m_ctrlJobSlotGrid.SetGridSize(1, 8); m_ctrlJobSlotGrid.SetColors(RGB(34, 177, 76), RGB(200, 200, 200)); auto statusMap = m_pPort->getScanCassetteMap(); for (int i = 0; i < 8; ++i) { bool isSet = (statusMap >> i) & 1; m_ctrlJobSlotGrid.SetSlotStatus(0, i, isSet); } return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } HBRUSH CPagePortStatus::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr; } void CPagePortStatus::OnDestroy() { CHMPropertyPage::OnDestroy(); // TODO: 在此处添加消息处理程序代码 } void CPagePortStatus::OnSize(UINT nType, int cx, int cy) { CHMPropertyPage::OnSize(nType, cx, cy); if (GetDlgItem(IDC_COMBO_PORT_STATUS) == nullptr) return; // 创建Job Existence Slots控件 CRect rcLabel, rcComboBox, rcClient; GetDlgItem(IDC_LABEL_JOB_EXISTENCE_SLOTS)->GetWindowRect(&rcLabel); ScreenToClient(rcLabel); GetDlgItem(IDC_COMBO_CASSETTE_STATUS)->GetWindowRect(&rcComboBox); ScreenToClient(rcComboBox); GetClientRect(rcClient); m_ctrlJobSlotGrid.MoveWindow(rcComboBox.left, rcLabel.top, 34 * 8, 32); }