#include "stdafx.h" #include "LaiPuLaser.h" #include "DlgDnCutCamera.h" #include "afxdialogex.h" #include "MsgBox.h" #include "AuthorityMgr.h" #include "FileMgr.h" #include "LogMgr.h" #include "CommonFlowMgr.h" #include "CameraHawkvis.h" #include "ProgramCutMgr.h" #include "SmartArchive.h" #include #include #include #include using namespace cv; DlgHawkvisCamera *gDlgHawkvisCamera; IMPLEMENT_DYNAMIC(DlgHawkvisCamera, CDialogEx) BEGIN_MESSAGE_MAP(DlgHawkvisCamera, CDialogEx) ON_WM_TIMER() ON_BN_CLICKED(IDC_OPEN_CAM, &DlgHawkvisCamera::OnBnClickedOpenCam) ON_BN_CLICKED(IDC_FRAME_ONE, &DlgHawkvisCamera::OnBnClickedFrameOne) ON_BN_CLICKED(IDC_FRAME_CONTINUE, &DlgHawkvisCamera::OnBnClickedFrameContinue) ON_BN_CLICKED(IDC_READ_BMP, &DlgHawkvisCamera::OnBnClickedReadBmp) ON_BN_CLICKED(IDC_SAVE_BMP, &DlgHawkvisCamera::OnBnClickedSaveBmp) ON_BN_CLICKED(IDC_CREAT_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedCreatCatchTemp) ON_BN_CLICKED(IDC_SET_EXPORE, &DlgHawkvisCamera::OnBnClickedSetExpore) ON_BN_CLICKED(IDC_ZOOM_FULL, &DlgHawkvisCamera::OnBnClickedZoomFull) ON_BN_CLICKED(IDC_HK_ZOOM_IN, &DlgHawkvisCamera::OnBnClickedHkZoomIn) ON_BN_CLICKED(IDC_HK_ZOOM_OUT, &DlgHawkvisCamera::OnBnClickedHkZoomOut) ON_BN_CLICKED(IDC_CLOSE_CAM, &DlgHawkvisCamera::OnBnClickedCloseCam) ON_BN_CLICKED(IDC_TEST_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedTestCatchTemp) ON_BN_CLICKED(IDC_LOAD_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedLoadCatchTemp) ON_BN_CLICKED(IDC_SAVE_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedSaveCatchTemp) ON_BN_CLICKED(IDC_RADIO3, &DlgHawkvisCamera::OnBnClickedToCam1) ON_BN_CLICKED(IDC_RADIO1, &DlgHawkvisCamera::OnBnClickedToCam2) ON_BN_CLICKED(IDC_TEST_CATCH_TEMP2, &DlgHawkvisCamera::OnBnClickedTestDefinition) ON_MESSAGE(WM_UPDATE_FALSE, OnUpdateFalse) //ON_MESSAGE_VOID(WM_UPDATE_FALSE, OnUpdateFalse) ON_BN_CLICKED(IDC_TEST_CATCH_TEMP3, &DlgHawkvisCamera::OnBnClickedSetThreshold) END_MESSAGE_MAP() #define WORK_TIMER1 1 #define WORK_TIME_DELAY1 200 DlgHawkvisCamera::DlgHawkvisCamera(CWnd* pParent /*=NULL*/) : m_CurPic_Definition(0) , m_CurTrackThreshold(0) { m_nExpore = (60000); } DlgHawkvisCamera::~DlgHawkvisCamera() { } void DlgHawkvisCamera::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_ISP3000_LOGO_BTN, m_ISP3000LogoBtn); DDX_Control(pDX, IDC_HAWKVISCTRLCTRL3, m_HawkvisCtrl1); DDX_Control(pDX, IDC_HAWKVISCTRLCTRL4, m_HawkvisCtrl2); DDX_Control(pDX, IDC_OPEN_CAM, m_OpenCamBtn); DDX_Control(pDX, IDC_CLOSE_CAM, m_CloseCamBtn); DDX_Control(pDX, IDC_FRAME_ONE, m_OneFrameBtn); DDX_Control(pDX, IDC_FRAME_CONTINUE, m_ContinueFrameBtn); DDX_Control(pDX, IDC_READ_BMP, m_ReadBmpBtn); DDX_Control(pDX, IDC_SAVE_BMP, m_SaveBmpBtn); DDX_Control(pDX, IDC_SET_EXPORE, m_SetExpBtn); DDX_Control(pDX, IDC_HK_ZOOM_IN, m_ZoomInBtn); DDX_Control(pDX, IDC_HK_ZOOM_OUT, m_ZoomOutBtn); DDX_Control(pDX, IDC_ZOOM_FULL, m_ZoomFullBtn); DDX_Control(pDX, IDC_LOAD_CATCH_TEMP, m_ReadTempBtn); DDX_Control(pDX, IDC_CREAT_CATCH_TEMP, m_EditTempBtn); DDX_Control(pDX, IDC_TEST_CATCH_TEMP, m_TestTempBtn); DDX_Control(pDX, IDC_SAVE_CATCH_TEMP, m_SaveTempBtn); DDX_Text(pDX, IDC_EDIT_SET_EXP, m_nExpore); DDX_Control(pDX, IDC_TEST_CATCH_TEMP2, m_TestDefinitionBtn); DDX_Control(pDX, IDC_TEST_CATCH_TEMP3, m_SetThresholdBtn); DDX_Text(pDX, IDC_EDIT_SET_EXP2, m_CurTrackThreshold); DDX_Text(pDX, IDC_STATIC_CurValue, m_CurPic_Definition); } BOOL DlgHawkvisCamera::OnInitDialog() { gDlgHawkvisCamera = this; CDialogEx::OnInitDialog(); m_ISP3000LogoBtn.SetUpColor(RGB_YELLOW); m_OpenCamBtn.SetUpColor(RGB_GREEN); m_CloseCamBtn.SetUpColor(RGB_GREEN); m_ReadTempBtn.SetUpColor(RGB_GREEN1); m_EditTempBtn.SetUpColor(RGB_GREEN1); m_TestTempBtn.SetUpColor(RGB_GREEN1); m_SaveTempBtn.SetUpColor(RGB_GREEN1); m_OneFrameBtn.SetUpColor(RGB_PINK); m_ContinueFrameBtn.SetUpColor(RGB_PINK); Update(); try { if (m_HawkvisCtrl2.MV_SelectAdapterByIdx(1)) { if (m_HawkvisCtrl2.MV_OpenCamera()) { m_pHawkvisCtrl = &m_HawkvisCtrl2; m_HawkvisCtrl2.MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore); } else { AfxMessageBox("相机2 MV_OpenCamera 失败!"); } m_HawkvisCtrl2.SetCrossShow(1, 30, 30, -1, -1, TRUE); if (m_HawkvisCtrl2.MV_GetOneFrame()) { m_HawkvisCtrl2.ZoomFitWindow(); } else { AfxMessageBox("相机2 MV_GetOneFrame 失败!"); } } if (m_HawkvisCtrl1.MV_SelectAdapterByIdx(0)) { if (m_HawkvisCtrl1.MV_OpenCamera()) { m_pHawkvisCtrl = &m_HawkvisCtrl1; m_HawkvisCtrl1.MV_SetCameraExpTime(gCameraHawkvis->m_nCam1Expore); m_nExpore = gCameraHawkvis->m_nCam1Expore; } else { AfxMessageBox("相机1 MV_OpenCamera 失败!"); } m_HawkvisCtrl1.SetCrossShow(1, 30, 30, -1, -1, TRUE); if (m_HawkvisCtrl1.MV_GetOneFrame()) { m_HawkvisCtrl1.ZoomFitWindow(); } else { AfxMessageBox("相机1 MV_GetOneFrame 失败!"); } } } catch (...) { AfxMessageBox("打开相机异常."); } UpdateData(FALSE); return TRUE; } //观察平台坐标的变化 void DlgHawkvisCamera::UpdateInfo() { //换文件时,自动换模板 if ((!gLogMgr->IsDebuging()) && gCameraHawkvis->GetCurShapeModelID() != m_ShapeModelID) { auto temp = m_pHawkvisCtrl; m_ShapeModelID = gCameraHawkvis->GetCurShapeModelID(); m_pHawkvisCtrl = &m_HawkvisCtrl1; OnBnClickedLoadCatchTemp(); Sleep(200); m_pHawkvisCtrl = &m_HawkvisCtrl2; OnBnClickedLoadCatchTemp(); m_pHawkvisCtrl = temp; } if (m_DlgCurCamIndex == gCameraHawkvis->GetCamIndex()) return; m_DlgCurCamIndex = gCameraHawkvis->GetCamIndex(); //系数立即刷新,避免重复进入 if (gCameraHawkvis->GetCamIndex() == 0) { m_pHawkvisCtrl = &m_HawkvisCtrl1; ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE); ((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(TRUE); } if (gCameraHawkvis->GetCamIndex() == 1) { m_pHawkvisCtrl = &m_HawkvisCtrl2; ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE); //OnBnClickedToCam2(); } UpdateData(FALSE); } void DlgHawkvisCamera::Update() { SetTimer(WORK_TIMER1, WORK_TIME_DELAY1, NULL);//用timer来更新,否则会报错 } void DlgHawkvisCamera::OnTimer(UINT nIDEvent) { if (nIDEvent == WORK_TIMER1) { UpdateInfo(); //KillTimer(WORK_TIMER1); } CDialog::OnTimer(nIDEvent); } #if 1 void DlgHawkvisCamera::OnBnClickedOpenCam() { #ifdef __HAWKVIS_MINDVISION_CCD__ if (m_pHawkvisCtrl->MV_OpenCamera()) #else if (m_HawkvisCtrl.HV_OpenCamera()) #endif { gLogMgr->WriteDebugLog("Hawkvis : Open Cam ---->OK"); } else gLogMgr->WriteDebugLog("Hawkvis : Open Cam ---->ERR"); } void DlgHawkvisCamera::OnBnClickedCloseCam() { #ifdef __HAWKVIS_MINDVISION_CCD__ if (m_pHawkvisCtrl->MV_CloseCamera()) { gLogMgr->WriteDebugLog("Hawkvis : Close Cam OK"); } else { gLogMgr->WriteDebugLog("Hawkvis : Close Cam Failed!"); } #else m_HawkvisCtrl.HV_CloseCamera(); #endif } void DlgHawkvisCamera::OnBnClickedFrameOne() { m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck()); #ifdef __HAWKVIS_MINDVISION_CCD__ /*m_pHawkvisCtrl->MV_GetOneFrame(); Sleep(100);*/ if (m_pHawkvisCtrl->MV_GetOneFrame()) #else if (m_HawkvisCtrl.HV_GetOneFrame()) #endif { //m_HawkvisCtrl.Rotate180(); m_pHawkvisCtrl->ZoomFitWindow(); gLogMgr->WriteDebugLog("Hawkvis : FrameOne --OK"); } else { gLogMgr->WriteDebugLog("Hawkvis : FrameOne --ERR"); } } void DlgHawkvisCamera::OnBnClickedFrameContinue() { m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck()); #ifdef __HAWKVIS_MINDVISION_CCD__ if (m_pHawkvisCtrl->MV_GetContinueFrame()) #else if (m_HawkvisCtrl.HV_GetContinueFrame()) #endif { m_pHawkvisCtrl->ZoomFitWindow(); gLogMgr->WriteDebugLog("Hawkvis : FrameContinue --OK"); } else { gLogMgr->WriteDebugLog("Hawkvis : FrameContinue --ERR"); } } void DlgHawkvisCamera::OnBnClickedReadBmp() { m_pHawkvisCtrl->ReadImage(); } void DlgHawkvisCamera::OnBnClickedSaveBmp() { CFileMgr FileMgr; CString path = FileMgr.GetWorkPath(); m_pHawkvisCtrl->WriteImage((LPCTSTR)path, "OutputImg"); gLogMgr->WriteDebugLog("Hawkvis : SaveBmp"); } //设置曝光值 void DlgHawkvisCamera::OnBnClickedSetExpore() { UpdateData(TRUE); #ifdef __HAWKVIS_MINDVISION_CCD__ if (m_DlgCurCamIndex == 0) { gCameraHawkvis->m_nCam1Expore = m_nExpore; } else { gCameraHawkvis->m_nCam2Expore = m_nExpore; } m_pHawkvisCtrl->MV_SetCameraExpTime(m_nExpore); #else m_HawkvisCtrl.HV_SetCameraExpTime(m_nExpore); #endif gLogMgr->WriteDebugLog("Hawkvis : SetExpore"); OnBnClickedFrameOne(); } #endif void DlgHawkvisCamera::OnBnClickedZoomFull() { m_pHawkvisCtrl->ZoomFitWindow(); } void DlgHawkvisCamera::OnBnClickedHkZoomIn() { m_pHawkvisCtrl->ZoomIn(); } void DlgHawkvisCamera::OnBnClickedHkZoomOut() { m_pHawkvisCtrl->ZoomOut(); } #if 1 //编辑模板 void DlgHawkvisCamera::OnBnClickedCreatCatchTemp() { //调用控件接口,创建基于形状的模板,输入参数为模板ID号。控件最多支持创建100个模板,即模板号为0~99 // m_HawkvisCtrl.CreateShapeModel(0); try { m_pHawkvisCtrl->CreateShapeModel(gCameraHawkvis->GetCurShapeModelID()); } catch (...) { AfxMessageBox("编辑模板 异常!"); } } void DlgHawkvisCamera::OnBnClickedTestCatchTemp() { //清除之前绘制的圆 m_pHawkvisCtrl->ClearGraphicObject(); //抓取一帧 #ifdef __HAWKVIS_MINDVISION_CCD__ if (!m_pHawkvisCtrl->MV_GetOneFrame()) #else if (!m_HawkvisCtrl->HV_GetOneFrame()) #endif { CString str = _T("func : Hawkvis Get One Frame----->Error"); //CExceptionMsg Msg; //Msg.SetMsg(str); //throw Msg; gLogMgr->WriteDebugLog(str); } Sleep(300);//等待数据结果输出到ocx 控件上 //模板查找 double pdbX[10], pdbY[10], pdbAngles[10], pdbScale[10], pdbSore[10]; long nCount[1] = { 1 }; //FindShapeMode 控件的模板查找函数。 //第一个参数,金字塔层数,取值范围1~5 //第二个参数,输出查找到的目标列坐标 //第三个参数,输出查找到的目标行坐标 //第四个参数,输出查找到的目标角度 //第五个参数,输出查找到的目标伸缩度 //第六个参数,输出查找到的目标分数 //第七个参数,输出查找到的目标个数 //第八个参数,输入查找模板的ID号 VARIANT *v_pdbX = new VARIANT[1]; VARIANT *v_pdbY = new VARIANT[1]; VARIANT *v_pdbAngles = new VARIANT[1]; VARIANT *v_pdbScale = new VARIANT[1]; VARIANT *v_pdbSore = new VARIANT[1]; bool ret = false; try { ret = m_pHawkvisCtrl->FindShapeModel(gCameraHawkvis->GetCurShapeModelID(), v_pdbY, v_pdbX, v_pdbAngles, v_pdbScale, v_pdbSore, nCount); } catch (...) { ret = false; } if (!ret)//2018-01-15 增加保护,否则下面可能会报错 { CString str = _T("func : Hawkvis Find Shape Model----->Error"); //CExceptionMsg Msg; //Msg.SetMsg(str); //throw Msg; gLogMgr->WriteDebugLog(str); return; } //pdbX for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbX->parray); ++index) { ::SafeArrayGetElement(v_pdbX->parray, &index, pdbX + index); } //pdbY for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbY->parray); ++index) { ::SafeArrayGetElement(v_pdbY->parray, &index, pdbY + index); } //pdbAngles for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbAngles->parray); ++index) { ::SafeArrayGetElement(v_pdbAngles->parray, &index, pdbAngles + index); } //pdbScale for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbScale->parray); ++index) { ::SafeArrayGetElement(v_pdbScale->parray, &index, pdbScale + index); } //pdbSore for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbSore->parray); ++index) { ::SafeArrayGetElement(v_pdbSore->parray, &index, pdbSore + index); } //显示查找到的模板的位置 #if 1 Dbxy pt; CString str; str.Format("X: %0.3f, Y:%0.f", pdbX[0], pdbY[0]); pt.x = pdbX[0]; pt.y = pdbY[0]; str.Format("X: %0.3f, Y:%0.3f", pt.x, pt.y); gLogMgr->WriteDebugLog(str); #endif //gCommonFlowMgr->CameraCatch(); } void DlgHawkvisCamera::OnBnClickedLoadCatchTemp() { CFileMgr FileMgr; CString path = FileMgr.GetWorkPath(); // auto b=m_HawkvisCtrl.LoadShapeModel((LPCTSTR)path); try { auto b = m_pHawkvisCtrl->LoadShapeModelByID(gCameraHawkvis->GetCurShapeModelID(), (LPCTSTR)path); CString str; str.Format("Hawkvis : LoadatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID()); if (b) str += " 成功!"; else str += " 失败!"; gLogMgr->WriteDebugLog(str); } catch (...) { AfxMessageBox("加载模板 异常!"); } //gLogMgr->WriteDebugLog("Hawkvis : LoadCatchTemp"); } void DlgHawkvisCamera::OnBnClickedSaveCatchTemp() { //SaveShapeMode 保存模板函数 //第一个参数,模板保存的路径 //第二个参数,模板保存的路径名长度 CFileMgr FileMgr; CString path = FileMgr.GetWorkPath(); //auto b= m_HawkvisCtrl.SaveShapeModel((LPCTSTR)path); try { auto b = m_pHawkvisCtrl->SaveShapeModelByID(gCameraHawkvis->GetCurShapeModelID(), (LPCTSTR)path); CString str; str.Format("Hawkvis : SaveCatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID()); if (b) str += " 成功!"; else str += " 失败!"; gLogMgr->WriteDebugLog(str); if (m_pHawkvisCtrl == &m_HawkvisCtrl1) { m_pHawkvisCtrl = &m_HawkvisCtrl2; Sleep(100); OnBnClickedLoadCatchTemp(); m_pHawkvisCtrl = &m_HawkvisCtrl1;//恢复 } else { m_pHawkvisCtrl = &m_HawkvisCtrl1; Sleep(100); OnBnClickedLoadCatchTemp(); m_pHawkvisCtrl = &m_HawkvisCtrl2;//恢复 } } catch (...) { AfxMessageBox("保存模板 异常!"); } } #endif void DlgHawkvisCamera::OnBnClickedToCam1() { m_pHawkvisCtrl = &m_HawkvisCtrl1; return; /*try { m_pHawkvisCtrl->MV_CloseCamera(); if (m_pHawkvisCtrl->MV_SelectAdapterByIdx(0)) { if (m_pHawkvisCtrl->MV_OpenCamera()) { OnBnClickedLoadCatchTemp();//读取模板 m_pHawkvisCtrl->MV_SetCameraExpTime(gCameraHawkvis->m_nCam1Expore); m_nExpore = gCameraHawkvis->m_nCam1Expore; //UpdateData(FALSE); //OnBnClickedSetExpore();//设置曝光 } m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck()); if (m_pHawkvisCtrl->MV_GetOneFrame()) { m_pHawkvisCtrl->ZoomFitWindow(); } / *else { static bool bfirst = true; if (bfirst) { AfxMessageBox("相机1连续采集失败!");//报错一次 bfirst = false; } }* / } else { static bool bfirst = true; if (bfirst) { bfirst = false; AfxMessageBox("打开相机1失败!");//报错一次 } } m_DlgCurCamIndex = 0; gCameraHawkvis->SetCamIndex(0); ((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE); gLogMgr->WriteDebugLog("Switch To Cam1"); } catch (...) { AfxMessageBox("打开相机1 异常!");//报错一次 }*/ } void DlgHawkvisCamera::OnBnClickedToCam2() { m_pHawkvisCtrl = &m_HawkvisCtrl2; return; /* try { m_pHawkvisCtrl->MV_CloseCamera(); if (m_pHawkvisCtrl->MV_SelectAdapterByIdx(1)) { if (m_pHawkvisCtrl->MV_OpenCamera()) { OnBnClickedLoadCatchTemp();//读取模板 m_pHawkvisCtrl->MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore); m_nExpore = gCameraHawkvis->m_nCam2Expore; //UpdateData(FALSE); //OnBnClickedSetExpore();//设置曝光 } m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck()); if (m_pHawkvisCtrl->MV_GetOneFrame()) { m_pHawkvisCtrl->ZoomFitWindow(); } } else { static bool bfirst = true; if (bfirst) { AfxMessageBox("打开相机2失败!");//报错一次 bfirst = false; } } m_DlgCurCamIndex = 1; gCameraHawkvis->SetCamIndex(1); ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE); gLogMgr->WriteDebugLog("Switch To Cam2"); } catch (...) { AfxMessageBox("打开相机2 异常!");//报错一次 }*/ } void DlgHawkvisCamera::OnBnClickedTestDefinition() { #ifdef __HAWKVIS_MINDVISION_CCD__ if (m_pHawkvisCtrl->MV_GetOneFrame()) #else if (m_HawkvisCtrl.HV_GetOneFrame()) #endif { m_pHawkvisCtrl->ZoomFitWindow(); gLogMgr->WriteDebugLog("Hawkvis : FrameOne --OK"); } else { gLogMgr->WriteDebugLog("Hawkvis : FrameOne --ERR"); m_CurPic_Definition = 0; PostMessage(WM_UPDATE_FALSE); return; } CFileMgr fg; CString path = fg.GetWorkPath(); m_pHawkvisCtrl->WriteImage((LPCTSTR)path, "PicForDefinition"); Sleep(50); path += "\\PicForDefinition.bmp"; Mat imageSource = imread((LPCTSTR)path); /*Mat imageGray; cvtColor(imageSource, imageGray, CV_RGB2GRAY);*/ Mat imageSobel; //Laplacian(imageSource, imageSobel, CV_16U); Sobel(imageSource, imageSobel, CV_16U, 1, 1); m_CurPic_Definition = mean(imageSobel)[0]; PostMessage(WM_UPDATE_FALSE); } bool DlgHawkvisCamera::bCurPicDefinitionOK() { m_CurTrackThreshold = 0; auto FileName = gProgramCutMgr->GetCurOpenFileName(); if (FileName.IsEmpty()) return true; CString nameTail; nameTail.Format("_T%d.def", m_DlgCurCamIndex); CSmartArchive ar(FileName + nameTail, false); ar + m_CurTrackThreshold; OnBnClickedTestDefinition(); if (m_CurTrackThreshold > 0.1) { if (m_CurPic_Definition < m_CurTrackThreshold) return false; } return true; } void DlgHawkvisCamera::OnBnClickedSetThreshold() { UpdateData(TRUE); auto FileName = gProgramCutMgr->GetCurOpenFileName(); if (FileName.IsEmpty()) return; CString nameTail; nameTail.Format("_T%d.def", m_DlgCurCamIndex); CSmartArchive ar(FileName + nameTail, true); ar + m_CurTrackThreshold; }