You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2024 lines
62 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 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;
}