// 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 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;//吊舱控制页面 g_DlgIMP = NULL;//IMP对话框初始化指针 p_Dlg13InstituteDCNewCtrl = NULL;//13所吊舱新控制放页面 } 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() //ON_MESSAGE(WM_UPDATE_IMPDOWN_CHECKED, OnUpdateIMPDownDataChecked) //更新IMP下行遥测数据 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); p_DlgCameraCtrl->ShowWindow(SW_HIDE); /*************原吊舱控制页面************/ /**********13所吊舱数据装订指令页面**********/ p_Dlg13InstituteDCNewCtrl = new Dlg13InstituteDCNew(); if (p_Dlg13InstituteDCNewCtrl != NULL) { p_Dlg13InstituteDCNewCtrl->Create(IDD_DIALOG_DC_13INSTITUTE_NEW, this); } p_Dlg13InstituteDCNewCtrl->MoveWindow(&rc_ControlInstruction); p_Dlg13InstituteDCNewCtrl->ShowWindow(SW_HIDE); /**********13所吊舱数据装订指令页面**********/ /***********IMP************/ CRect rc_ControlInstructionIMP; GetDlgItem(IDC_STATIC_CONTROLINSTRUCTION_IMP)->GetWindowRect(rc_ControlInstructionIMP); ScreenToClient(rc_ControlInstructionIMP); g_DlgIMP = new CDlgIMP(); if(g_DlgIMP != NULL) { g_DlgIMP->Create(IDD_DLG_IMP, this); } g_DlgIMP->MoveWindow(&rc_ControlInstructionIMP); //g_DlgIMP->ShowWindow(SW_SHOW); g_DlgIMP->ShowWindow(SW_HIDE); if(g_DlgIMP->IsWindowVisible()) { IMPDlgWindowVisible=true; } else { IMPDlgWindowVisible=false; } /***********IMP************/ /**********吊舱数据装订指令页面**********/ p_DlgDCOverroll = new DCOverrollDlg(); if(p_DlgDCOverroll != NULL) { p_DlgDCOverroll->Create(IDD_DIALOG_DC,this); } p_DlgDCOverroll->MoveWindow(&rc_ControlInstruction); p_DlgDCOverroll->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_Position_Max_x = rect.right - rect.left; //图像显示区域的坐标最大值x m_wndShowEO_Position_Max_y = rect.bottom - rect.top; //图像显示区域的坐标最大值y 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(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(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; } //13所吊舱新控制放页面 if(p_Dlg13InstituteDCNewCtrl) { delete p_Dlg13InstituteDCNewCtrl; p_Dlg13InstituteDCNewCtrl = NULL; } // 卸载IMP对话框 if(g_DlgIMP !=NULL) { delete g_DlgIMP; g_DlgIMP = nullptr; IMPDlgWindowVisible = false; } } // 显示可见光图像复接信息 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::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::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 fileLanguageSet = GetSoftwareCurrentDirectory()+ "\\ini\\" + str_fileLanguageName; CString fileLanguageSet = GetSoftwareCurrentDirectory() + _T( "\\config_Chinese.ini" ); // 通过配置文件导入[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; } /**********IMP**********/ ////IMP下行帧通过校验后调的函数 //void CALLBACK IMPDOWNCheckCallback(CFrameIMPDown_ *ss) //{ // ::SendMessageA(g_mainDlgHwnd,WM_UPDATE_IMPDOWN_CHECKED,0,0); //} ////IMP串口有数据后,进行校验 //void OnReadFromCommIMP( char *buffer,const DWORD size) //{ // //buffer = (unsigned char*)buffer; // const BYTE* buffer2 = (BYTE*)buffer; // if(size>0) // { // BYTE DCBufferCmd[6]; // memset(DCBufferCmd,0,sizeof(DCBufferCmd)); // // /********进入校验,校验通过就给g_FrameIMPDown赋值********/ // g_FrameIMPDown.Phrase(buffer2, size); // ////IMP协议类回调函数设置,校验通过后回自动调用该回调函数 // //g_FrameIMPDown.SetCheckCallback((IMPDOWNCheckCallback,nullptr),nullptr); // //g_FrameIMPDown.SetNotCheckCallback(nullptr); // ::SendMessageA(g_mainDlgHwnd,WM_UPDATE_IMPDOWN_CHECKED,0,0); // } //} ////初始化 //void CCH91PayloadSoftwareDlg::onInitIMPFrame() //{ // //串口通信设置 // memset(pSerialPort, 0, 20); // GetSerialPortNumber(pSerialPort,"串口40"); // CString IMPComPort; // IMPComPort = "115200"; // pSerialPortBaud = atoi(IMPComPort);//波特率 // if (!OnCheckComPort(pSerialPort)) //串口被占用,返回false // { // return; // } // if(m_SerialIMP.Initialize(pSerialPort, pSerialPortBaud, 8, 0, 0)) //开启串口通信 // { // m_SerialIMP.SetComReadCallback( OnReadFromCommIMP ); // //m_SerialIMP.SetNotCheckCallback(nullptr,NULL); // BYTE buffersend[10]; // memset(buffersend,1,10); // m_SerialIMP.WriteABuffer(buffersend,sizeof(buffersend)); // } //} ////处理通过校验的IMP下行数据 //LRESULT CCH91PayloadSoftwareDlg::OnUpdateIMPDownDataChecked(WPARAM param, LPARAM lparam) //{ // //数据解析与显示 // if(p_DlgIMP->IsWindowVisible()) // { // p_DlgIMP->SetIMPData(g_FrameIMPDown); // } // return 0; //}