| | |
| | | |
| | | // CEquipmentPage1 对话框 |
| | | |
| | | #define SIGNAL_GRID_ROWS 8 |
| | | #define SIGNAL_GRID_COLS 8 |
| | | #define SIGNAL_GRID_SIZE (SIGNAL_GRID_ROWS * SIGNAL_GRID_COLS) |
| | | |
| | | IMPLEMENT_DYNAMIC(CEquipmentPage1, CHMPropertyPage) |
| | | |
| | | CEquipmentPage1::CEquipmentPage1(CWnd* pParent /*=nullptr*/) |
| | |
| | | m_pEquipment = pEquipment; |
| | | } |
| | | |
| | | void CEquipmentPage1::InitSignalList() |
| | | { |
| | | m_vSignalList.clear(); |
| | | |
| | | // 写入设备的信号名称,默认状态为 false,默认都可点击(输出) |
| | | m_vSignalList.push_back({ _T("Upstream\r\nInline"), false, true }); |
| | | m_vSignalList.push_back({ _T("Upstream\r\nTrouble"), false, true }); |
| | | m_vSignalList.push_back({ _T("Interlock"), false, false }); |
| | | m_vSignalList.push_back({ _T("Send\r\nAble"), false, true }); |
| | | m_vSignalList.push_back({ _T("Receive\r\nStart"), false, false }); |
| | | m_vSignalList.push_back({ _T("Job\r\nTransfer"), false, false }); |
| | | m_vSignalList.push_back({ _T("Receive\r\nComplete"), false, false }); |
| | | m_vSignalList.push_back({ _T("Shutter\r\nState"), false, false }); |
| | | // TODO: 添加更多信号,最多 64 个 |
| | | |
| | | // 补齐至 SIGNAL_GRID_SIZE 项 |
| | | while (m_vSignalList.size() < SIGNAL_GRID_SIZE) { |
| | | m_vSignalList.push_back({ _T(""), false, false }); |
| | | } |
| | | } |
| | | |
| | | void CEquipmentPage1::LoadDeviceSignals() |
| | | { |
| | | m_ctrlSignalPanel.SetGridSize(SIGNAL_GRID_ROWS, SIGNAL_GRID_COLS); |
| | | |
| | | for (int i = 0; i < SIGNAL_GRID_SIZE; ++i) { |
| | | int row = i / SIGNAL_GRID_COLS; |
| | | int col = i % SIGNAL_GRID_COLS; |
| | | |
| | | const auto& signal = m_vSignalList[i]; |
| | | |
| | | // 显示状态(用颜色表示 ON/OFF) |
| | | m_ctrlSignalPanel.SetSlotText(row, col, signal.strName); |
| | | m_ctrlSignalPanel.SetSlotStatus(row, col, signal.bCurrentState); |
| | | m_ctrlSignalPanel.SetSlotClickable(row, col, signal.bClickable); |
| | | m_ctrlSignalPanel.SetTextFont(_T("Microsoft YaHei"), 10); |
| | | } |
| | | |
| | | m_ctrlSignalPanel.SetSlotClickCallback([this](int nRow, int nCol) { |
| | | int index = nRow * SIGNAL_GRID_COLS + nCol; |
| | | if (index >= 0 && index < (int)m_vSignalList.size() && m_vSignalList[index].bClickable) { |
| | | CString strMsg; |
| | | strMsg.Format(_T("点击信号:%s"), m_vSignalList[index].strName); |
| | | AfxMessageBox(strMsg); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | BOOL CEquipmentPage1::OnInitDialog() |
| | | { |
| | | CHMPropertyPage::OnInitDialog(); |
| | | |
| | | // TODO: 在此添加额外的初始化 |
| | | m_ctrlSignalPanel.Create(AfxRegisterWndClass(0), _T("SignalGrid"), WS_CHILD | WS_VISIBLE, CRect(0, 0, 100, 100), this, 1002); |
| | | m_ctrlSignalPanel.SetColors(RGB(0, 200, 0), RGB(220, 220, 220)); |
| | | |
| | | InitSignalList(); |
| | | LoadDeviceSignals(); |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // 异常: OCX 属性页应返回 FALSE |
| | |
| | | CHMPropertyPage::OnSize(nType, cx, cy); |
| | | |
| | | // TODO: 在此处添加消息处理程序代码 |
| | | if (::IsWindow(m_ctrlSignalPanel.GetSafeHwnd())) { |
| | | CRect rc; |
| | | GetClientRect(&rc); |
| | | rc.DeflateRect(10, 10); |
| | | m_ctrlSignalPanel.MoveWindow(rc); |
| | | } |
| | | } |