#pragma once


// 输出双击图像时的脱靶量 
// flag = 0: 脱靶量
// flag = 1: 对话框坐标
typedef void (CALLBACK* SendPixXYOffsetProc)(CPoint xy, int flag); 

// 输出双击点与对话框中点的夹角
typedef void (CALLBACK* SendAngleProc)(double angle); 

// 当鼠标按下时,输出鼠标点与对话框中心点的距离比例系数和角度
typedef void (CALLBACK* SendDistRatioAndAngleProc)(double distRatio, double angle); 

// 通知简单图像显示对话框被左键双击
typedef void (CALLBACK* SendLButtonDblClkInfoProc)();

// 通知简单图像显示对话框被右键按下 1:Ctrl
typedef void (CALLBACK* SendButtonDownInfoProc)(int type);


// 声明 图像显示对话框类
class CSimpleImgShowDlg;

class AFX_CLASS_EXPORT CExportSimpleImgShow: public CObject
{
public:
	CExportSimpleImgShow(void);
	~CExportSimpleImgShow(void);
public:

	/************************************************************************/
	/* part 1:窗口创建、销毁、图像显示、标注等                             */
	/************************************************************************/

	// 1 功能:创建视频显示窗口
	//   输入:
	//       1. hParentWnd: 父窗口句柄
	//
	//   输出:创建成功返回TRUE,否则返回FALSE
	BOOL CreateWnd(const HWND hParentWnd);


	// 2 功能:移动(设置)窗口(整个视频显示窗口)至指定位置
	//   输入:
	//       1. clientRect:移动至该区域
	//
	//   输出:无
	void MoveWnd(const CRect &clientRect);


	// 3 功能:显示SW_SHOW 或隐藏 SW_HIDE 窗口
	//   输入:
	//       1. nCmdShow:SW_SHOW 或 SW_HIDE
	//
	//   输出:无
	void ShowWnd(const int nCmdShow);


	// 4 功能:显示一帧图像 
	//   输入:
	//       1. pImgInfo:图像信息头
	//       2. pImgData:图像数据指针
	//
	//   输出:显示成功返回TRUE,否则返回FALSE 
	BOOL  ShowImage(const BITMAPINFO* pImgInfo, BYTE* pImgData);


	// 5 功能:删除视频显示窗口,同时释放所有占用资源
	//   输入:无
	//
	//   输出:无
	void DestroyWnd();

	// 6 功能:设置回调函数
	//   输入:
	//       1. fun 函数指针
	//
	//   输出:无
	void SetCallBackFun(SendPixXYOffsetProc fun);

	// 7 功能:设置回调函数
	//   输入:
	//       1. fun 函数指针
	//
	//   输出:无
	void SetCallBackFun(SendAngleProc fun);

	// 8 功能:设置回调函数
	//   输入:
	//       1. fun 函数指针
	//
	//   输出:无
	void SetCallBackFun(SendDistRatioAndAngleProc fun);

	// 9 功能:设置回调函数
	//   输入:
	//       1. fun 函数指针
	//
	//   输出:无
	void SetCallBackFun(SendLButtonDblClkInfoProc fun);


	// 10 功能:设置是否显著标记对话框 
	//	  输入:
	//       1. bMark: 是否标记
	//       2. bEnhance:  增强该功能
	//
	//    输出:无
	void MarkDialog(bool bMark, bool bEnhance = false);

	// 11 功能:设置回调函数
	//   输入:
	//       1. fun 函数指针
	//
	//   输出:无
	void SetCallBackFun(SendButtonDownInfoProc fun);

	// 12 功能:获取当前显示图像
	//    输入:
	//         无
	//    输出:
	//         1:imgWidth 图像宽
	//         2:imgHeight 图像高
	//         3:bitCount 图像位数
	//         4:pImgData 图像数据指针
	//    返回值:
	//         成功返回true,失败返回false
	bool GetCurrentImg(int &imgWidth, int &imgHeight, int& bitCount, unsigned char* &pImgData);

	// 13 功能:设置空屏文字
	//    输入:
	//         1. str 主题文字
	//    输出:
	//         无
	//    返回值:
	//         无
	void SetThemeText(CString str);


	// 13 功能:关闭右键菜单
	void CloseRightBtnDownMenu(bool bClose = true);


	// 14 功能:清空显示
	void ClearImg();



private:
	CSimpleImgShowDlg* m_ShowDlg; // MFC 对话框
};