// HansAdvInterfaceTestDlg.h : 头文件
//
// Create by LiaoMJ at 20211020

#pragma once
#include "afxcmn.h"
#include "afxwin.h"
#include "Lang.h"

// 脚踏消息
#ifndef WM_TOUCH_MSG
#define WM_TOUCH_MSG (WM_USER + 1095)
#endif

// CHansAdvInterfaceTestDlg 对话框
class CHansAdvInterfaceTestDlg : public CDialog
{
// 构造
public:
	CHansAdvInterfaceTestDlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
	enum { IDD = IDD_HansAdvInterfaceTest_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnBnClickedButtonReleasesystem();
	afx_msg void OnBnClickedButtonOpenfile();
	afx_msg void OnBnClickedButtonClosefile();
	afx_msg void OnBnClickedButtonMark();
	afx_msg void OnBnClickedButtonStopmark();
	afx_msg void OnBnClickedButtonGettext();
	afx_msg void OnBnClickedButtonChangetext();
	afx_msg void OnBnClickedButtonMove();
	afx_msg void OnBnClickedButtonRotate();
	afx_msg void OnTcnSelchangeTabDoc(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnEnChangeEditAlias();
	afx_msg void OnBnClickedButtonReadinport();
	afx_msg void OnBnClickedButtonWriteoutport();
	afx_msg void OnBnClickedButtonIstouch();
	afx_msg void OnBnClickedCheckChecktouch();
	afx_msg void OnCbnSelchangeComboLang();
	afx_msg void OnBnClickedButtonInitsystem();
	afx_msg void OnBnClickedButtonReadoutport();
	afx_msg void OnBnClickedButtonGetdogidinfo();
	afx_msg void OnClose();
	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnBnClickedButtonResetview();
	afx_msg void OnBnClickedButtonMarkAll();
	afx_msg void OnBnClickedButtonMarkIoFly();
	afx_msg void OnBnClickedButtonMarktypeSet();
	afx_msg void OnCbnSelchangeComboCard();
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnTimer(UINT_PTR nIDEvent);
	afx_msg void OnCbnSelchangeComboObject();
	afx_msg void OnBnClickedButtonSavefile();
	afx_msg void OnBnClickedButtonImport();
	afx_msg void OnBnClickedButtonDelObj();
	afx_msg void OnBnClickedButtonPreprocessdata();
	afx_msg void OnBnClickedButtonVector2bitmap();
	afx_msg void OnBnClickedButtonChangename();
	afx_msg void OnBnClickedButtonChangebmp();
	afx_msg void OnBnClickedButtonTest();
	DECLARE_MESSAGE_MAP()
public:
	LRESULT OnTouchreport(WPARAM wParam, LPARAM lParam); // 自定消息：脚踏检测
	void SwitchDoc(LPCTSTR lpszFile); // 切换图档
	void ShowLastError();
	void LoadLanguage();
	void Preview(); // 刷新预览图
	void UpdateView(); // 刷新控件
	void SetNote(const CString& strNote); // 设置提示信息
	UINT Card() const;
	void RefleshObjList();

protected:
	CTabCtrl m_tabDoc;
	CComboBox m_cbLang;
	CString m_strObjAlias;
	CString m_strObjContent;
	int m_nIsTouch;
	UINT m_nCheckTouchCount;
	CPoint m_pntMoveStart; // 视图移动时的起点，用于计算
	CPoint m_pntBoxSelectStart; // 鼠标左键框选的起点，用于计算
	CRect m_rectBoxSelect; // 框选框
	int m_nMarkType; // 0-激光 1-红光 2-红光边框
	
	// 预览图控制
	double m_dbViewRate;
	double m_dbViewX;
	double m_dbViewY;

	// 预览图复用参数
	double m_dbParam1;
	double m_dbParam2;
	double m_dbParam3;

	BOOL m_bInitOk; // 是否已初始化
	BOOL m_bMarking; // 是否正在打标中
	BOOL m_bMarkingFly; // 是否已触发飞行打标
	BOOL m_bCheckTouch; // 是否开启实时检测脚踏信号
	BOOL m_bMove; // 是否已按下鼠标中键/允许预览图拖拽
	BOOL m_bBoxSelect; // 是否已按下鼠标左键/允许框选

	CString m_strCfg1; // 配置文件夹，用于调试时的目录
	CString m_strCfg2; // 配置文件夹，用于安装目录

	CComboBox m_cbCard;
	CComboBox m_cbObjcet;

	// 打标模式
	int m_nMarkModel; // 打标模式 0-普通打标 1-测试飞行打标 2-飞行打标
	int m_nFlyType; // 飞行模式 0-流水线匀速 1-编码轮测速 2-编码轮测速（等距）
	BOOL m_bFlyReveral; // 流水线是否反向
	double m_dSpeed; // 流水线速度/每脉冲长度

	CString m_strReadOutPort;
	CString m_strInPort;
	CComboBox m_cbOutPort;

	CString m_strCurrentObjName;
	CString m_strBmpObjName;
public:
	afx_msg void OnBnClickedCheckRed();
	int m_nPPR;

	UINT m_uCard; // 当前选择的卡

	// by 2024/07/01 测试多轴运动
	// 轴数目
	int m_nAxisNum;
	// 运动模式
	int m_nMoveModel;
	// 运动类型
	int m_nMoveType;
	// 是否回软件原点
	BOOL m_bSoftHome;
	// 运动量
	double m_dbMoveValue;
	afx_msg void OnBnClickedCheckSofthome();
	afx_msg void OnBnClickedButtonMovemotorex();
	afx_msg void OnBnClickedButtonSofthomeex();
	afx_msg void OnBnClickedButtonStoprunex();
	void ShowError(int nErrorCode);
	
	afx_msg void OnBnClickedButtonRotatemark();
	BOOL m_bEnableAxis0;
	BOOL m_bEnableAxis1;
	BOOL m_bEnableAxis2;
	BOOL m_bEnableAxis3;
	double m_dbMoveValue1;
	double m_dbMoveValue2;
	double m_dbMoveValue3;
	CWinThread* m_pThreadMoveEx;
	afx_msg void OnBnClickedButtonRef();
};
