#pragma once #include "afxdialogex.h" #include // 定义命令函数指针类型(seq, armNo, getPos, getSlot, putPos, putSlot) using CmdFunc = std::function; // 输入控件状态 struct QuickCmdFieldMask { bool useArm = false; bool useGetPos = false; bool useGetSlot = false; bool usePutPos = false; bool usePutSlot = false; }; // CRobotCmdTestDlg 对话框 class CRobotCmdTestDlg : public CDialogEx { DECLARE_DYNAMIC(CRobotCmdTestDlg) public: CRobotCmdTestDlg(CWnd* pParent = nullptr); // 标准构造函数 virtual ~CRobotCmdTestDlg(); // 设置 EFEM 指针 void SetEFEM(SERVO::CEFEM* pEFEM); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_DIALOG_ROBOT_CMD_TEST }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 virtual BOOL OnInitDialog(); afx_msg void OnCbnSelchangeComboCmdType(); afx_msg void OnBnClickedButtonExecute(); DECLARE_MESSAGE_MAP() private: void UpdateCommandInputUI(const CString& cmdName); void AppendLogLineBatchBegin(); void AppendLogLineBatchEnd(); void TrimRichEditLineLimit(int maxLines = 100); void AppendLogLineRichStyled(const CString& content, COLORREF color = RGB(0, 0, 0)); void HighlightAllMatches(const CString& strSearch, COLORREF clrHighlight = RGB(255, 165, 0)); // 控件 CComboBox m_comboCmdType; CComboBox m_comboArmNo; CComboBox m_comboGetPos; CComboBox m_comboGetSlot; CComboBox m_comboPutPos; CComboBox m_comboPutSlot; CRichEditCtrl m_editLog; // 快捷命令映射表 SERVO::CEFEM* m_pEFEM; std::map m_mapCmdExec; };