#pragma once
|
#include "afxdialogex.h"
|
#include <afxrich.h>
|
|
// 定义命令函数指针类型(seq, armNo, getPos, getSlot, putPos, putSlot)
|
using CmdFunc = std::function<int(int, int, int, int, int, int, SERVO::ONWRITED onWritedBlock)>;
|
|
// 输入控件状态
|
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 OnBnClickedButtonExecute();
|
afx_msg void OnSelchangeComboCmdType();
|
afx_msg void OnSelchangeComboGetPos();
|
afx_msg void OnSelchangeComboPutPos();
|
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));
|
void UpdateSlotList(CComboBox* pComboDevice, CComboBox* pComboSlot);
|
void UpdateArmList(CComboBox* pComboDevice, CComboBox* pComboArm);
|
bool IsDualArmSupported(const CString& strDeviceName);
|
|
// 控件
|
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<CString, CmdFunc> m_mapCmdExec;
|
};
|