|
|
// CH91PayloadSoftwareDlg.cpp : 实现文件
|
|
|
//
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
#include "CH91PayloadSoftware.h"
|
|
|
#include "CH91PayloadSoftwareDlg.h"
|
|
|
#include "afxdialogex.h"
|
|
|
#include "Global.h"
|
|
|
#include "GlobalMessage.h"
|
|
|
#include "GlobalMember.h"
|
|
|
#include "GetElevation.h"
|
|
|
#include <opencv2\opencv.hpp>
|
|
|
using namespace cv;
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
#define new DEBUG_NEW
|
|
|
#endif
|
|
|
|
|
|
|
|
|
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
|
|
|
class CAboutDlg : public CDialogEx
|
|
|
{
|
|
|
public:
|
|
|
CAboutDlg();
|
|
|
|
|
|
// 对话框数据
|
|
|
enum { IDD = IDD_ABOUTBOX };
|
|
|
|
|
|
protected:
|
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
|
|
|
|
|
// 实现
|
|
|
protected:
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
};
|
|
|
|
|
|
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
{
|
|
|
CDialogEx::DoDataExchange(pDX);
|
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
// CCH91PayloadSoftwareDlg 对话框
|
|
|
CCH91PayloadSoftwareDlg::CCH91PayloadSoftwareDlg(CWnd* pParent /*=NULL*/)
|
|
|
: CDialogEx(CCH91PayloadSoftwareDlg::IDD, pParent)
|
|
|
{
|
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|
|
|
|
|
// 分别代表 数据处理的线程的句柄和ID
|
|
|
m_hThread_ProcessData = NULL;
|
|
|
m_ThreadID_ProcessData = 0;
|
|
|
// 分别代表 数据处理的线程的句柄和ID
|
|
|
m_hThread_ProcessDataH264 = NULL;
|
|
|
m_ThreadID_ProcessDataH264 = 0;
|
|
|
|
|
|
//显示可见光及红外图像
|
|
|
m_wndShowEO = nullptr; // EO
|
|
|
|
|
|
// 是否按下鼠标中键
|
|
|
m_bMButtonDown = FALSE; // TRUE: 按下鼠标中键 FALSE: 抬起鼠标中键
|
|
|
|
|
|
//载荷控制、状态查看、视频回放控制对话框对象
|
|
|
m_ShowFJDataDlg = nullptr;
|
|
|
m_ShowReplayDlg = nullptr;
|
|
|
m_ShowDlgRecvDataFromQB = nullptr;
|
|
|
m_JoyStickControlDlg = nullptr;
|
|
|
//图像采集变量
|
|
|
m_bCaptureEOImg = false;
|
|
|
m_bCaptureIRImg = false;
|
|
|
|
|
|
// 视频全屏显示变量
|
|
|
m_bVideoShowFullScreen = FALSE;
|
|
|
|
|
|
g_bMapDirectGuide = FALSE; // 是否是地图直接导引标志
|
|
|
|
|
|
p_DlgCameraCtrl = NULL;
|
|
|
}
|
|
|
|
|
|
void CCH91PayloadSoftwareDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
{
|
|
|
CDialogEx::DoDataExchange(pDX);
|
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CCH91PayloadSoftwareDlg, CDialogEx)
|
|
|
ON_WM_SYSCOMMAND()
|
|
|
ON_WM_PAINT()
|
|
|
ON_WM_QUERYDRAGICON()
|
|
|
ON_WM_DESTROY()
|
|
|
ON_MESSAGE(WM_SHOW_CH96_INFO, CCH91PayloadSoftwareDlg::ShowMsgOnDlgEO)
|
|
|
ON_MESSAGE(WM_SHOW_IR_INFO, CCH91PayloadSoftwareDlg::ShowMsgOnDlgIR)
|
|
|
ON_MESSAGE(WM_SHOW_DC_INFO, CCH91PayloadSoftwareDlg::ShowMsgOnDlgDC)
|
|
|
|
|
|
ON_MESSAGE(WM_SHOW_GUIDE_AZIMUTH, CCH91PayloadSoftwareDlg::ShowGuideAzimuthOnDlg)
|
|
|
ON_MESSAGE(WM_SHOW_GUIDE_PITCH, CCH91PayloadSoftwareDlg::ShowGuidePitchOnDlg)
|
|
|
ON_MESSAGE(WM_SHOW_CTRL_INSTRUCTIONS, CCH91PayloadSoftwareDlg::ShowCtrlInstruction)
|
|
|
|
|
|
ON_MESSAGE(WM_SET_PAYLOAD_TYPE, CCH91PayloadSoftwareDlg::PayloadTypeSet)
|
|
|
ON_MESSAGE(WM_SETFOCUS_AFTERCONTROL, CCH91PayloadSoftwareDlg::SetFocusOnMainDlg)
|
|
|
ON_WM_MOUSEWHEEL()
|
|
|
ON_BN_CLICKED(IDC_BTN_SHOW_FJ, &CCH91PayloadSoftwareDlg::OnBnClickedBtnShowFj)
|
|
|
ON_BN_CLICKED(IDC_BTN_LOOKUP_RESULT, &CCH91PayloadSoftwareDlg::OnBnClickedBtnLookupResult)
|
|
|
ON_WM_TIMER()
|
|
|
ON_BN_CLICKED(IDC_BTN_REPLAY, &CCH91PayloadSoftwareDlg::OnBnClickedBtnReplay)
|
|
|
ON_WM_MOUSEWHEEL()
|
|
|
ON_WM_ERASEBKGND()
|
|
|
ON_WM_MBUTTONDOWN()
|
|
|
ON_BN_CLICKED(IDC_BTN_MULTICASTSOCKETRECEIVE, &CCH91PayloadSoftwareDlg::OnBnClickedBtnMulticastsocketreceive)
|
|
|
ON_BN_CLICKED(IDC_BTN_CAPTURE_VIDEO, &CCH91PayloadSoftwareDlg::OnBnClickedBtnCaptureVideo)
|
|
|
ON_WM_ERASEBKGND()
|
|
|
ON_WM_ERASEBKGND()
|
|
|
ON_WM_CTLCOLOR()
|
|
|
ON_WM_LBUTTONDBLCLK()
|
|
|
ON_WM_RBUTTONDOWN()
|
|
|
ON_WM_MBUTTONDOWN()
|
|
|
ON_WM_MOUSEMOVE()
|
|
|
ON_WM_MBUTTONUP()
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
// CCH91PayloadSoftwareDlg 消息处理程序
|
|
|
|
|
|
// 输出双击点与对话框中点的夹角
|
|
|
void CALLBACK GetAngleProcAzimuth (double angle)
|
|
|
{
|
|
|
g_Guide_Azimuth = int(angle * 10) / 10.0f;
|
|
|
::SendMessage(g_mainDlgHwnd, WM_SHOW_GUIDE_AZIMUTH, WPARAM(0), LPARAM(0));
|
|
|
}
|
|
|
|
|
|
// 输出双击点与对话框中点的夹角
|
|
|
void CALLBACK GetAngleProcPitch (double angle)
|
|
|
{
|
|
|
g_Guide_Pitch = int(angle * 10) / 10.0f;
|
|
|
|
|
|
if (g_Guide_Pitch < 0)
|
|
|
{
|
|
|
g_Guide_Pitch += 360;
|
|
|
}
|
|
|
|
|
|
if (g_Guide_Pitch >= 80 && g_Guide_Pitch <= 200)
|
|
|
{
|
|
|
g_Guide_Pitch = 90 - g_Guide_Pitch;
|
|
|
|
|
|
::SendMessage(g_mainDlgHwnd, WM_SHOW_GUIDE_PITCH, WPARAM(0), LPARAM(0));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
LRESULT CCH91PayloadSoftwareDlg::ShowGuideAzimuthOnDlg(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
m_Guide_Azimuth = g_Guide_Azimuth;
|
|
|
UpdateData(FALSE);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
LRESULT CCH91PayloadSoftwareDlg::ShowGuidePitchOnDlg(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
m_Guide_Pitch = g_Guide_Pitch;
|
|
|
UpdateData(FALSE);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
// 发送控制指令之后,将焦点置于主界面上
|
|
|
LRESULT CCH91PayloadSoftwareDlg::SetFocusOnMainDlg(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
// 设置焦点
|
|
|
GetDlgItem(IDC_BTN_REPLAY)->SetFocus();
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
BOOL CCH91PayloadSoftwareDlg::OnInitDialog()
|
|
|
{
|
|
|
CDialogEx::OnInitDialog();
|
|
|
|
|
|
// 将“关于...”菜单项添加到系统菜单中。
|
|
|
|
|
|
|
|
|
// IDM_ABOUTBOX 必须在系统命令范围内。
|
|
|
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
|
|
ASSERT(IDM_ABOUTBOX < 0xF000);
|
|
|
|
|
|
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
|
|
if (pSysMenu != NULL)
|
|
|
{
|
|
|
BOOL bNameValid;
|
|
|
CString strAboutMenu;
|
|
|
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
|
|
|
ASSERT(bNameValid);
|
|
|
if (!strAboutMenu.IsEmpty())
|
|
|
{
|
|
|
pSysMenu->AppendMenu(MF_SEPARATOR);
|
|
|
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
|
|
|
// 执行此操作
|
|
|
SetIcon(m_hIcon, TRUE); // 设置大图标
|
|
|
SetIcon(m_hIcon, FALSE); // 设置小图标
|
|
|
|
|
|
|
|
|
g_IsSending = FALSE;
|
|
|
//机载相机组播通信类 -- ypf
|
|
|
if (g_MUDPCamera.IsSerializable())
|
|
|
{
|
|
|
g_MUDPCamera.LeaveGroup();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (!g_MUDPCamera.InitGroup("224.1.1.1",60000,5,FALSE))
|
|
|
{
|
|
|
MessageBox("机载相机指令通信网口不可用,请重新配置!");
|
|
|
}
|
|
|
g_IsSending = TRUE;
|
|
|
}
|
|
|
|
|
|
// 创建结果目录文件夹
|
|
|
CString sRootDir = GetSoftwareCurrentDirectory() + "\\Result";
|
|
|
CreateDirectoryA(sRootDir, NULL);
|
|
|
// 创建载荷原始数据文件夹
|
|
|
CString sRootDir_dat = GetSoftwareCurrentDirectory() + "\\Result\\Payload Receive";
|
|
|
CreateDirectoryA(sRootDir_dat, NULL);
|
|
|
// 创建图像数据文件夹
|
|
|
CString sRootDir_h264 = GetSoftwareCurrentDirectory() + "\\Result\\VideoData";
|
|
|
CreateDirectoryA(sRootDir_h264, NULL);
|
|
|
// 设置软件工作语言,通过配置文件导入
|
|
|
DlgLanguageSet();
|
|
|
// 设置主对话框标题
|
|
|
SetWindowText(_T("FH-98机载视频监控系统"));
|
|
|
|
|
|
// 创建文件, 存储载荷软件接收原始数据(图像数据+复接数据 .tx)
|
|
|
CTime tm = CTime::GetCurrentTime();
|
|
|
CString str_DataTime;
|
|
|
str_DataTime.Format(_T("FH98_SoftwareReceive_%04d%02d%02d_%02d%02d%02d.tx"), tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute(), tm.GetSecond());//文件名中不能出现冒号
|
|
|
CString path = GetSoftwareCurrentDirectory() + "\\Result\\Payload Receive\\" + str_DataTime;
|
|
|
g_DataSavePath = path;
|
|
|
fopen_s(&g_pFileSaveCH96txData, path, _T("ab"));
|
|
|
|
|
|
str_DataTime.Format(_T("FH98_SoftwareReceive_%04d%02d%02d_%02d%02d%02d.h264"), tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute(), tm.GetSecond());//文件名中不能出现冒号
|
|
|
path = GetSoftwareCurrentDirectory() + "\\Result\\Payload Receive\\" + str_DataTime;
|
|
|
fopen_s(&g_pFileSaveVideoH264Data, path, _T("ab"));
|
|
|
|
|
|
// 获取窗口句柄
|
|
|
g_mainDlgHwnd = GetSafeHwnd();
|
|
|
// 显示FJ窗口
|
|
|
m_ShowFJDataDlg = new CShowFJDataDlg();
|
|
|
if (m_ShowFJDataDlg != NULL)
|
|
|
{
|
|
|
m_ShowFJDataDlg->Create(IDD_DLG_SHOW_FJ_DATA, this);
|
|
|
}
|
|
|
|
|
|
// 显示情报席位目标定位对话框
|
|
|
m_ShowDlgRecvDataFromQB = new CDlgRecvDataFromQB();
|
|
|
if (m_ShowDlgRecvDataFromQB != NULL)
|
|
|
{
|
|
|
m_ShowDlgRecvDataFromQB->Create(IDD_DLG_RECVFROMQB, this);
|
|
|
}
|
|
|
|
|
|
// 显示组播收数创建对话框
|
|
|
m_MulticastSocketReceiveDlg = new CMulticastSocketReceiveDlg();
|
|
|
if (m_MulticastSocketReceiveDlg != NULL)
|
|
|
{
|
|
|
m_MulticastSocketReceiveDlg->Create(IDD_DLG_MULTICASTSOCKETRECEIVE, this);
|
|
|
}
|
|
|
|
|
|
// 关联摇杆控制对话框(隐藏)
|
|
|
m_JoyStickControlDlg = new CJoyStickControlDlg();
|
|
|
if (m_JoyStickControlDlg != NULL)
|
|
|
{
|
|
|
m_JoyStickControlDlg->Create(IDD_DLG_JOYSTICKCONTROL, this);
|
|
|
}
|
|
|
|
|
|
// 设置主对话框上的文字
|
|
|
//GetDlgItem(IDC_STATIC_COMMANDSEND) -> SetWindowText(g_str_CommandSend);
|
|
|
//GetDlgItem(IDC_STATIC_COMMANDRESPONSE) -> SetWindowText(g_str_CommandResponse);
|
|
|
//GetDlgItem(IDC_STATIC_STATE) -> SetWindowText(g_str_State);
|
|
|
// 控制指令面板初始化
|
|
|
OnInitControlDlg();
|
|
|
// 显示视频回放控制窗口
|
|
|
m_ShowReplayDlg = new CShowReplayDlg();
|
|
|
if (m_ShowReplayDlg != NULL)
|
|
|
{
|
|
|
m_ShowReplayDlg->Create(IDD_DLG_REPLAY, this);
|
|
|
}
|
|
|
// 互斥对象
|
|
|
g_hMutex_ProcessDataCH96 = CreateMutexA(NULL, FALSE, NULL);
|
|
|
g_hMutex_SaveFJData = CreateMutexA(NULL,FALSE, NULL);
|
|
|
g_hMutex_ShowFJData = CreateMutexA(NULL, FALSE, NULL);
|
|
|
g_hMutex_DisplayVideoCH96 = CreateMutexA(NULL, FALSE, NULL);
|
|
|
g_hMutex_ProcessDataH264 = CreateMutexA(NULL, FALSE, NULL);
|
|
|
|
|
|
// 对解码器进行初始化
|
|
|
OnInitCH96Decoder();
|
|
|
|
|
|
// TODO: 在此添加额外的初始化
|
|
|
// 线程开始执行
|
|
|
g_bProcessDataFlag = true;
|
|
|
// 创建一个线程并立即执行,在该线程中处理接收到的数据(发送到主显示页面)
|
|
|
m_hThread_ProcessData = CreateThread(NULL, 0,
|
|
|
(LPTHREAD_START_ROUTINE)ProcessCH96Data,
|
|
|
nullptr, // 传递参数
|
|
|
0, // 线程创建后会被马上调用
|
|
|
&m_ThreadID_ProcessData);
|
|
|
//线程开始执行
|
|
|
g_bProcessDataSocketFlag = true;
|
|
|
// 创建一个线程并立即执行,在该线程中处理接收到的数据(发送到主显示页面)
|
|
|
m_hThread_ProcessDataH264 = CreateThread(NULL, 0,
|
|
|
(LPTHREAD_START_ROUTINE)ProcessH264VideoData,
|
|
|
nullptr, // 传递参数
|
|
|
0, // 线程创建后会被马上调用
|
|
|
&m_ThreadID_ProcessDataH264);
|
|
|
// 设置定时器,显示视频
|
|
|
SetTimer(1, 30, nullptr);
|
|
|
|
|
|
// 判定存储空间是否不足
|
|
|
CString root = GetSoftwareCurrentDirectory();
|
|
|
CString disk = root.Left(1);
|
|
|
if(GetFreeVolumeLen(disk.GetBuffer(0)) < 10) // 10G
|
|
|
{
|
|
|
::MessageBoxA(NULL, g_str_WarningStorage, g_str_WarningTitle, MB_OK);
|
|
|
}
|
|
|
|
|
|
// 设置窗口启动最大化
|
|
|
ShowWindow(SW_SHOWMAXIMIZED);
|
|
|
// 设置对话框风格
|
|
|
DlgStyleChange();
|
|
|
/*
|
|
|
// 将接收数据转发至移动终端
|
|
|
// 控制IP和端口绑定
|
|
|
CString fileSysName = GetSoftwareCurrentDirectory()+ "\\ini\\" + "config.ini";
|
|
|
char LocalIp1[20];
|
|
|
unsigned int LocalPort1 = 0; //本地端口
|
|
|
char RemoteIp1[20];
|
|
|
unsigned int RemotePort1 = 0; //对方端口
|
|
|
|
|
|
GetPrivateProfileString("UDPInfo_SEND2MOBILE", "UDPRemoteIP ", "0", RemoteIp1, 20, fileSysName);
|
|
|
GetPrivateProfileString("UDPInfo_SEND2MOBILE", "UDPLocalIP", "0", LocalIp1, 20, fileSysName);
|
|
|
|
|
|
RemotePort1 = GetPrivateProfileInt("UDPInfo_SEND2MOBILE", "UDPRemotePort", 0, fileSysName);
|
|
|
LocalPort1 = GetPrivateProfileInt("UDPInfo_SEND2MOBILE", "UDPLocalPort", 0, fileSysName);
|
|
|
|
|
|
assert(LocalPort1 != 0 && RemotePort1 != 0);
|
|
|
g_bCreatSend2Mobile = g_UdpSend2Mobile.StartListening(LocalIp1, LocalPort1, RemoteIp1, RemotePort1);
|
|
|
*/
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
// 设置载荷类型
|
|
|
LRESULT CCH91PayloadSoftwareDlg::PayloadTypeSet(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
// 对Tab页上显示的控制面板进行初始化
|
|
|
void CCH91PayloadSoftwareDlg::OnInitControlDlg()
|
|
|
{
|
|
|
//关联控制指令界面
|
|
|
CRect rc_ControlInstruction;
|
|
|
GetDlgItem(IDC_STATIC_CONTROLINSTRUCTION_FH96)->GetWindowRect(rc_ControlInstruction);
|
|
|
ScreenToClient(rc_ControlInstruction);
|
|
|
|
|
|
/*m_CControlDlgFH96Page1Dlg = new CControlDlgFH96Page1();
|
|
|
if (m_CControlDlgFH96Page1Dlg != NULL)
|
|
|
{
|
|
|
m_CControlDlgFH96Page1Dlg->Create(IDD_DLG_CONTROL_96_1, this);
|
|
|
}
|
|
|
m_CControlDlgFH96Page1Dlg->MoveWindow(&rc_ControlInstruction);
|
|
|
m_CControlDlgFH96Page1Dlg->ShowWindow(SW_SHOW);*/
|
|
|
|
|
|
p_DlgCameraCtrl = new CDlgCameraCtrl();
|
|
|
if (p_DlgCameraCtrl != NULL)
|
|
|
{
|
|
|
p_DlgCameraCtrl->Create(IDD_DLG_CAMERA_CTRL, this);
|
|
|
}
|
|
|
p_DlgCameraCtrl->MoveWindow(&rc_ControlInstruction);
|
|
|
p_DlgCameraCtrl->ShowWindow(SW_SHOW);
|
|
|
}
|
|
|
// 对解码器进行初始化
|
|
|
void CCH91PayloadSoftwareDlg::OnInitCH96Decoder()
|
|
|
{
|
|
|
// 对显示区域初始化
|
|
|
GetDlgItem(IDC_STATIC_EO_REGION)->GetWindowRect(rect_SmallRegion);
|
|
|
ScreenToClient(rect_SmallRegion);
|
|
|
GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->GetWindowRect(rect_BigRegion);
|
|
|
ScreenToClient(rect_BigRegion);
|
|
|
// CH96解码器
|
|
|
CString fileSysName = GetSoftwareCurrentDirectory()+ "\\ini\\" + "config.ini";
|
|
|
char ComputerConfiguration[20];
|
|
|
GetPrivateProfileString("COMPUTER_CONFIGURATION", "ComputerConfiguration ", "0", ComputerConfiguration, 20, fileSysName);
|
|
|
CString str_ComputerConfiguration = ComputerConfiguration;
|
|
|
if (str_ComputerConfiguration == "HIGH")
|
|
|
{
|
|
|
g_bGoodComputer = TRUE;
|
|
|
}
|
|
|
else if (str_ComputerConfiguration == "LOW")
|
|
|
{
|
|
|
g_bGoodComputer = FALSE;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MessageBoxA(_T("计算机配置类型有误,系统自动选择高配置环境!"));
|
|
|
g_bGoodComputer = TRUE;
|
|
|
}
|
|
|
// 如果电脑不是低配置电脑,则对显示空间进行模块初始化,同时设置为软解码
|
|
|
if (g_bGoodComputer != FALSE)
|
|
|
{
|
|
|
if (m_wndShowEO == NULL)
|
|
|
{
|
|
|
m_wndShowEO = new CExportSimpleImgShow();
|
|
|
}
|
|
|
|
|
|
if (g_mainDlgHwnd != NULL && m_wndShowEO != NULL)
|
|
|
{
|
|
|
m_wndShowEO->CreateWnd(g_mainDlgHwnd);
|
|
|
|
|
|
CRect rect;
|
|
|
GetDlgItem(IDC_STATIC_EO_REGION)->GetWindowRect(&rect);
|
|
|
ScreenToClient(&rect);
|
|
|
|
|
|
m_wndShowEO->MoveWnd(rect);
|
|
|
m_wndShowEO->ShowWnd(SW_SHOW);
|
|
|
m_wndShowEO->SetCallBackFun(GetEOImgCenterOffset);
|
|
|
m_wndShowEO->SetCallBackFun(GetEOIRImgRightButtonDown);
|
|
|
m_wndShowEO->SetCallBackFun(GetDistRatioAndAngleThroughImg);
|
|
|
}
|
|
|
// 软解码
|
|
|
g_CH96_h264decoder = DecoderFactory::CreateDecoder();
|
|
|
if (g_CH96_h264decoder != nullptr)
|
|
|
{
|
|
|
g_CH96_h264decoder->init(1920, 1080, 0, 0, 2);
|
|
|
// 回调函数,将文件放置内存并进行操作
|
|
|
g_CH96_h264decoder->setDecodingCallback(CH96_h264DecodeResultCallbackFun);
|
|
|
}
|
|
|
}
|
|
|
// 如果电脑配置较低,则设置为硬解码,同时将图片直接绘制在控件上
|
|
|
else
|
|
|
{
|
|
|
// 硬解码
|
|
|
g_CH96_h264decoder = DecoderFactory::CreateDecoder(DEC_HARDWARE);
|
|
|
if (g_CH96_h264decoder != nullptr)
|
|
|
{
|
|
|
// 直接将绘制结果显示到控件上
|
|
|
g_CH96_h264decoder->init(1920, 1080, 0, 0, 2, GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->GetSafeHwnd());
|
|
|
// 回调函数,将文件放置内存并进行操作
|
|
|
g_CH96_h264decoder->setDecodingCallback(CH96_h264DecodeResultCallbackFun);
|
|
|
// 改变显示区域
|
|
|
GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->SetWindowPos(NULL ,0, 0, rect_SmallRegion.Width(), rect_SmallRegion.Height(), SWP_NOZORDER);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
void CCH91PayloadSoftwareDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|
|
{
|
|
|
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
|
|
|
{
|
|
|
CAboutDlg dlgAbout;
|
|
|
dlgAbout.DoModal();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
CDialogEx::OnSysCommand(nID, lParam);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 如果向对话框添加最小化按钮,则需要下面的代码
|
|
|
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
|
|
|
// 这将由框架自动完成。
|
|
|
|
|
|
void CCH91PayloadSoftwareDlg::OnPaint()
|
|
|
{
|
|
|
if (IsIconic())
|
|
|
{
|
|
|
CPaintDC dc(this); // 用于绘制的设备上下文
|
|
|
|
|
|
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
|
|
|
|
|
// 使图标在工作区矩形中居中
|
|
|
int cxIcon = GetSystemMetrics(SM_CXICON);
|
|
|
int cyIcon = GetSystemMetrics(SM_CYICON);
|
|
|
CRect rect;
|
|
|
GetClientRect(&rect);
|
|
|
int x = (rect.Width() - cxIcon + 1) / 2;
|
|
|
int y = (rect.Height() - cyIcon + 1) / 2;
|
|
|
|
|
|
// 绘制图标
|
|
|
dc.DrawIcon(x, y, m_hIcon);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
CDialogEx::OnPaint();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//当用户拖动最小化窗口时系统调用此函数取得光标
|
|
|
//显示。
|
|
|
HCURSOR CCH91PayloadSoftwareDlg::OnQueryDragIcon()
|
|
|
{
|
|
|
return static_cast<HCURSOR>(m_hIcon);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CCH91PayloadSoftwareDlg::OnDestroy()
|
|
|
{
|
|
|
CDialogEx::OnDestroy();
|
|
|
|
|
|
//关闭机载相机指令发送
|
|
|
if (g_MUDPCamera.IsSerializable())
|
|
|
{
|
|
|
g_MUDPCamera.SetReadCallBack(NULL,NULL);
|
|
|
g_MUDPCamera.LeaveGroup();
|
|
|
g_IsSending = FALSE;
|
|
|
}
|
|
|
|
|
|
// 关闭ProcessData线程
|
|
|
g_bProcessDataFlag = false;
|
|
|
g_bProcessDataSocketFlag = false;
|
|
|
|
|
|
// 关闭存储文件
|
|
|
if (g_pFileSaveCH96txData != NULL)
|
|
|
{
|
|
|
fclose(g_pFileSaveCH96txData);
|
|
|
g_pFileSaveCH96txData = NULL;
|
|
|
// 如果存储文件大小为0,则删除该文件
|
|
|
CFileStatus m_Status; // 文件结构体
|
|
|
if (CFile::GetStatus(g_DataSavePath, m_Status))
|
|
|
{
|
|
|
if (m_Status.m_size == 0)
|
|
|
{
|
|
|
DeleteFile(g_DataSavePath);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 关闭存储文件
|
|
|
if (g_pFileSaveVideoDataCH96 != NULL)
|
|
|
{
|
|
|
fclose(g_pFileSaveVideoDataCH96);
|
|
|
g_pFileSaveVideoDataCH96 = NULL;
|
|
|
}
|
|
|
|
|
|
// 关闭存储文件
|
|
|
if (g_pFileSaveVideoH264Data != NULL)
|
|
|
{
|
|
|
fclose(g_pFileSaveVideoH264Data);
|
|
|
g_pFileSaveVideoH264Data = NULL;
|
|
|
}
|
|
|
|
|
|
// 释放图像显示窗口资源
|
|
|
if (m_wndShowEO != nullptr)
|
|
|
{
|
|
|
m_wndShowEO->DestroyWnd();
|
|
|
m_wndShowEO = NULL;
|
|
|
}
|
|
|
|
|
|
if (m_ShowReplayDlg != NULL)
|
|
|
{
|
|
|
delete m_ShowReplayDlg;
|
|
|
m_ShowReplayDlg = nullptr;
|
|
|
}
|
|
|
if (m_ShowFJDataDlg != NULL)
|
|
|
{
|
|
|
delete m_ShowFJDataDlg;
|
|
|
m_ShowFJDataDlg = nullptr;
|
|
|
}
|
|
|
|
|
|
if (m_ShowDlgRecvDataFromQB != NULL)
|
|
|
{
|
|
|
delete m_ShowDlgRecvDataFromQB;
|
|
|
m_ShowDlgRecvDataFromQB = nullptr;
|
|
|
}
|
|
|
// 卸载解码器
|
|
|
if (g_CH96_h264decoder != nullptr)
|
|
|
{
|
|
|
DecoderFactory::DestroyDecoder(g_CH96_h264decoder);
|
|
|
}
|
|
|
// 卸载视频键盘
|
|
|
m_JoyKeybord.OnDestoryJoyKeybord();
|
|
|
|
|
|
if(p_DlgCameraCtrl)
|
|
|
{
|
|
|
delete p_DlgCameraCtrl;
|
|
|
p_DlgCameraCtrl = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 显示可见光图像复接信息
|
|
|
LRESULT CCH91PayloadSoftwareDlg::ShowMsgOnDlgEO(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
//ShowImgFJData();
|
|
|
return 0;
|
|
|
}
|
|
|
// 显示红外图像复接信息
|
|
|
LRESULT CCH91PayloadSoftwareDlg::ShowMsgOnDlgIR(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
// 显示图像复接信息
|
|
|
//ShowImgFJData();
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
// 显示数码照片复接数据
|
|
|
LRESULT CCH91PayloadSoftwareDlg::ShowMsgOnDlgDC(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
// 显示图像复接信息
|
|
|
//ShowImgFJData();
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 显示复接数据&主界面显示重要数据
|
|
|
void CCH91PayloadSoftwareDlg::ShowImgFJData()
|
|
|
{
|
|
|
if (m_ShowFJDataDlg != nullptr)
|
|
|
{
|
|
|
//复接数据窗口显示CH96数据
|
|
|
m_ShowFJDataDlg->ShowCH96FJData(g_CH96TransFJData);
|
|
|
// 将复接数据送入队列,并用于目标定位
|
|
|
if (g_CH96QBData.bValid == true) // 只要复接数据有效 就入队 不管定不定位
|
|
|
{
|
|
|
// 复接数据入栈
|
|
|
PushToFrameDataDeque(g_CH96QBData);
|
|
|
}
|
|
|
// 解析开关指令并显示在主界面上
|
|
|
//GetDlgItem(IDC_EDIT_BACKSWITCHINSTRUCTION)->SetWindowText(TranlateBackSwitchInstructions(g_CH96TransFJData.SwitchCmd));
|
|
|
//解析载荷工作状态并显示在主界面上
|
|
|
//ZHWorkState(g_CH96TransFJData.Status1 & 0x40, g_CH96TransFJData.Status2, g_CH96TransFJData.LaserState & 0x01);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//显示复接数据面板
|
|
|
void CCH91PayloadSoftwareDlg::OnBnClickedBtnShowFj()
|
|
|
{
|
|
|
if (m_ShowFJDataDlg != NULL)
|
|
|
{
|
|
|
if (TRUE == m_ShowFJDataDlg->IsWindowVisible())
|
|
|
{
|
|
|
m_ShowFJDataDlg->ShowWindow(SW_HIDE);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
m_ShowFJDataDlg->ShowWindow(SW_SHOW);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
//显示载荷回放数据对话框
|
|
|
void CCH91PayloadSoftwareDlg::OnBnClickedBtnReplay()
|
|
|
{
|
|
|
if(m_ShowReplayDlg != NULL)
|
|
|
{
|
|
|
if (TRUE == m_ShowReplayDlg->IsWindowVisible())
|
|
|
{
|
|
|
m_ShowReplayDlg->ShowWindow(SW_HIDE);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
m_ShowReplayDlg->ShowWindow(SW_SHOW);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 显示发送指令内容
|
|
|
LRESULT CCH91PayloadSoftwareDlg::ShowCtrlInstruction(WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
//GetDlgItem(IDC_EDIT_CTRLINSTRUCTIONS)->SetWindowText(g_sCtrlInstruction);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
//解析开关指令
|
|
|
CString CCH91PayloadSoftwareDlg::TranlateBackSwitchInstructions(UINT8 switchInstruction)
|
|
|
{
|
|
|
static CString sInstruction;
|
|
|
//***********************************通用指令回报解析****************************//
|
|
|
if (0x00 == switchInstruction) // 速度配置
|
|
|
{
|
|
|
//sInstruction = "速度配置";
|
|
|
}
|
|
|
else if (0x15 == switchInstruction) // 锁定模式
|
|
|
{
|
|
|
sInstruction = "锁定模式";
|
|
|
}
|
|
|
else if (0x17 == switchInstruction) // 扫描模式
|
|
|
{
|
|
|
sInstruction = "扫描模式";
|
|
|
}
|
|
|
else if (0x19 == switchInstruction) // 数字引导模式
|
|
|
{
|
|
|
sInstruction = "数字引导";
|
|
|
}
|
|
|
else if (0x1B == switchInstruction) // 平台复位
|
|
|
{
|
|
|
sInstruction = "平台复位";
|
|
|
}
|
|
|
else if (0x1D == switchInstruction) // 补漂方位-
|
|
|
{
|
|
|
sInstruction = "补漂方位-";
|
|
|
}
|
|
|
else if (0x1F == switchInstruction) // 补漂方位+
|
|
|
{
|
|
|
sInstruction = "补漂方位+";
|
|
|
}
|
|
|
else if (0x21 == switchInstruction) // 补漂俯仰-
|
|
|
{
|
|
|
sInstruction = "补漂俯仰-";
|
|
|
}
|
|
|
else if (0x23 == switchInstruction) // 补漂俯仰+
|
|
|
{
|
|
|
sInstruction = "补漂俯仰+";
|
|
|
}
|
|
|
else if (0x25 == switchInstruction) // 手动模式
|
|
|
{
|
|
|
sInstruction = "手动模式";
|
|
|
}
|
|
|
else if (0x27 == switchInstruction) // 跟踪模式
|
|
|
{
|
|
|
sInstruction = "跟踪模式";
|
|
|
}
|
|
|
else if (0x81 == switchInstruction) // 红外白热
|
|
|
{
|
|
|
sInstruction = "红外白热";
|
|
|
}
|
|
|
else if (0x82 == switchInstruction) // 红外黑热
|
|
|
{
|
|
|
sInstruction = "红外黑热";
|
|
|
}
|
|
|
else if (0x85 == switchInstruction) // 焦距+
|
|
|
{
|
|
|
sInstruction = "焦距+";
|
|
|
}
|
|
|
else if (0x86 == switchInstruction) // 焦距-
|
|
|
{
|
|
|
sInstruction = "焦距-";
|
|
|
}
|
|
|
else if (0x87 == switchInstruction) // 红外小视场
|
|
|
{
|
|
|
sInstruction = "红外小视场";
|
|
|
}
|
|
|
else if (0x89 == switchInstruction) // 红外大视场
|
|
|
{
|
|
|
sInstruction = "红外大视场";
|
|
|
}
|
|
|
else if (0xA1 == switchInstruction) // OSD on/off
|
|
|
{
|
|
|
sInstruction = "OSD ON/OFF";
|
|
|
}
|
|
|
else if (0xA3 == switchInstruction) // 图像切换
|
|
|
{
|
|
|
sInstruction = "图像切换";
|
|
|
}
|
|
|
else if (0xB5 == switchInstruction) // 画中画开
|
|
|
{
|
|
|
sInstruction = "画中画开";
|
|
|
}
|
|
|
else if (0xB6 == switchInstruction) // 画中画关
|
|
|
{
|
|
|
sInstruction = "画中画关";
|
|
|
}
|
|
|
else if (0xB7 == switchInstruction) // 图像稳定关
|
|
|
{
|
|
|
sInstruction = "图像稳定关";
|
|
|
}
|
|
|
else if (0xB8 == switchInstruction) // 图像稳定开
|
|
|
{
|
|
|
sInstruction = "图像稳定开";
|
|
|
}
|
|
|
else if (0xBB == switchInstruction) // 可见光透雾1
|
|
|
{
|
|
|
sInstruction = "可见光透雾1";
|
|
|
}
|
|
|
else if (0xBC == switchInstruction) // 可见光透雾2
|
|
|
{
|
|
|
sInstruction = "可见光透雾2";
|
|
|
}
|
|
|
else if (0xBD == switchInstruction) // 可见光透雾3
|
|
|
{
|
|
|
sInstruction = "可见光透雾3";
|
|
|
}
|
|
|
else if (0xBE == switchInstruction) // 可见光透雾关
|
|
|
{
|
|
|
sInstruction = "可见光透雾关";
|
|
|
}
|
|
|
else if (0xC1 == switchInstruction) // 开始连续照相
|
|
|
{
|
|
|
sInstruction = "连续照相";
|
|
|
}
|
|
|
else if (0xC3 == switchInstruction) // 停止照相
|
|
|
{
|
|
|
sInstruction = "停止照相";
|
|
|
}
|
|
|
else if (0xC6 == switchInstruction) // 拍一张照
|
|
|
{
|
|
|
sInstruction = "拍一张照";
|
|
|
}
|
|
|
else if (0x91 == switchInstruction) // 激光测距开
|
|
|
{
|
|
|
sInstruction = "激光测距开";
|
|
|
}
|
|
|
else if (0x92 == switchInstruction) // 激光测距关
|
|
|
{
|
|
|
sInstruction = "激光测距关";
|
|
|
}
|
|
|
else if (0x93 == switchInstruction) // 激光电源开
|
|
|
{
|
|
|
sInstruction = "激光电源开";
|
|
|
}
|
|
|
else if (0x94 == switchInstruction) // 激光电源关
|
|
|
{
|
|
|
sInstruction = "激光电源关";
|
|
|
}
|
|
|
|
|
|
return sInstruction;
|
|
|
}
|
|
|
|
|
|
//解析载荷工作状态
|
|
|
void CCH91PayloadSoftwareDlg::ZHWorkState(UINT8 CurrentImgType, UINT8 SystemState, UINT8 LaserState)
|
|
|
{
|
|
|
CString workState_Show;
|
|
|
CString SystemState_Show; //激光测距仪器
|
|
|
CString LaserState_Show; //激光状态
|
|
|
CString LaserDistance_Show;//激光距离
|
|
|
//当前图像状态
|
|
|
if(1 == CurrentImgType)
|
|
|
{
|
|
|
str_CurrentImgType = "IR图像";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
str_CurrentImgType = "EO图像";
|
|
|
}
|
|
|
|
|
|
|
|
|
//伺服状态
|
|
|
if (0x00 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "手动状态";
|
|
|
}
|
|
|
else if (0x01 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "跟踪状态";
|
|
|
}
|
|
|
else if (0x02 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "锁定状态";
|
|
|
}
|
|
|
else if (0x03 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "数引状态";
|
|
|
}
|
|
|
else if (0x04 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "扫描状态";
|
|
|
}
|
|
|
else if (0x05 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "保护状态";
|
|
|
}
|
|
|
else if (0x07 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "初始化";
|
|
|
}
|
|
|
else if (0x08 == SystemState)
|
|
|
{
|
|
|
SystemState_Show = "跟随状态";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
SystemState_Show = "N/A异常";
|
|
|
}
|
|
|
//升降机构
|
|
|
if (1 == LaserState)
|
|
|
{
|
|
|
LaserState_Show = "测距关";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
LaserState_Show = "测距开";
|
|
|
}
|
|
|
LaserDistance_Show.Format("%d",g_CH96TransFJData.LaserDis);
|
|
|
|
|
|
//GetDlgItem(IDC_EDIT_CURRENTIMGTYPE)->SetWindowText(str_CurrentImgType);
|
|
|
//GetDlgItem(IDC_EDIT_WORKSTATE)->SetWindowText(SystemState_Show);
|
|
|
//GetDlgItem(IDC_EDIT_LaserState)->SetWindowText(LaserState_Show + "—" + LaserDistance_Show);
|
|
|
}
|
|
|
|
|
|
// 调用图片显示对话框
|
|
|
void CCH91PayloadSoftwareDlg::OnBnClickedBtnLookupResult()
|
|
|
{
|
|
|
// 结果预览
|
|
|
char exeFullPath[MAX_PATH];
|
|
|
GetModuleFileName(NULL, exeFullPath, MAX_PATH);
|
|
|
|
|
|
CString Directy;
|
|
|
Directy.Format("%s", exeFullPath);
|
|
|
|
|
|
int index = Directy.ReverseFind('\\');
|
|
|
Directy.Delete(index, Directy.GetLength() - index);
|
|
|
Directy = Directy + "\\Result";
|
|
|
ShellExecute(NULL, NULL, Directy, NULL, NULL, SW_SHOW);
|
|
|
}
|
|
|
|
|
|
void CCH91PayloadSoftwareDlg::ShowEOImg(cv::Mat img)
|
|
|
{
|
|
|
// 如果是实时模式,则显示可见光图像
|
|
|
if (img.empty() == false && img.cols == 1920 && img.rows == 1080 && img.type() == CV_8UC3 )
|
|
|
{
|
|
|
BITMAPINFO info;
|
|
|
info.bmiHeader.biBitCount = 24;
|
|
|
info.bmiHeader.biHeight = 1080;
|
|
|
info.bmiHeader.biWidth = 1920;
|
|
|
cv::flip(img, img, 0);
|
|
|
m_wndShowEO->ShowImage(&info, img.data);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
BOOL CCH91PayloadSoftwareDlg::PreTranslateMessage(MSG* pMsg)
|
|
|
{
|
|
|
// 键盘消息
|
|
|
if (pMsg->message == WM_KEYDOWN)
|
|
|
{
|
|
|
// 忽略ESC和回车键
|
|
|
if (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)
|
|
|
{
|
|
|
return TRUE;
|
|
|
}
|
|
|
// F1键控制“视频控制”窗口的显示/隐藏
|
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
|
if(pMsg->wParam == VK_F1)
|
|
|
{
|
|
|
if (TRUE == m_ShowReplayDlg->IsWindowVisible())
|
|
|
{
|
|
|
m_ShowReplayDlg->ShowWindow(SW_HIDE);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
m_ShowReplayDlg->ShowWindow(SW_SHOW);
|
|
|
}
|
|
|
}
|
|
|
// F2键控制“状态查看”窗口的现显示/隐藏
|
|
|
if(pMsg->wParam == VK_F2)
|
|
|
{
|
|
|
if (TRUE == m_ShowFJDataDlg->IsWindowVisible())
|
|
|
{
|
|
|
m_ShowFJDataDlg->ShowWindow(SW_HIDE);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
m_ShowFJDataDlg->ShowWindow(SW_SHOW);
|
|
|
}
|
|
|
}
|
|
|
// F3键控制“组播收数”串口显隐
|
|
|
if(pMsg->wParam == VK_F3)
|
|
|
{
|
|
|
if (TRUE == m_MulticastSocketReceiveDlg->IsWindowVisible())
|
|
|
{
|
|
|
m_MulticastSocketReceiveDlg->ShowWindow(SW_HIDE);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
m_MulticastSocketReceiveDlg->ShowWindow(SW_SHOW);
|
|
|
}
|
|
|
}
|
|
|
// F5控制“视频录制”功能
|
|
|
if (pMsg -> wParam == VK_F5)
|
|
|
{
|
|
|
OnBnClickedBtnCaptureVideo();
|
|
|
}
|
|
|
// F6控制“结果预览”功能
|
|
|
if (pMsg -> wParam == VK_F6)
|
|
|
{
|
|
|
OnBnClickedBtnLookupResult();
|
|
|
}
|
|
|
// Ctrl + 1控制“图像显示全屏切换”功能
|
|
|
if (pMsg -> wParam == '1')
|
|
|
{
|
|
|
VideoShowFullScreenONOFF();
|
|
|
|
|
|
// if (::GetKeyState(VK_CONTROL) < 0)
|
|
|
// {
|
|
|
// VideoShowFullScreenONOFF();
|
|
|
// }
|
|
|
}
|
|
|
}
|
|
|
// 鼠标消息
|
|
|
|
|
|
return CDialogEx::PreTranslateMessage(pMsg);
|
|
|
}
|
|
|
|
|
|
void CCH91PayloadSoftwareDlg::OnTimer(UINT_PTR nIDEvent)
|
|
|
{
|
|
|
// 定时器1显示视频
|
|
|
if (nIDEvent == 1)
|
|
|
{
|
|
|
// 如果不为配置较低电脑,则进行软解码并显示队列中图像
|
|
|
if (g_bGoodComputer != FALSE)
|
|
|
{
|
|
|
// 显示可见光
|
|
|
WaitForSingleObject(g_hMutex_DisplayVideoCH96, INFINITE); //取可见光图像互斥句柄
|
|
|
if (g_CH96VideoDeque.empty() == false)
|
|
|
{
|
|
|
cv::Mat localEO;
|
|
|
localEO = g_CH96VideoDeque.front();
|
|
|
std::deque<cv::Mat>::iterator iter;
|
|
|
iter = g_CH96VideoDeque.begin();
|
|
|
iter->data = nullptr;
|
|
|
g_CH96VideoDeque.pop_front();
|
|
|
ReleaseMutex(g_hMutex_DisplayVideoCH96);
|
|
|
|
|
|
ShowEOImg(localEO);
|
|
|
|
|
|
if (g_bCaptureImg == true || g_bRun == TRUE)
|
|
|
{
|
|
|
g_QB.image.bValid = true;
|
|
|
g_QB.image.srcImg.bitcount = 24;
|
|
|
g_QB.image.srcImg.ImgWidth = localEO.cols;
|
|
|
g_QB.image.srcImg.ImgHeight = localEO.rows;
|
|
|
|
|
|
g_QB.framePart = g_CH96QBData;
|
|
|
|
|
|
if (localEO.type() == CV_8UC1)
|
|
|
{
|
|
|
g_QB.image.srcImg.bitcount = 8;
|
|
|
}
|
|
|
|
|
|
if (g_QB.image.srcImg.buff != nullptr)
|
|
|
{
|
|
|
delete [] g_QB.image.srcImg.buff;
|
|
|
g_QB.image.srcImg.buff = nullptr;
|
|
|
}
|
|
|
int bufferSize = g_QB.image.srcImg.ImgWidth * g_QB.image.srcImg.ImgHeight * g_QB.image.srcImg.bitcount / 8;
|
|
|
g_QB.image.srcImg.buff = new unsigned char[bufferSize];
|
|
|
memcpy(g_QB.image.srcImg.buff, localEO.data, bufferSize);
|
|
|
}
|
|
|
|
|
|
if (g_bCaptureImg == true)
|
|
|
{
|
|
|
g_bCaptureImg = false;
|
|
|
::SendMessageA(g_mapMatchDlg, WM_CAPTURE_IMG_WHEN_MAPMATCH, WPARAM(0), LPARAM(0));
|
|
|
}
|
|
|
|
|
|
|
|
|
if (g_bRun == TRUE)
|
|
|
{
|
|
|
cv::Mat img;
|
|
|
cv::flip(localEO, img, 0);
|
|
|
int bufferSize = g_QB.image.srcImg.ImgWidth * g_QB.image.srcImg.ImgHeight * g_QB.image.srcImg.bitcount / 8;
|
|
|
memcpy(g_QB.image.srcImg.buff, img.data, bufferSize);
|
|
|
|
|
|
// 线程互斥
|
|
|
WaitForSingleObject(g_hMutex_ImgStitch, INFINITE);
|
|
|
QBStru local;
|
|
|
CloneQBData(&g_QB, &local);
|
|
|
if(g_StitchImgDeque.size() >= 2)
|
|
|
{
|
|
|
std::deque<QBStru>::iterator iter;
|
|
|
iter = g_StitchImgDeque.begin();
|
|
|
|
|
|
// 释放指针指向的内存
|
|
|
SAFE_DELETE_ARRAY(iter->image.srcImg.buff);
|
|
|
SAFE_DELETE_ARRAY(iter->image.dstImg.buff);
|
|
|
SAFE_DELETE_ARRAY(iter->image.geoImg.buff);
|
|
|
|
|
|
g_StitchImgDeque.pop_front();
|
|
|
}
|
|
|
|
|
|
g_StitchImgDeque.push_back(local);
|
|
|
local.image.srcImg.buff = nullptr;
|
|
|
local.image.dstImg.buff = nullptr;
|
|
|
local.image.geoImg.buff = nullptr;
|
|
|
|
|
|
ReleaseMutex(g_hMutex_ImgStitch);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ReleaseMutex(g_hMutex_DisplayVideoCH96);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
CDialogEx::OnTimer(nIDEvent);
|
|
|
}
|
|
|
|
|
|
// 图像显示全屏切换
|
|
|
void CCH91PayloadSoftwareDlg::VideoShowFullScreenONOFF()
|
|
|
{
|
|
|
if (m_bVideoShowFullScreen == FALSE)
|
|
|
{
|
|
|
m_bVideoShowFullScreen = TRUE;
|
|
|
// 隐藏其它控件
|
|
|
HWND hwndChild = ::GetWindow(g_mainDlgHwnd, GW_CHILD);
|
|
|
while (hwndChild)
|
|
|
{
|
|
|
CWnd::FromHandle(hwndChild)->ShowWindow(FALSE);
|
|
|
hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
|
|
|
}
|
|
|
// 改变显示区域
|
|
|
// 高性能配置,软解码情况
|
|
|
if (g_bGoodComputer != FALSE)
|
|
|
{
|
|
|
// 全屏显示
|
|
|
CRect rect;
|
|
|
GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->GetWindowRect(&rect);
|
|
|
ScreenToClient(&rect);
|
|
|
m_wndShowEO->MoveWnd(rect);
|
|
|
m_wndShowEO->ShowWnd(SW_SHOW);
|
|
|
}
|
|
|
// 低性能配置,硬解码情况
|
|
|
else
|
|
|
{
|
|
|
// 全屏显示
|
|
|
GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->SetWindowPos(NULL ,0, 0, rect_BigRegion.Width(), rect_BigRegion.Height(), SWP_NOZORDER);
|
|
|
// 显示控件
|
|
|
GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->ShowWindow(TRUE);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
m_bVideoShowFullScreen = FALSE;
|
|
|
// 显示其它控件
|
|
|
HWND hwndChild = ::GetWindow(g_mainDlgHwnd, GW_CHILD);
|
|
|
while (hwndChild)
|
|
|
{
|
|
|
CWnd::FromHandle(hwndChild)->ShowWindow(TRUE);
|
|
|
hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
|
|
|
}
|
|
|
// 改变显示区域
|
|
|
// 高性能配置,软解码情况
|
|
|
if (g_bGoodComputer != FALSE)
|
|
|
{
|
|
|
// 局部显示
|
|
|
CRect rect;
|
|
|
GetDlgItem(IDC_STATIC_EO_REGION)->GetWindowRect(&rect);
|
|
|
ScreenToClient(&rect);
|
|
|
m_wndShowEO->MoveWnd(rect);
|
|
|
m_wndShowEO->ShowWnd(SW_SHOW);
|
|
|
}
|
|
|
// 低性能配置,硬解码情况
|
|
|
else
|
|
|
{
|
|
|
// 局部显示
|
|
|
GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->SetWindowPos(NULL ,0, 0, rect_SmallRegion.Width(), rect_SmallRegion.Height(), SWP_NOZORDER);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 设置对话框风格
|
|
|
void CCH91PayloadSoftwareDlg::DlgStyleChange()
|
|
|
{
|
|
|
// 视频控制
|
|
|
m_Btn_Replay.SubclassDlgItem(IDC_BTN_REPLAY, this);
|
|
|
m_Btn_Replay.SetIcon(IDI_ICON_MAIN_REPLAY);
|
|
|
m_Btn_Replay.SetTooltipText("Video Control");
|
|
|
m_Btn_Replay.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
|
|
|
m_Btn_Replay.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));// 鼠标指向按钮时候的文字颜色
|
|
|
m_Btn_Replay.DrawTransparent(TRUE);
|
|
|
|
|
|
// 状态查看
|
|
|
m_Btn_FJ.SubclassDlgItem(IDC_BTN_SHOW_FJ, this);
|
|
|
m_Btn_FJ.SetIcon(IDI_ICON_MAIN_FJ);
|
|
|
m_Btn_FJ.SetTooltipText("Status Inquiry");
|
|
|
m_Btn_FJ.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
|
|
|
m_Btn_FJ.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));
|
|
|
m_Btn_FJ.DrawTransparent(TRUE);
|
|
|
// 组播收数
|
|
|
m_Btn_SocketReceive.SubclassDlgItem(IDC_BTN_MULTICASTSOCKETRECEIVE, this);
|
|
|
m_Btn_SocketReceive.SetIcon(IDI_ICON_MAIN_SOCKETSEND);
|
|
|
m_Btn_SocketReceive.SetTooltipText("Data Receive");
|
|
|
m_Btn_SocketReceive.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
|
|
|
m_Btn_SocketReceive.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));
|
|
|
m_Btn_SocketReceive.DrawTransparent(TRUE);
|
|
|
|
|
|
// 开始录像
|
|
|
m_Btn_CaptureVideo.SubclassDlgItem(IDC_BTN_CAPTURE_VIDEO, this);
|
|
|
m_Btn_CaptureVideo.SetIcon(IDI_ICON_MAIN_CAPTUREVIDEO);
|
|
|
m_Btn_CaptureVideo.SetTooltipText("Recording Start");
|
|
|
m_Btn_CaptureVideo.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
|
|
|
m_Btn_CaptureVideo.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));
|
|
|
m_Btn_CaptureVideo.DrawTransparent(TRUE);
|
|
|
|
|
|
// 结果预览
|
|
|
m_Btn_Result.SubclassDlgItem(IDC_BTN_LOOKUP_RESULT, this);
|
|
|
m_Btn_Result.SetIcon(IDI_ICON_MAIN_RESULT);
|
|
|
m_Btn_Result.SetTooltipText("Instant Preview");
|
|
|
m_Btn_Result.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
|
|
|
m_Btn_Result.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));
|
|
|
m_Btn_Result.DrawTransparent(TRUE);
|
|
|
|
|
|
//// 情报处理
|
|
|
//m_Btn_QBFunctions.SubclassDlgItem(IDC_BTN_SET_PARAMS, this);
|
|
|
//m_Btn_QBFunctions.SetIcon(IDI_ICON_MAIN_QBFUNCTIONS);
|
|
|
//m_Btn_QBFunctions.SetTooltipText("情报处理");
|
|
|
//m_Btn_QBFunctions.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
|
|
|
//m_Btn_QBFunctions.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));
|
|
|
//m_Btn_QBFunctions.DrawTransparent(TRUE);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 通过滚轮控制视场大小
|
|
|
BOOL CCH91PayloadSoftwareDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
|
|
|
{
|
|
|
ScreenToClient(&pt);
|
|
|
// 鼠标滚轮控制视场大小
|
|
|
CRect rect1;
|
|
|
GetDlgItem(IDC_STATIC_EO_REGION)->GetWindowRect(&rect1);
|
|
|
ScreenToClient(&rect1);
|
|
|
CRect rect2;
|
|
|
GetDlgItem(IDC_STATIC_VIDEO_REGIONALL)->GetWindowRect(&rect2);
|
|
|
ScreenToClient(&rect2);
|
|
|
// 需要判断一下图像类型
|
|
|
if (str_CurrentImgType == "EO图像") // EO图像
|
|
|
{
|
|
|
g_CtrlFocusThroughMouseWheel = true;
|
|
|
if (m_bVideoShowFullScreen == FALSE)
|
|
|
{
|
|
|
if (pt.x > rect1.left && pt.x < rect1.right && pt.y > rect1.top && pt.y < rect1.bottom)
|
|
|
{
|
|
|
if (zDelta < 0) // 视场大
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 15;
|
|
|
g_sCtrlInstruction = "EO视场大";
|
|
|
}
|
|
|
else // 视场小
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 14;
|
|
|
g_sCtrlInstruction = "EO视场小";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (pt.x > rect2.left && pt.x < rect2.right && pt.y > rect2.top && pt.y < rect2.bottom)
|
|
|
{
|
|
|
if (zDelta < 0) // 视场大
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 15;
|
|
|
g_sCtrlInstruction = "EO视场大";
|
|
|
}
|
|
|
else // 视场小
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 14;
|
|
|
g_sCtrlInstruction = "EO视场小";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (str_CurrentImgType == "IR图像") // IR图像
|
|
|
{
|
|
|
g_CtrlFocusThroughMouseWheel = true;
|
|
|
if (m_bVideoShowFullScreen == FALSE)
|
|
|
{
|
|
|
if (pt.x > rect1.left && pt.x < rect1.right && pt.y > rect1.top && pt.y < rect1.bottom)
|
|
|
{
|
|
|
if (zDelta < 0) // 视场大
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 15;
|
|
|
g_sCtrlInstruction = "IR视场大";
|
|
|
}
|
|
|
else // 视场小
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 14;
|
|
|
g_sCtrlInstruction = "IR视场小";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (pt.x > rect2.left && pt.x < rect2.right && pt.y > rect2.top && pt.y < rect2.bottom)
|
|
|
{
|
|
|
if (zDelta < 0) // 视场大
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 17;
|
|
|
g_sCtrlInstruction = "IR视场大";
|
|
|
}
|
|
|
else // 视场小
|
|
|
{
|
|
|
g_payloadCtrlProtocol = 16;
|
|
|
g_sCtrlInstruction = "IR视场小";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
// 无响应
|
|
|
}
|
|
|
return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
|
|
|
}
|
|
|
|
|
|
// 设置软件应用语言
|
|
|
void CCH91PayloadSoftwareDlg::DlgLanguageSet()
|
|
|
{
|
|
|
// 通过配置文件导入语言类型
|
|
|
CString str_fileLanguageName = "config_Chinese.ini";
|
|
|
CString fileLanguageSet = GetSoftwareCurrentDirectory()+ "\\ini\\" + str_fileLanguageName;
|
|
|
|
|
|
// 通过配置文件导入[TITLE]语言文字
|
|
|
// 视频控制页面标题
|
|
|
GetPrivateProfileString("TITLE", "TITLE_REPLAY", "0", g_char_TitleReplay, 30, fileLanguageSet);
|
|
|
g_str_TitleReplay = g_char_TitleReplay;
|
|
|
|
|
|
// 通过配置文件导入[WARNING]语言文字
|
|
|
// 信息提示
|
|
|
GetPrivateProfileString("WARNING", "WARNING_TITLE", "0", g_char_WarningTitle, 100, fileLanguageSet);
|
|
|
g_str_WarningTitle = g_char_WarningTitle;
|
|
|
// 磁盘空间提示
|
|
|
GetPrivateProfileString("WARNING", "WARNING_STORAGE", "0", g_char_WarningStorage, 100, fileLanguageSet);
|
|
|
g_str_WarningStorage = g_char_WarningStorage;
|
|
|
// UDP收数提示(测控、情报)
|
|
|
GetPrivateProfileString("WARNING", "WARNING_UDPRECEIVE", "0", g_char_WarningUDPReceive, 100, fileLanguageSet);
|
|
|
g_str_WarningUDPReceive = g_char_WarningUDPReceive;
|
|
|
// 串口收数提示
|
|
|
GetPrivateProfileString("WARNING", "WARNING_SERIALRECEIVE", "0", g_char_WarningSerialReceive, 100, fileLanguageSet);
|
|
|
g_str_WarningSerialReceive = g_char_WarningSerialReceive;
|
|
|
// 载荷控制连接提示
|
|
|
GetPrivateProfileString("WARNING", "WARNING_PAYLOADCONTROL", "0", g_char_WarningPayloadControl, 100, fileLanguageSet);
|
|
|
g_str_WarningPayloadControl = g_char_WarningPayloadControl;
|
|
|
// 激光编码密码登陆提示
|
|
|
GetPrivateProfileString("WARNING", "WARNING_LRFCODE", "0", g_char_WarningLRFCode, 100, fileLanguageSet);
|
|
|
g_str_WarningLRFCode = g_char_WarningLRFCode;
|
|
|
// 激光编码周期范围提示
|
|
|
GetPrivateProfileString("WARNING", "WARNING_LRFNUMBER", "0", g_char_WarningLRFNumber, 100, fileLanguageSet);
|
|
|
g_str_WarningLRFNumber = g_char_WarningLRFNumber;
|
|
|
// 输入数字提示(数引)
|
|
|
GetPrivateProfileString("WARNING", "WARNING_INPUTNUMBER", "0", g_char_WarningInputNumber, 100, fileLanguageSet);
|
|
|
g_str_WarningInputNumber = g_char_WarningInputNumber;
|
|
|
// 地图高程设定提示
|
|
|
GetPrivateProfileString("WARNING", "WARNING_MAPALTSET", "0", g_char_WarningMapAltSet, 100, fileLanguageSet);
|
|
|
g_str_WarningMapAltSet = g_char_WarningMapAltSet;
|
|
|
|
|
|
|
|
|
// 通过配置文件导入[STATIC]语言文字
|
|
|
// 发送指令
|
|
|
GetPrivateProfileString("STATIC", "STATIC_COMMANDSEND", "0", g_char_CommandSend, 30, fileLanguageSet);
|
|
|
g_str_CommandSend = g_char_CommandSend;
|
|
|
// 回报指令
|
|
|
GetPrivateProfileString("STATIC", "STATIC_COMMANDRESPONSE", "0", g_char_CommandResponse, 30, fileLanguageSet);
|
|
|
g_str_CommandResponse = g_char_CommandResponse;
|
|
|
// 载荷状态
|
|
|
GetPrivateProfileString("STATIC", "STATIC_STATE", "0", g_char_State, 30, fileLanguageSet);
|
|
|
g_str_State = g_char_State;
|
|
|
// 文件路径
|
|
|
GetPrivateProfileString("STATIC", "STATIC_FILEPATH", "0", g_char_FilePath, 30, fileLanguageSet);
|
|
|
g_str_FilePath = g_char_FilePath;
|
|
|
// 可见光相机指令
|
|
|
GetPrivateProfileString("STATIC", "STATIC_EOCOMMAND", "0", g_char_EOCommand, 30, fileLanguageSet);
|
|
|
g_str_EOCommand = g_char_EOCommand;
|
|
|
// 红外相机指令
|
|
|
GetPrivateProfileString("STATIC", "STATIC_IRCOMMAND", "0", g_char_IRCommand, 30, fileLanguageSet);
|
|
|
g_str_IRCommand = g_char_IRCommand;
|
|
|
// 陀螺修正
|
|
|
GetPrivateProfileString("STATIC", "STATIC_DRIFT", "0", g_char_Drift, 30, fileLanguageSet);
|
|
|
g_str_Drift = g_char_Drift;
|
|
|
// 波门位移
|
|
|
GetPrivateProfileString("STATIC", "STATIC_AVTGATE", "0", g_char_AVTGate, 30, fileLanguageSet);
|
|
|
g_str_AVTGate = g_char_AVTGate;
|
|
|
// 密码登陆
|
|
|
GetPrivateProfileString("STATIC", "STATIC_LOGIN", "0", g_char_LogIn, 30, fileLanguageSet);
|
|
|
g_str_LogIn = g_char_LogIn;
|
|
|
// 编码序号:
|
|
|
GetPrivateProfileString("STATIC", "STATIC_LASERNUM", "0", g_char_LaserNum, 30, fileLanguageSet);
|
|
|
g_str_LaserNum = g_char_LaserNum;
|
|
|
// 编码周期:
|
|
|
GetPrivateProfileString("STATIC", "STATIC_LASERPERIOD", "0", g_char_LaserPeriod, 30, fileLanguageSet);
|
|
|
g_str_LaserPeriod = g_char_LaserPeriod;
|
|
|
|
|
|
|
|
|
// 通过配置文件导入[COMMAND]语言文字
|
|
|
// 目标经度装订
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_TARGETLONSET", "0", g_char_TargetLonSet, 30, fileLanguageSet);
|
|
|
g_str_TargetLonSet = g_char_TargetLonSet;
|
|
|
// 目标纬度装订
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_TARGETLATSET", "0", g_char_TargetLatSet, 30, fileLanguageSet);
|
|
|
g_str_TargetLatSet = g_char_TargetLatSet;
|
|
|
// 目标高度装订
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_TARGETALTSET", "0", g_char_TargetAltSet, 30, fileLanguageSet);
|
|
|
g_str_TargetAltSet = g_char_TargetAltSet;
|
|
|
// 地理坐标跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_GEOGRAPHYTRACKING", "0", g_char_GeographyTracking, 30, fileLanguageSet);
|
|
|
g_str_GeographyTracking = g_char_GeographyTracking;
|
|
|
// 手动搜索
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_MANUALSLEW", "0", g_char_ManualSlew, 30, fileLanguageSet);
|
|
|
g_str_ManualSlew = g_char_ManualSlew;
|
|
|
// 锁定
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_VERTICALVIEW", "0", g_char_VerticalView, 30, fileLanguageSet);
|
|
|
g_str_VerticalView = g_char_VerticalView;
|
|
|
// 扫描
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AUTOSCAN", "0", g_char_AutoScan, 30, fileLanguageSet);
|
|
|
g_str_AutoScan = g_char_AutoScan;
|
|
|
// 数引
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_ANGLELOCK", "0", g_char_AngleLock, 30, fileLanguageSet);
|
|
|
g_str_AngleLock = g_char_AngleLock;
|
|
|
// 平台复位
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_TURRETRESET", "0", g_char_TurretReset, 30, fileLanguageSet);
|
|
|
g_str_TurretReset = g_char_TurretReset;
|
|
|
// 陀螺右修
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DRIFTRIGHT", "0", g_char_DriftRight, 30, fileLanguageSet);
|
|
|
g_str_DriftRight = g_char_DriftRight;
|
|
|
// 陀螺左修
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DRIFTLEFT", "0", g_char_DriftLeft, 30, fileLanguageSet);
|
|
|
g_str_DriftLeft = g_char_DriftLeft;
|
|
|
// 陀螺上修
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DRIFTUP", "0", g_char_DriftUp, 30, fileLanguageSet);
|
|
|
g_str_DriftUp = g_char_DriftUp;
|
|
|
// 陀螺下修
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DRIFTDOWN", "0", g_char_DriftDown, 30, fileLanguageSet);
|
|
|
g_str_DriftDown = g_char_DriftDown;
|
|
|
// 载荷升
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_TURRETSTOW", "0", g_char_TurretStow, 30, fileLanguageSet);
|
|
|
g_str_TurretStow = g_char_TurretStow;
|
|
|
// 载荷降
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_TURRETFWD", "0", g_char_TurretFWD, 30, fileLanguageSet);
|
|
|
g_str_TurretFWD = g_char_TurretFWD;
|
|
|
// 可见光自动跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOAUTOTRACKING", "0", g_char_EOAutoTracking, 30, fileLanguageSet);
|
|
|
g_str_EOAutoTracking = g_char_EOAutoTracking;
|
|
|
// 红外自动跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRAUTOTRACKING", "0", g_char_IRAutoTracking, 30, fileLanguageSet);
|
|
|
g_str_IRAutoTracking = g_char_IRAutoTracking;
|
|
|
// 相关跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_CORRELATIONTRACKING", "0", g_char_CorrelationTracking, 30, fileLanguageSet);
|
|
|
g_str_CorrelationTracking = g_char_CorrelationTracking;
|
|
|
// 重心黑
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_CENTROIDBLACKTRACKING", "0", g_char_CentroidBlackTracking, 30, fileLanguageSet);
|
|
|
g_str_CentroidBlackTracking = g_char_CentroidBlackTracking;
|
|
|
// 重心白
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_CENTROIDWHITETRACKING", "0", g_char_CentroidWhiteTracking, 30, fileLanguageSet);
|
|
|
g_str_CentroidWhiteTracking = g_char_CentroidWhiteTracking;
|
|
|
// 字符叠加/消隐
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_OSDONOFF", "0", g_char_OSDONOFF, 30, fileLanguageSet);
|
|
|
g_str_OSDONOFF = g_char_OSDONOFF;
|
|
|
// 偏心跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_OFFSETTRACKING", "0", g_char_OffsetTracking, 30, fileLanguageSet);
|
|
|
g_str_OffsetTracking = g_char_OffsetTracking;
|
|
|
// 静态目标跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_STATICTARGETTRACKING", "0", g_char_StaticTargetTracking, 30, fileLanguageSet);
|
|
|
g_str_StaticTargetTracking = g_char_StaticTargetTracking;
|
|
|
// 动态目标跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_MOVETARGETTRACKING", "0", g_char_MoveTargetTracking, 30, fileLanguageSet);
|
|
|
g_str_MoveTargetTracking = g_char_MoveTargetTracking;
|
|
|
// 场景跟踪
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_VIEWTRACKING", "0", g_char_ViewTracking, 30, fileLanguageSet);
|
|
|
g_str_ViewTracking = g_char_ViewTracking;
|
|
|
// 大波门
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATESIZEBIG", "0", g_char_AVTGateSizeBig, 30, fileLanguageSet);
|
|
|
g_str_AVTGateSizeBig = g_char_AVTGateSizeBig;
|
|
|
// 小波门
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATESIZESMALL", "0", g_char_AVTGateSizeSmall, 30, fileLanguageSet);
|
|
|
g_str_AVTGateSizeSmall = g_char_AVTGateSizeSmall;
|
|
|
// 中波门
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATESIZEMIDDLE", "0", g_char_AVTGateSizeMiddle, 30, fileLanguageSet);
|
|
|
g_str_AVTGateSizeMiddle = g_char_AVTGateSizeMiddle;
|
|
|
// 自适应波门
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATESIZEAUTO", "0", g_char_AVTGateSizeAuto, 30, fileLanguageSet);
|
|
|
g_str_AVTGateSizeAuto = g_char_AVTGateSizeAuto;
|
|
|
// 图像增强开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IMGENHANCEON", "0", g_char_ImgEnhanceON, 30, fileLanguageSet);
|
|
|
g_str_ImgEnhanceON = g_char_ImgEnhanceON;
|
|
|
// 图像增强关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IMGENHANCEOFF", "0", g_char_ImgEnhanceOFF, 30, fileLanguageSet);
|
|
|
g_str_ImgEnhanceOFF = g_char_ImgEnhanceOFF;
|
|
|
// 波门右移
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATERIGHT", "0", g_char_AVTGateRight, 30, fileLanguageSet);
|
|
|
g_str_AVTGateRight = g_char_AVTGateRight;
|
|
|
// 波门左移
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATELEFT", "0", g_char_AVTGateLeft, 30, fileLanguageSet);
|
|
|
g_str_AVTGateLeft = g_char_AVTGateLeft;
|
|
|
// 波门上移
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATEUP", "0", g_char_AVTGateUp, 30, fileLanguageSet);
|
|
|
g_str_AVTGateUp = g_char_AVTGateUp;
|
|
|
// 波门下移
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_AVTGATEDOWN", "0", g_char_AVTGateDown, 30, fileLanguageSet);
|
|
|
g_str_AVTGateDown = g_char_AVTGateDown;
|
|
|
|
|
|
// 激光电源开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LRFPOWERON", "0", g_char_LRFPowerON, 30, fileLanguageSet);
|
|
|
g_str_LRFPowerON = g_char_LRFPowerON;
|
|
|
// 激光电源关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LRFPOWEROFF", "0", g_char_LRFPowerOFF, 30, fileLanguageSet);
|
|
|
g_str_LRFPowerOFF = g_char_LRFPowerOFF;
|
|
|
// 激光测距开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LRFARMED", "0", g_char_LRFArmed, 30, fileLanguageSet);
|
|
|
g_str_LRFArmed = g_char_LRFArmed;
|
|
|
// 激光测距关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LRFSAFE", "0", g_char_LRFSafe, 30, fileLanguageSet);
|
|
|
g_str_LRFSafe = g_char_LRFSafe;
|
|
|
// 激光照射开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LDARMED", "0", g_char_LDArmed, 30, fileLanguageSet);
|
|
|
g_str_LDArmed = g_char_LDArmed;
|
|
|
// 激光照射关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LDSAFE", "0", g_char_LDSafe, 30, fileLanguageSet);
|
|
|
g_str_LDSafe = g_char_LDSafe;
|
|
|
// 激光编码1
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO1", "0", g_char_LaserNo1, 30, fileLanguageSet);
|
|
|
g_str_LaserNo1 = g_char_LaserNo1;
|
|
|
// 激光编码2
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO2", "0", g_char_LaserNo2, 30, fileLanguageSet);
|
|
|
g_str_LaserNo2 = g_char_LaserNo2;
|
|
|
// 激光编码3
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO3", "0", g_char_LaserNo3, 30, fileLanguageSet);
|
|
|
g_str_LaserNo3 = g_char_LaserNo3;
|
|
|
// 激光编码4
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO4", "0", g_char_LaserNo4, 30, fileLanguageSet);
|
|
|
g_str_LaserNo4 = g_char_LaserNo4;
|
|
|
// 激光编码5
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO5", "0", g_char_LaserNo5, 30, fileLanguageSet);
|
|
|
g_str_LaserNo5 = g_char_LaserNo5;
|
|
|
// 激光编码6
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO6", "0", g_char_LaserNo6, 30, fileLanguageSet);
|
|
|
g_str_LaserNo6 = g_char_LaserNo6;
|
|
|
// 激光编码7
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO7", "0", g_char_LaserNo7, 30, fileLanguageSet);
|
|
|
g_str_LaserNo7 = g_char_LaserNo7;
|
|
|
// 激光编码8
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO8", "0", g_char_LaserNo8, 30, fileLanguageSet);
|
|
|
g_str_LaserNo8 = g_char_LaserNo8;
|
|
|
// 激光编码9
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO9", "0", g_char_LaserNo9, 30, fileLanguageSet);
|
|
|
g_str_LaserNo9 = g_char_LaserNo9;
|
|
|
// 激光编码10
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERNO10", "0", g_char_LaserNo10, 30, fileLanguageSet);
|
|
|
g_str_LaserNo10 = g_char_LaserNo10;
|
|
|
// 激光编码加载
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_LASERLOAD", "0", g_char_LaserLoad, 30, fileLanguageSet);
|
|
|
g_str_LaserLoad = g_char_LaserLoad;
|
|
|
|
|
|
// 低照度增强开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_ICRON", "0", g_char_ICRON, 30, fileLanguageSet);
|
|
|
g_str_ICRON = g_char_ICRON;
|
|
|
// 低照度增强关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_ICROFF", "0", g_char_ICROFF, 30, fileLanguageSet);
|
|
|
g_str_ICROFF = g_char_ICROFF;
|
|
|
// 透雾开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DEFOGON", "0", g_char_DefogON, 30, fileLanguageSet);
|
|
|
g_str_DefogON = g_char_DefogON;
|
|
|
// 透雾关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DEFOGOFF", "0", g_char_DefogOFF, 30, fileLanguageSet);
|
|
|
g_str_DefogOFF = g_char_DefogOFF;
|
|
|
// EO调焦+
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOFOCUSPLUS", "0", g_char_EOFocusPlus, 30, fileLanguageSet);
|
|
|
g_str_EOFocusPlus = g_char_EOFocusPlus;
|
|
|
// EO调焦-
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOFOCUSMINUS", "0", g_char_EOFocusMinus, 30, fileLanguageSet);
|
|
|
g_str_EOFocusMinus = g_char_EOFocusMinus;
|
|
|
// EO视场大
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOZOOMOUT", "0", g_char_EOZoomOut, 30, fileLanguageSet);
|
|
|
g_str_EOZoomOut = g_char_EOZoomOut;
|
|
|
// EO视场小
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOZOOMIN", "0", g_char_EOZoomIn, 30, fileLanguageSet);
|
|
|
g_str_EOZoomIn = g_char_EOZoomIn;
|
|
|
// EO手动调光
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOLIGHTMANUAL", "0", g_char_EOLightManual, 30, fileLanguageSet);
|
|
|
g_str_EOLightManual = g_char_EOLightManual;
|
|
|
// EO自动调光
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOLIGHTAUTO", "0", g_char_EOLightAuto, 30, fileLanguageSet);
|
|
|
g_str_EOLightAuto = g_char_EOLightAuto;
|
|
|
// EO亮度+
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOLIGHTPLUS", "0", g_char_EOLightPlus, 30, fileLanguageSet);
|
|
|
g_str_EOLightPlus = g_char_EOLightPlus;
|
|
|
// EO亮度-
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOLIGHTMINUS", "0", g_char_EOLightMinus, 30, fileLanguageSet);
|
|
|
g_str_EOLightMinus = g_char_EOLightMinus;
|
|
|
// EO电源开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOPOWERON", "0", g_char_EOPowerON, 30, fileLanguageSet);
|
|
|
g_str_EOPowerON = g_char_EOPowerON;
|
|
|
// EO电源关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOPOWEROFF", "0", g_char_EOPowerOFF, 30, fileLanguageSet);
|
|
|
g_str_EOPowerOFF = g_char_EOPowerOFF;
|
|
|
// EO宽动态开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOWDRON", "0", g_char_EOWDRON, 30, fileLanguageSet);
|
|
|
g_str_EOWDRON = g_char_EOWDRON;
|
|
|
// EO宽动态关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOWDROFF", "0", g_char_EOWDROFF, 30, fileLanguageSet);
|
|
|
g_str_EOWDROFF = g_char_EOWDROFF;
|
|
|
// EO自动调焦
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOFOCUSAUTO", "0", g_char_EOFocusAuto, 30, fileLanguageSet);
|
|
|
g_str_EOFocusAuto = g_char_EOFocusAuto;
|
|
|
// EO实时调焦
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_EOFOCUSREALTIME", "0", g_char_EOFocusRealTime, 30, fileLanguageSet);
|
|
|
g_str_EOFocusRealTime = g_char_EOFocusRealTime;
|
|
|
|
|
|
// IR调焦+
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRFOCUSPLUS", "0", g_char_IRFocusPlus, 30, fileLanguageSet);
|
|
|
g_str_IRFocusPlus = g_char_IRFocusPlus;
|
|
|
// IR调焦-
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRFOCUSMINUS", "0", g_char_IRFocusMinus, 30, fileLanguageSet);
|
|
|
g_str_IRFocusMinus = g_char_IRFocusMinus;
|
|
|
// IR自动调焦
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRFOCUSAUTO", "0", g_char_IRFocusAuto, 30, fileLanguageSet);
|
|
|
g_str_IRFocusAuto = g_char_IRFocusAuto;
|
|
|
// IR实时调焦
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRFOCUSREALTIME", "0", g_char_IRFocusRealTime, 30, fileLanguageSet);
|
|
|
g_str_IRFocusRealTime = g_char_IRFocusRealTime;
|
|
|
// IR视场大
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRZOOMOUT", "0", g_char_IRZoomOut, 30, fileLanguageSet);
|
|
|
g_str_IRZoomOut = g_char_IRZoomOut;
|
|
|
// IR视场小
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRZOOMIN", "0", g_char_IRZoomIn, 30, fileLanguageSet);
|
|
|
g_str_IRZoomIn = g_char_IRZoomIn;
|
|
|
// IR黑白热
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_BHWH", "0", g_char_BHWH, 30, fileLanguageSet);
|
|
|
g_str_BHWH = g_char_BHWH;
|
|
|
// IR校正
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRCALIBRATION", "0", g_char_IRCalibration, 30, fileLanguageSet);
|
|
|
g_str_IRCalibration = g_char_IRCalibration;
|
|
|
// IR手动调光
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRLIGHTMANUAL", "0", g_char_IRLightManual, 30, fileLanguageSet);
|
|
|
g_str_IRLightManual = g_char_IRLightManual;
|
|
|
// IR自动调光
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRLIGHTAUTO", "0", g_char_IRLightAuto, 30, fileLanguageSet);
|
|
|
g_str_IRLightAuto = g_char_IRLightAuto;
|
|
|
// IR亮度+
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRLIGHTPLUS", "0", g_char_IRLightPlus, 30, fileLanguageSet);
|
|
|
g_str_IRLightPlus = g_char_IRLightPlus;
|
|
|
// IR亮度-
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRLIGHTMINUS", "0", g_char_IRLightMinus, 30, fileLanguageSet);
|
|
|
g_str_IRLightMinus = g_char_IRLightMinus;
|
|
|
// IR对比度+
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRCONTRASTPLUS", "0", g_char_IRContrastPlus, 30, fileLanguageSet);
|
|
|
g_str_IRContrastPlus = g_char_IRContrastPlus;
|
|
|
// IR对比度-
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRCONTRASTMINUS", "0", g_char_IRContrastMinus, 30, fileLanguageSet);
|
|
|
g_str_IRContrastMinus = g_char_IRContrastMinus;
|
|
|
// 边缘锐化开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DDEON", "0", g_char_DDEON, 30, fileLanguageSet);
|
|
|
g_str_DDEON = g_char_DDEON;
|
|
|
// 边缘锐化关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DDEOFF", "0", g_char_DDEOFF, 30, fileLanguageSet);
|
|
|
g_str_DDEOFF = g_char_DDEOFF;
|
|
|
// IR电源开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRPOWERON", "0", g_char_IRPowerON, 30, fileLanguageSet);
|
|
|
g_str_IRPowerON = g_char_IRPowerON;
|
|
|
// IR电源关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IRPOWEROFF", "0", g_char_IRPowerOFF, 30, fileLanguageSet);
|
|
|
g_str_IRPowerOFF = g_char_IRPowerOFF;
|
|
|
// 设置图像类型
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IMGTYPESET", "0", g_char_ImgTypeSet, 30, fileLanguageSet);
|
|
|
g_str_ImgTypeSet = g_char_ImgTypeSet;
|
|
|
// 设置图像码流
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_IMGFLOWSET", "0", g_char_ImgFlowSet, 30, fileLanguageSet);
|
|
|
g_str_ImgFlowSet = g_char_ImgFlowSet;
|
|
|
|
|
|
// DC手动白平衡
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DCWBMANUAL", "0", g_char_DCWBManual, 30, fileLanguageSet);
|
|
|
g_str_DCWBManual = g_char_DCWBManual;
|
|
|
// DC自动白平衡
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DCWBAUTO", "0", g_char_DCWBAuto, 30, fileLanguageSet);
|
|
|
g_str_DCWBAuto = g_char_DCWBAuto;
|
|
|
// 单拍
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_SINGLESHOOT", "0", g_char_SingleShoot, 30, fileLanguageSet);
|
|
|
g_str_SingleShoot = g_char_SingleShoot;
|
|
|
// 两秒连拍
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_CC2S", "0", g_char_CC2s, 30, fileLanguageSet);
|
|
|
g_str_CC2s = g_char_CC2s;
|
|
|
// 四秒连拍
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_CC4S", "0", g_char_CC4s, 30, fileLanguageSet);
|
|
|
g_str_CC4s = g_char_CC4s;
|
|
|
// 保证重叠率连拍
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_CCOVERLAP", "0", g_char_CCOverlap, 30, fileLanguageSet);
|
|
|
g_str_CCOverlap = g_char_CCOverlap;
|
|
|
// 摆扫连拍
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_CCAUTOSCAN", "0", g_char_CCAutoScan, 30, fileLanguageSet);
|
|
|
g_str_CCAutoScan = g_char_CCAutoScan;
|
|
|
// DC自动曝光
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DCEXPOSUREAUTO", "0", g_char_DCExposureAuto, 30, fileLanguageSet);
|
|
|
g_str_DCExposureAuto = g_char_DCExposureAuto;
|
|
|
// DC手动曝光
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DCEXPOSUREMANUAL", "0", g_char_DCExposureManual, 30, fileLanguageSet);
|
|
|
g_str_DCExposureManual = g_char_DCExposureManual;
|
|
|
// DC曝光时间+
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DCEXPOSUREPLUS", "0", g_char_DCExposurePlus, 30, fileLanguageSet);
|
|
|
g_str_DCExposurePlus = g_char_DCExposurePlus;
|
|
|
// DC曝光时间-
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DCEXPOSUREMINUS", "0", g_char_DCExposureMinus, 30, fileLanguageSet);
|
|
|
g_str_DCExposureMinus = g_char_DCExposureMinus;
|
|
|
// 保证速高比曝光
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_DCEXPOSUREVHR", "0", g_char_DCExposureVHR, 30, fileLanguageSet);
|
|
|
g_str_DCExposureVHR = g_char_DCExposureVHR;
|
|
|
|
|
|
// 伺服电源开
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_SERVOPOWERON", "0", g_char_ServoPowerON, 30, fileLanguageSet);
|
|
|
g_str_ServoPowerON = g_char_ServoPowerON;
|
|
|
// 伺服电源关
|
|
|
GetPrivateProfileString("COMMAND", "COMMAND_SERVOPOWEROFF", "0", g_char_ServoPowerOFF, 30, fileLanguageSet);
|
|
|
g_str_ServoPowerOFF = g_char_ServoPowerOFF;
|
|
|
|
|
|
|
|
|
// 通过配置文件导入[OTHER]语言文字
|
|
|
// 未选择编码
|
|
|
GetPrivateProfileString("OTHER", "OTHER_LASERCHOOSE", "0", g_char_LaserChoose, 30, fileLanguageSet);
|
|
|
g_str_LaserChoose = g_char_LaserChoose;
|
|
|
// 编码加载成功
|
|
|
GetPrivateProfileString("OTHER", "OTHER_LASERNUMLOADSUCCESS", "0", g_char_LaserLoadSuccess, 30, fileLanguageSet);
|
|
|
g_str_LaserLoadSuccess = g_char_LaserLoadSuccess;
|
|
|
// 编码加载失败
|
|
|
GetPrivateProfileString("OTHER", "OTHER_LASERNUMLOADFAIL", "0", g_char_LaserLoadFail, 30, fileLanguageSet);
|
|
|
g_str_LaserLoadFail = g_char_LaserLoadFail;
|
|
|
}
|
|
|
|
|
|
|
|
|
void CCH91PayloadSoftwareDlg::OnBnClickedBtnMulticastsocketreceive()
|
|
|
{
|
|
|
// 组播收数
|
|
|
if (m_MulticastSocketReceiveDlg != NULL)
|
|
|
{
|
|
|
if (TRUE == m_MulticastSocketReceiveDlg->IsWindowVisible())
|
|
|
{
|
|
|
m_MulticastSocketReceiveDlg->ShowWindow(SW_HIDE);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
m_MulticastSocketReceiveDlg->ShowWindow(SW_SHOW);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
void CCH91PayloadSoftwareDlg::OnBnClickedBtnCaptureVideo()
|
|
|
{
|
|
|
g_bVideoCapture =! g_bVideoCapture;
|
|
|
|
|
|
if (TRUE == g_bVideoCapture)
|
|
|
{
|
|
|
GetDlgItem(IDC_BTN_CAPTURE_VIDEO)->SetWindowText("停止录制");
|
|
|
m_Btn_CaptureVideo.SetIcon(IDI_ICON_MAIN_CAPTURESTOP);
|
|
|
m_Btn_CaptureVideo.SetTooltipText("Recording Stop");
|
|
|
// 创建文件
|
|
|
CTime tm = CTime::GetCurrentTime();
|
|
|
CString str_DataTime;
|
|
|
str_DataTime.Format(_T("FH98_VideoData_%04d%02d%02d_%02d%02d%02d"), tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute(), tm.GetSecond());//文件名中不能出现冒号
|
|
|
CString str_DateTimeVideo;
|
|
|
str_DateTimeVideo = str_DataTime + ".h264";
|
|
|
CString pathCH96Video = GetSoftwareCurrentDirectory() + "\\Result\\VideoData\\" + str_DateTimeVideo;
|
|
|
fopen_s(&g_pFileSaveVideoDataCH96, pathCH96Video, _T("ab"));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GetDlgItem(IDC_BTN_CAPTURE_VIDEO)->SetWindowText("视频录制");
|
|
|
m_Btn_CaptureVideo.SetIcon(IDI_ICON_MAIN_CAPTUREVIDEO);
|
|
|
m_Btn_CaptureVideo.SetTooltipText("Recording Start");
|
|
|
// 关闭存储文件
|
|
|
if (g_pFileSaveVideoDataCH96 != NULL)
|
|
|
{
|
|
|
fclose(g_pFileSaveVideoDataCH96);
|
|
|
g_pFileSaveVideoDataCH96 = NULL;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// Ctrl + 鼠标左键双击——目标跟踪
|
|
|
void CCH91PayloadSoftwareDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
|
|
|
{
|
|
|
// 在图像显示页面摁住Ctrl后双击有效
|
|
|
if (::GetKeyState(VK_CONTROL) < 0)
|
|
|
{
|
|
|
// 如果当前是小区域显示图像
|
|
|
if (m_bVideoShowFullScreen == FALSE)
|
|
|
{
|
|
|
// 如果双击位置在小区域
|
|
|
if (point.x > rect_SmallRegion.left && point.x < rect_SmallRegion.right && point.y > rect_SmallRegion.top && point.y < rect_SmallRegion.bottom)
|
|
|
{
|
|
|
// 控件中心坐标
|
|
|
CPoint centerPt = rect_SmallRegion.CenterPoint();
|
|
|
centerPt.x = centerPt.x - rect_SmallRegion.left;
|
|
|
centerPt.y = centerPt.y - rect_SmallRegion.top;
|
|
|
// 控件偏移量
|
|
|
CPoint offset;
|
|
|
offset.x = point.x - centerPt.x;
|
|
|
offset.y = centerPt.y - point.y;
|
|
|
// 控件偏移量转为图像偏移量
|
|
|
offset.x = offset.x * 1920 / rect_SmallRegion.Width();
|
|
|
offset.y = offset.y * 1080 / rect_SmallRegion.Height();
|
|
|
// 指令发送
|
|
|
g_payloadCtrlProtocol = 11;
|
|
|
g_TrackOffset = offset;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
// 如果当前是大区域显示图像
|
|
|
else
|
|
|
{
|
|
|
// 如果双击位置在大区域
|
|
|
if (point.x > rect_BigRegion.left && point.x < rect_BigRegion.right && point.y > rect_BigRegion.top && point.y < rect_BigRegion.bottom)
|
|
|
{
|
|
|
// 控件中心坐标
|
|
|
CPoint centerPt = rect_BigRegion.CenterPoint();
|
|
|
centerPt.x = centerPt.x - rect_SmallRegion.left;
|
|
|
centerPt.y = centerPt.y - rect_SmallRegion.top;
|
|
|
// 控件偏移量
|
|
|
CPoint offset;
|
|
|
offset.x = point.x - centerPt.x;
|
|
|
offset.y = centerPt.y - point.y;
|
|
|
// 控件偏移量转为图像偏移量
|
|
|
offset.x = offset.x * 1920 / rect_BigRegion.Width();
|
|
|
offset.y = offset.y * 1080 / rect_BigRegion.Height();
|
|
|
// 指令发送
|
|
|
g_payloadCtrlProtocol = 11;
|
|
|
g_TrackOffset = offset;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
CDialogEx::OnLButtonDblClk(nFlags, point);
|
|
|
}
|
|
|
|
|
|
// Ctrl + 鼠标右键单击——手动搜索
|
|
|
void CCH91PayloadSoftwareDlg::OnRButtonDown(UINT nFlags, CPoint point)
|
|
|
{
|
|
|
// 在图像显示页面摁住Ctrl后右击有效
|
|
|
if (::GetKeyState(VK_CONTROL) < 0)
|
|
|
{
|
|
|
// 如果当前是小区域显示图像
|
|
|
if (m_bVideoShowFullScreen == FALSE)
|
|
|
{
|
|
|
// 如果右击位置在小区域
|
|
|
if (point.x > rect_SmallRegion.left && point.x < rect_SmallRegion.right && point.y > rect_SmallRegion.top && point.y < rect_SmallRegion.bottom)
|
|
|
{
|
|
|
// 手动模式
|
|
|
g_payloadCtrlProtocol = 10;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
// 如果当前是大区域显示图像
|
|
|
else
|
|
|
{
|
|
|
// 如果右击位置在大区域
|
|
|
if (point.x > rect_BigRegion.left && point.x < rect_BigRegion.right && point.y > rect_BigRegion.top && point.y < rect_BigRegion.bottom)
|
|
|
{
|
|
|
// 手动模式
|
|
|
g_payloadCtrlProtocol = 10;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
CDialogEx::OnRButtonDown(nFlags, point);
|
|
|
}
|
|
|
|
|
|
// 鼠标中键摁下
|
|
|
void CCH91PayloadSoftwareDlg::OnMButtonDown(UINT nFlags, CPoint point)
|
|
|
{
|
|
|
// 鼠标中键摁下
|
|
|
m_bMButtonDown = TRUE;
|
|
|
CDialogEx::OnMButtonDown(nFlags, point);
|
|
|
}
|
|
|
// 鼠标中键抬起
|
|
|
void CCH91PayloadSoftwareDlg::OnMButtonUp(UINT nFlags, CPoint point)
|
|
|
{
|
|
|
// 鼠标中键抬起
|
|
|
m_bMButtonDown = FALSE;
|
|
|
// 偏移量归零,并发送消息
|
|
|
g_MS_Ratio = 0;
|
|
|
g_MS_Angle = 0;
|
|
|
::SendMessage(g_SendControlCommandDlgHwnd, WM_SHOW_MANUAL_SEARCH , WPARAM(0), LPARAM(0));
|
|
|
CDialogEx::OnMButtonUp(nFlags, point);
|
|
|
}
|
|
|
// 拖动鼠标
|
|
|
void CCH91PayloadSoftwareDlg::OnMouseMove(UINT nFlags, CPoint point)
|
|
|
{
|
|
|
// 如果鼠标中键摁下
|
|
|
if (m_bMButtonDown == TRUE)
|
|
|
{
|
|
|
// 如果当前是小区域显示图像
|
|
|
if (m_bVideoShowFullScreen == FALSE)
|
|
|
{
|
|
|
// 如果鼠标移动区域在小区域内部
|
|
|
if (point.x > rect_SmallRegion.left && point.x < rect_SmallRegion.right && point.y > rect_SmallRegion.top && point.y < rect_SmallRegion.bottom)
|
|
|
{
|
|
|
// 中心坐标
|
|
|
CPoint centerPt = rect_SmallRegion.CenterPoint();
|
|
|
centerPt.x = centerPt.x - rect_SmallRegion.left;
|
|
|
centerPt.y = centerPt.y - rect_SmallRegion.top;
|
|
|
// 偏移坐标
|
|
|
CPoint offset;
|
|
|
offset.x = point.x - centerPt.x;
|
|
|
offset.y = centerPt.y - point.y;
|
|
|
// 计算角度和偏移比例
|
|
|
double angle = GetOffsetAngle(offset.x, offset.y);
|
|
|
double distRatio = sqrt(4.0 * (offset.x * offset.x + offset.y * offset.y) / (rect_SmallRegion.Width() * rect_SmallRegion.Width()));
|
|
|
// 条件判定
|
|
|
if (distRatio > 1.0 || abs(angle) > 180)
|
|
|
{
|
|
|
m_bMButtonDown = FALSE;
|
|
|
// 全局变量赋值
|
|
|
g_MS_Ratio = 0;
|
|
|
g_MS_Angle = 0;
|
|
|
::SendMessage(g_SendControlCommandDlgHwnd, WM_SHOW_MANUAL_SEARCH , WPARAM(0), LPARAM(0));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
// 条件判定
|
|
|
if (distRatio > 0.5)
|
|
|
{
|
|
|
distRatio = 0.5;
|
|
|
}
|
|
|
// 全局变量赋值
|
|
|
g_MS_Ratio = distRatio;
|
|
|
g_MS_Angle = angle;
|
|
|
::SendMessage(g_SendControlCommandDlgHwnd, WM_SHOW_MANUAL_SEARCH , WPARAM(0), LPARAM(0));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 如果当前是大区域显示图像
|
|
|
else
|
|
|
{
|
|
|
// 如果鼠标移动区域在大区域内部
|
|
|
if (point.x > rect_BigRegion.left && point.x < rect_BigRegion.right && point.y > rect_BigRegion.top && point.y < rect_BigRegion.bottom)
|
|
|
{
|
|
|
// 中心坐标
|
|
|
CPoint centerPt = rect_BigRegion.CenterPoint();
|
|
|
centerPt.x = centerPt.x - rect_BigRegion.left;
|
|
|
centerPt.y = centerPt.y - rect_BigRegion.top;
|
|
|
// 偏移坐标
|
|
|
CPoint offset;
|
|
|
offset.x = point.x - centerPt.x;
|
|
|
offset.y = centerPt.y - point.y;
|
|
|
// 计算角度和偏移比例
|
|
|
double angle = GetOffsetAngle(offset.x, offset.y);
|
|
|
double distRatio = sqrt(4.0 * (offset.x * offset.x + offset.y * offset.y) / (rect_BigRegion.Width() * rect_BigRegion.Width()));
|
|
|
// 条件判定
|
|
|
if (distRatio > 1.0 || abs(angle) > 180)
|
|
|
{
|
|
|
m_bMButtonDown = FALSE;
|
|
|
// 全局变量赋值
|
|
|
g_MS_Ratio = 0;
|
|
|
g_MS_Angle = 0;
|
|
|
::SendMessage(g_SendControlCommandDlgHwnd, WM_SHOW_MANUAL_SEARCH , WPARAM(0), LPARAM(0));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
// 条件判定
|
|
|
if (distRatio > 0.5)
|
|
|
{
|
|
|
distRatio = 0.5;
|
|
|
}
|
|
|
// 全局变量赋值
|
|
|
g_MS_Ratio = distRatio;
|
|
|
g_MS_Angle = angle;
|
|
|
::SendMessage(g_SendControlCommandDlgHwnd, WM_SHOW_MANUAL_SEARCH , WPARAM(0), LPARAM(0));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
CDialogEx::OnMouseMove(nFlags, point);
|
|
|
}
|
|
|
// 计算偏移角度
|
|
|
double CCH91PayloadSoftwareDlg::GetOffsetAngle(int X, int Y)
|
|
|
{
|
|
|
double XA = X;
|
|
|
double YA = Y;
|
|
|
|
|
|
// 输出合成航向角 Yaw
|
|
|
double PayLoad_Yaw = 0;
|
|
|
|
|
|
// 在坐标轴上
|
|
|
if (XA > 0 && YA == 0)
|
|
|
{
|
|
|
PayLoad_Yaw = 90;
|
|
|
}
|
|
|
else if (XA < 0 && YA == 0)
|
|
|
{
|
|
|
PayLoad_Yaw = -90;
|
|
|
}
|
|
|
else if (XA == 0 && YA > 0)
|
|
|
{
|
|
|
PayLoad_Yaw = 0;
|
|
|
}
|
|
|
else if (XA == 0 && YA < 0)
|
|
|
{
|
|
|
PayLoad_Yaw = 180;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
double tanYaw = 0.0;
|
|
|
if (YA > 0 && XA > 0)
|
|
|
{
|
|
|
// 第1象限
|
|
|
tanYaw = XA / YA;
|
|
|
PayLoad_Yaw = atan(tanYaw) * 180 / CV_PI;
|
|
|
}
|
|
|
else if (YA < 0 && XA > 0)
|
|
|
{
|
|
|
// 第2象限
|
|
|
tanYaw = -XA / YA;
|
|
|
PayLoad_Yaw = atan(tanYaw) * 180 / CV_PI;
|
|
|
PayLoad_Yaw = 180 - PayLoad_Yaw;
|
|
|
}
|
|
|
else if (YA < 0 && XA < 0)
|
|
|
{
|
|
|
// 第3象限
|
|
|
tanYaw = XA / YA;
|
|
|
PayLoad_Yaw = atan(tanYaw) * 180 / CV_PI;
|
|
|
PayLoad_Yaw = -180 + PayLoad_Yaw;
|
|
|
}
|
|
|
else if (YA > 0 && XA < 0)
|
|
|
{
|
|
|
// 第4象限
|
|
|
tanYaw = -XA / YA;
|
|
|
PayLoad_Yaw = atan(tanYaw) * 180 / CV_PI;
|
|
|
PayLoad_Yaw = -PayLoad_Yaw;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return PayLoad_Yaw;
|
|
|
}
|
|
|
|