// CEquipmentPage1.cpp: 实现文件
|
//
|
|
#include "stdafx.h"
|
#include "Servo.h"
|
#include "CEquipmentPage1.h"
|
#include "afxdialogex.h"
|
|
|
// 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*/)
|
: CHMPropertyPage(IDD_PAGE_EQUIPMENT1, pParent)
|
{
|
m_pEquipment = nullptr;
|
}
|
|
CEquipmentPage1::~CEquipmentPage1()
|
{
|
}
|
|
void CEquipmentPage1::DoDataExchange(CDataExchange* pDX)
|
{
|
CHMPropertyPage::DoDataExchange(pDX);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CEquipmentPage1, CHMPropertyPage)
|
ON_WM_CTLCOLOR()
|
ON_WM_DESTROY()
|
ON_WM_SIZE()
|
END_MESSAGE_MAP()
|
|
|
// CEquipmentPage1 消息处理程序
|
void CEquipmentPage1::OnApply()
|
{
|
__super::OnApply();
|
}
|
|
void CEquipmentPage1::setEquipment(SERVO::CEquipment* pEquipment)
|
{
|
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
|
}
|
|
HBRUSH CEquipmentPage1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
{
|
HBRUSH hbr = CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
// TODO: 在此更改 DC 的任何特性
|
|
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
|
return hbr;
|
}
|
|
void CEquipmentPage1::OnDestroy()
|
{
|
CHMPropertyPage::OnDestroy();
|
|
// TODO: 在此处添加消息处理程序代码
|
}
|
|
void CEquipmentPage1::OnSize(UINT nType, int cx, int cy)
|
{
|
CHMPropertyPage::OnSize(nType, cx, cy);
|
|
// TODO: 在此处添加消息处理程序代码
|
if (::IsWindow(m_ctrlSignalPanel.GetSafeHwnd())) {
|
CRect rc;
|
GetClientRect(&rc);
|
rc.DeflateRect(10, 10);
|
m_ctrlSignalPanel.MoveWindow(rc);
|
}
|
}
|