// CH91PayloadSoftwareDlg.h : 头文件
//

#pragma once

#include "MulticastSocket.h"
#include "ExportSimpleImgShow.h"
#include "ExportImgShowBase.h"
#include "JoyKeybordControl.h"
#include "JoyStickControlDlg.h"
#include "ControlDlgFH96Page1.h"
#include "ShowFJDataDlg.h"
#include "DlgRecvDataFromQB.h"
#include "CUDPSocket.h"
#include "ShowReplayDlg.h"
#include "MulticastSocketReceiveDlg.h"
#include "BtnST.h"
#include "EditInput.h"
#include "Serial.h"
#include "afxwin.h"
#include "afxcmn.h"
#include "DlgCameraCtrl.h"
#include "DlgIMP.h"
#include "Dlg13InstituteDCNew.h"
#include "DCOverrollDlg.h"
//#include "FrameIMP_DOWN.h"

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

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

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

public:

	// 分别代表 数据处理的线程的句柄和ID
	HANDLE m_hThread_ProcessData;
	DWORD m_ThreadID_ProcessData;

	// 分别代表 数据处理的线程的句柄和ID
	HANDLE m_hThread_ProcessDataH264;
	DWORD m_ThreadID_ProcessDataH264;

	// UDP实时接收数据
	CUDPSocket m_UDPSocket_ZH;  
	// 图像显示模块
	CExportSimpleImgShow *m_wndShowEO; // EO

	// 对话框
	CShowFJDataDlg* m_ShowFJDataDlg;  // 显示FJ数据对话框
	CShowReplayDlg* m_ShowReplayDlg; // 显示视频回放控制对话框
	CDlgRecvDataFromQB* m_ShowDlgRecvDataFromQB; //显示情报席位目标定位数据对话框
	CMulticastSocketReceiveDlg* m_MulticastSocketReceiveDlg; // 显示组播发送创建对话框


	// 视频键盘类
	CJoyKeybordControl m_JoyKeybord;
	// 摇杆控制类(对话框模式,不显示)
	CJoyStickControlDlg* m_JoyStickControlDlg; 

	// 显示组播接收信息
	CString str_MulticastSocketInfo;

	// rect变量
	CRect rect_SmallRegion;
	CRect rect_BigRegion;
// 实现
protected:
	HICON m_hIcon;
	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()

public: // 美化主界面按钮
	CButtonST m_Btn_Replay;					// 视频回放
	CButtonST m_Btn_FJ;							// 复接数据
	CButtonST m_Btn_Trans;						// 可见光,红外变换显示
	CButtonST m_Btn_CaptureVideo;			// 视频录像
	CButtonST m_Btn_CaptureImg;			// 抓图
	CButtonST m_Btn_Result;						// 录像及截图结果预览
	CButtonST m_Btn_ReadImg;				// 读取图片(数码照片)
	CButtonST m_Btn_Guide;						// 数引功能
	CButtonST m_Btn_QBFunctions;				// 参数设置
	CButtonST m_Btn_SocketSend;				// 组播发送
	CButtonST m_Btn_SocketReceive; // 组播收数
	CButtonST m_Btn_PhotoCtrl;			// 图片浏览
	CButtonST m_Btn_PayloadEvaluation;	// 载荷评价
	void DlgStyleChange(); 

public:
	afx_msg void OnDestroy();
	// 对控制页面的Tab页进行初始化
	void OnInitControlDlg();
	// 对解码器进行初始化
	void OnInitCH96Decoder();
	// 通过视频回放页面控制载荷类型,型号类型在配置文件中更改
	LRESULT PayloadTypeSet(WPARAM wParam, LPARAM lParam);
	// 可见光,红外显示复接数据
	LRESULT ShowMsgOnDlgEO(WPARAM wParam, LPARAM lParam);
	LRESULT ShowMsgOnDlgIR(WPARAM wParam, LPARAM lParam);
	// 数码照片复接数据
	LRESULT ShowMsgOnDlgDC(WPARAM wParam, LPARAM lParam);

	// 回放进度停止时,清空图像缓存
	void ShowEOImg(cv::Mat img);

	LRESULT ShowGuideAzimuthOnDlg(WPARAM wParam, LPARAM lParam);
	LRESULT ShowGuidePitchOnDlg(WPARAM wParam, LPARAM lParam);


	// 在发送控制指令之后,将焦点设置在主界面上
	LRESULT SetFocusOnMainDlg(WPARAM wParam, LPARAM lParam);

	// 显示复接数据
	void ShowImgFJData();
	afx_msg void OnBnClickedBtnShowFj();
	//afx_msg void OnBnClickedBtnSendKz();


	// 显示发送指令内容
	LRESULT ShowCtrlInstruction(WPARAM wParam, LPARAM lParam);

	// 解析开关指令
	CString TranlateBackSwitchInstructions(UINT8 switchInstruction);

	//解析载荷工作状态
	void ZHWorkState(UINT8 CurrentImgType, UINT8 SystemState, UINT8 LaserState);

	afx_msg void OnBnClickedBtnLookupResult();

	// 主界面数引控制
	CEditInput str_Guide_Azimuth; //方位角
	CEditInput str_Guide_Pitch;     //俯仰角

	float m_Guide_Azimuth; //方位角
	float m_Guide_Pitch;     //俯仰角

	virtual BOOL PreTranslateMessage(MSG* pMsg);
	afx_msg void OnTimer(UINT_PTR nIDEvent);
	//afx_msg void OnBnClickedBtnCaptureImg();

	//图像采集(视频录像功能定义在Global中)
	bool m_bCaptureEOImg;
	bool m_bCaptureIRImg;

	// 主界面显示UDP组播连接及串位情况
	afx_msg void OnBnClickedBtnReplay();

	// 主界面方位角Picture Control
	afx_msg void OnBnClickedBtnBigimage();

	// 关联对话框变量
	
	// 当前图像类型
	CString str_CurrentImgType; // 两种 EO图像/IR图像

	//  是否按下鼠标中键
	BOOL m_bMButtonDown; // TRUE: 按下鼠标中键   FALSE: 抬起鼠标中键
private:
	CUDPSocket m_UdpSend2Payload;  
	bool m_bCreatUDP;
	//CControlDlgFH96Page1* m_CControlDlgFH96Page1Dlg;
	CDlgCameraCtrl * p_DlgCameraCtrl;//吊舱控制页面
	Dlg13InstituteDCNew * p_Dlg13InstituteDCNewCtrl;//13所吊舱新控制放页面
	DCOverrollDlg *p_DlgDCOverroll;//吊舱控制总页面

public:
	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
	
	// 视频全屏显示
	BOOL m_bVideoShowFullScreen; // TRUE: 视频全屏显示    FALSE: 视频非全屏显示
	void VideoShowFullScreenONOFF();

	// 串口类, 连接视频键盘
	CSerial m_Serial; // 串口
	void DlgLanguageSet();
	afx_msg void OnBnClickedBtnMulticastsocketreceive();
	afx_msg void OnBnClickedBtnCaptureVideo();
	// 图像显示界面左键双击,目标跟踪
	afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
	// 图像显示界面右键单击,手动模式
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
	// 图像显示界面摁住鼠标中键拖动,控制伺服
	afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
	// 计算拖动鼠标时,偏移量形成的角度
	double GetOffsetAngle(int X, int Y);


	//////IMP相关
	CDlgIMP * g_DlgIMP;//IMP对话框
	//CSerial m_SerialIMP; // IMP通信串口
	//char pSerialPort[20];//串口号
	//DWORD pSerialPortBaud;//端口号
	//void onInitIMPFrame();//初始化IMP协议
	//LRESULT OnUpdateIMPDownDataChecked(WPARAM param, LPARAM  lparam);	//处理IMP下行通过校验的遥测数据

};