#pragma once #include "CHMPropertyPage.h" #include "CEquipment.h" #include "JobSlotGrid.h" // CEquipmentPage1 对话框 struct SignalInfo { CString strName; // 信号名称 bool bCurrentState; // 当前状态(ON/OFF) bool bClickable; // 是否允许点击 }; class CEquipmentPage1 : public CHMPropertyPage { DECLARE_DYNAMIC(CEquipmentPage1) public: CEquipmentPage1(CWnd* pParent = nullptr); // 标准构造函数 virtual ~CEquipmentPage1(); virtual void OnApply(); void setEquipment(SERVO::CEquipment* pEquipment); private: int m_nCurrentDeviceID; SERVO::CEquipment* m_pEquipment; std::vector m_vSignalList; CJobSlotGrid m_ctrlSignalPanel; std::map> m_mapSignalListByID; void LoadSignalListFromCSV(const CString& strFilePath); void InitSignalListForDevice(int nDeviceID); void UpdateSignalState(int nRow, int nCol, bool bNewState); void InitSignalSlotTextAndClickable(); void UpdateAllSignalStatesFromDevice(); void ResetSignalPanel(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_PAGE_EQUIPMENT1 }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnDestroy(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnTimer(UINT_PTR nIDEvent); };