// CDetectorDlg.cpp: 实现文件 // #include "pch.h" #include "resource.h" // 主符号 #include "CDetectorDlg.h" #include "afxdialogex.h" #include "CImageViewDlg.h" #include "CConfigDlg.h" using namespace placeholders; #define MSG_IMAGE_NOTIFY (WM_USER+111) // CDetectorDlg 对话框 IMPLEMENT_DYNAMIC(CDetectorDlg, CDiosBasicDlg) CDetectorDlg::CDetectorDlg(CWnd* pParent /*=nullptr*/) : CDiosBasicDlg(Dev_Detector, IDD_DIALOG5, pParent) { } CDetectorDlg::~CDetectorDlg() { } void CDetectorDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT1, m_EditDetectorID); DDX_Control(pDX, IDC_EDIT2, m_EditAcqMode); DDX_Control(pDX, IDC_EDIT3, m_EditSyncMode); DDX_Control(pDX, IDC_EDIT4, m_EditXWinSize); //DDX_Text(pDX, IDC_EDIT1, m_nDetectorID); //DDV_MinMaxUInt(pDX, m_nDetectorID, 0, 5); //DDX_Text(pDX, IDC_EDIT2, m_nAcqMode); //DDV_MinMaxUInt(pDX, m_nAcqMode, 0, 5); //DDX_Text(pDX, IDC_EDIT3, m_nSyncMode); //DDV_MinMaxUInt(pDX, m_nSyncMode, 0, 5); //DDX_Text(pDX, IDC_EDIT4, m_nXWindowSize); DDX_Control(pDX, IDC_EDIT5, m_EditDetectorType); DDX_Control(pDX, IDC_EDIT6, m_EditConnection); DDX_Control(pDX, IDC_EDIT7, m_EditBattery); DDX_Control(pDX, IDC_EDIT8, m_EditWifi); DDX_Control(pDX, IDC_EDIT9, m_EditTemperature); DDX_Control(pDX, IDC_EDIT10, m_EditDetectorStatus); DDX_Control(pDX, IDC_EDIT11, m_EditXwindowStatus); DDX_Control(pDX, IDC_EDIT12, m_EditExpTime); DDX_Control(pDX, IDC_EDIT13, m_EditStartMode); } BEGIN_MESSAGE_MAP(CDetectorDlg, CDialogEx) ON_MESSAGE(MSG_IMAGE_NOTIFY, ShowRawImage) ON_BN_CLICKED(IDC_BUTTON3, &CDetectorDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON1, &CDetectorDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CDetectorDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON4, &CDetectorDlg::OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON12, &CDetectorDlg::OnBnClickedButton12) ON_BN_CLICKED(IDC_BUTTON5, &CDetectorDlg::OnBnClickedButton5) ON_BN_CLICKED(IDC_BUTTON6, &CDetectorDlg::OnBnClickedButton6) ON_BN_CLICKED(IDC_BUTTON7, &CDetectorDlg::OnBnClickedButton7) ON_BN_CLICKED(IDC_BUTTON8, &CDetectorDlg::OnBnClickedButton8) ON_BN_CLICKED(IDC_BUTTON9, &CDetectorDlg::OnBnClickedButton9) ON_BN_CLICKED(IDC_BUTTON10, &CDetectorDlg::OnBnClickedButton10) ON_BN_CLICKED(IDC_BUTTON11, &CDetectorDlg::OnBnClickedButton11) ON_EN_KILLFOCUS(IDC_EDIT1, &CDetectorDlg::OnEnKillfocusEdit1) ON_EN_KILLFOCUS(IDC_EDIT2, &CDetectorDlg::OnEnKillfocusEdit2) ON_EN_KILLFOCUS(IDC_EDIT3, &CDetectorDlg::OnEnKillfocusEdit3) ON_EN_KILLFOCUS(IDC_EDIT4, &CDetectorDlg::OnEnKillfocusEdit4) ON_EN_KILLFOCUS(IDC_EDIT12, &CDetectorDlg::OnEnKillfocusEdit12) END_MESSAGE_MAP() // CDetectorDlg 消息处理程序 //初始化配置 BOOL CDetectorDlg::OnInitDialog() { CDiosBasicDlg::OnInitDialog(); return TRUE; } //设备初始化 bool CDetectorDlg::AppInitial(bool act) { CreatMode(act); m_CurrentDev = CDeviceSET::GetInstance()->m_CDeviceMap.find(Dev_Detector); CString log; try { if (act) { if (nullptr != m_pDevice) { m_pDevice->EventCenter->OnDataNotify.Push(bind(&CDetectorDlg::OnDataNotify, this, _1, _2, _3, _4, _5, _6)); m_pDevice->EventCenter->OnMaxBlockSize.Push(bind(&CDetectorDlg::OnMaxBlockSize, this, _1, _2, _3, _4, _5)); } else { mLog::Debug("(FPD)- FPDDevice not Create"); } } } catch (const ResDataObjectExption&) { log.Format("(FPD)- open FPD file failed"); mLog::Error(log); ToolsDlgLog(log); return false; } catch (...) { log.Format("(FPD)- FPD AppInitial failed"); mLog::Error(log); ToolsDlgLog(log); return false; } return true; } //获取初始值 bool CDetectorDlg::GetInitData() { CString log; CString tempStr; string strTempValue; if (m_pDevice != nullptr) { //xxxxxxxxxxxx = atoi(DevGetValue(Dev_Detector, nsFPD::AttrKey::DetectorType).c_str()); //tempStr.Format("%d", xxxxxxxx); //xxxxxxx.SetWindowText(tempStr); } return true; } //设置消息对照表 void CDetectorDlg::SetMagMap() { auto HW_UNKNOWN = [this](int NotifyCode, string key, string context) { CString strNotify; strNotify.Format("(FPD)- FPD can not deal with Attribute[%s] \n", key.c_str()); ToolsDlgLog(strNotify); }; auto HW_Battery = [this](int NotifyCode, string key, string context)//Battery { m_EditBattery.SetWindowText(context.c_str()); }; auto HW_Wifi = [this](int NotifyCode, string key, string context)//Wifi { m_EditWifi.SetWindowText(context.c_str()); }; auto HW_Temperature = [this](int NotifyCode, string key, string context)//Temperature { m_EditTemperature.SetWindowText(context.c_str()); }; auto HW_DetectorStatus = [this](int NotifyCode, string key, string context)//DetectorStatus { m_EditDetectorStatus.SetWindowText(context.c_str()); }; auto HW_XwindowStatus = [this](int NotifyCode, string key, string context)//XwindowStatus { m_EditXwindowStatus.SetWindowText(context.c_str()); }; //Detector m_mapFrame["UnKnown"] = tFrameMapItem(HW_UNKNOWN); m_mapFrame[nsFPD::AttrKey::Remain_Power_Value] = tFrameMapItem(HW_Battery); m_mapFrame[nsFPD::AttrKey::Wifi_Strength_Value] = tFrameMapItem(HW_Wifi); m_mapFrame[nsFPD::AttrKey::Temperature_Value] = tFrameMapItem(HW_Temperature); m_mapFrame[nsFPD::AttrKey::DetectorStatus] = tFrameMapItem(HW_DetectorStatus); m_mapFrame[nsFPD::AttrKey::XwindowStatus] = tFrameMapItem(HW_XwindowStatus); } void CDetectorDlg::OnDataNotify(CDetectorDlg* pThis, int nCode, string key, string ctx, string strHeader, char* buf, int len) { if (pThis != nullptr) { if (pThis->m_pImage == NULL) { pThis->m_pImage = new WORD[len]; pThis->m_nImageBytes = len; } else if (pThis->m_nImageBytes < len) { delete[] pThis->m_pImage; pThis->m_pImage = new WORD[len]; pThis->m_nImageBytes = len; } memcpy(pThis->m_pImage, buf, len); if (key == nsFPD::AttrKey::ImgDataInfo) { ResDataObject rdoInfo; try { if (rdoInfo.decode(ctx.c_str())) { pThis->m_nImageW = rdoInfo["Width"]; pThis->m_nImageH = rdoInfo["Height"]; } } catch (...) { ToolsDlgMSG("FPDError", "nDataNotify ResDataObjectExption"); } } CString strMsg; strMsg.Format("%d, %s :%s, buf=0x%p len=%i\n", nCode, key.c_str(), ctx.c_str(), buf, len); ToolsDlgMSG("OnDataNotify", strMsg); ::PostMessage(pThis->GetSafeHwnd(), MSG_IMAGE_NOTIFY, 0, 0); } } void CDetectorDlg::OnMaxBlockSize(CDetectorDlg* pThis, string str, DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4) { CString strMsg; if (pThis != nullptr) { strMsg.Format("%s, %i, %i, %i, %i", str.c_str(), dw1, dw2, dw3, dw4); ToolsDlgMSG("OnMaxBlockSize", strMsg); } } void CDetectorDlg::InitPageElements(bool act) { if (act) { ShowPageElements(FALSE, TRUE, FALSE, FALSE); SetMagMap(); GetInitData(); } else { ShowPageElements(TRUE, FALSE, TRUE, FALSE); } } //设置窗口元素显示 void CDetectorDlg::ShowPageElements(bool init, bool exit, bool cfg, bool general) { __super::ShowPageElements(init, exit, cfg, general); bool temp = exit; //EnterExam GetDlgItem(IDC_BUTTON4)->EnableWindow(temp); //ExitExam GetDlgItem(IDC_BUTTON12)->EnableWindow(temp); //ActiveFPD GetDlgItem(IDC_BUTTON5)->EnableWindow(temp); GetDlgItem(IDC_EDIT1)->EnableWindow(temp); //SetAcqMode GetDlgItem(IDC_BUTTON6)->EnableWindow(temp); GetDlgItem(IDC_EDIT2)->EnableWindow(temp); //SetSyncMode GetDlgItem(IDC_BUTTON7)->EnableWindow(temp); GetDlgItem(IDC_EDIT3)->EnableWindow(temp); //SetXWinSize GetDlgItem(IDC_BUTTON8)->EnableWindow(temp); GetDlgItem(IDC_EDIT4)->EnableWindow(temp); //PrepareAcq GetDlgItem(IDC_BUTTON9)->EnableWindow(temp); //StartAcq GetDlgItem(IDC_BUTTON10)->EnableWindow(temp); //StopAcq GetDlgItem(IDC_BUTTON11)->EnableWindow(temp); //EnterExam GetDlgItem(IDC_EDIT5)->EnableWindow(temp); //EnterExam GetDlgItem(IDC_EDIT6)->EnableWindow(temp); //EnterExam GetDlgItem(IDC_EDIT7)->EnableWindow(temp); //EnterExam GetDlgItem(IDC_EDIT8)->EnableWindow(temp); //EnterExam GetDlgItem(IDC_EDIT9)->EnableWindow(temp); //SetXWinSize GetDlgItem(IDC_BUTTON13)->EnableWindow(temp); GetDlgItem(IDC_EDIT12)->EnableWindow(temp); } //选择配置 void CDetectorDlg::OnBnClickedButton3() { CString log; nsCFG::CConfigDlg dlgcfg(Dev_Detector, m_strCfgLib, m_strCfgFile); dlgcfg.DoModal(); if (m_strCfgFile.empty()) { log.Format("(FPD)- FPD m_strCfgFile is empty"); mLog::Warn(log); ToolsDlgLog(log); } else { ShowPageElements(TRUE, FALSE, TRUE, FALSE); } } //初始化 void CDetectorDlg::OnBnClickedButton1() { CString log; if (m_pDriver == nullptr) if (!m_pDevice) { if (AppInitial(true)) { ShowPageElements(FALSE, TRUE, FALSE, FALSE); SetMagMap(); GetInitData(); mLog::Debug("(FPD)- FPD Initial success"); } else { log.Format("(FPD)- FPD Initial fail"); mLog::Error(log); ToolsDlgLog(log); } } else { log.Format("(FPD)- m_pDevice not empty"); mLog::Warn(log); ToolsDlgLog(log); } else { log.Format("(FPD)- m_pDriver not empty"); mLog::Warn(log); ToolsDlgLog(log); } } //退出 void CDetectorDlg::OnBnClickedButton2() { if (AppInitial(false)) { ShowPageElements(TRUE, FALSE, TRUE, FALSE); } } //调用图片显示窗口 LRESULT CDetectorDlg::ShowRawImage(WPARAM wParam, LPARAM lParam) { CImageViewDlg dlgImage; dlgImage.m_nwidth = m_nImageW; dlgImage.m_nheight = m_nImageH; dlgImage.m_pdata = new unsigned short[dlgImage.m_nwidth * dlgImage.m_nheight]; for (int i = 0; i < dlgImage.m_nwidth * dlgImage.m_nheight; ++i) { dlgImage.m_pdata[i] = m_pImage[i]; } dlgImage.DoModal(); //dlgImage.ShowWindow(SW_SHOW); delete[] dlgImage.m_pdata; return 0; } //EnterExam void CDetectorDlg::OnBnClickedButton4() { DevActionValue(nsFPD::ActionKey::EnterExam, { to_string(1) }); } //ActiveFPD void CDetectorDlg::OnBnClickedButton5() { DevActionValue(nsFPD::ActionKey::DiosActiveDetector, { to_string(m_nDetectorID) }); } //SetAcqMode void CDetectorDlg::OnBnClickedButton6() { char data[20]{ 0 }; strncpy_s(data, m_strAcqMode.c_str(), 19); DevActionValue(nsFPD::ActionKey::SetAcqMode, { data }); } //SetSyncMode void CDetectorDlg::OnBnClickedButton7() { DevActionValue(nsFPD::ActionKey::SetSyncMode, { to_string(m_nSyncMode) }); } //SetXWinSize void CDetectorDlg::OnBnClickedButton8() { DevActionValue(nsFPD::ActionKey::SetXwindowSize, { to_string(m_nXWindowSize) }); } //PrepareAcq void CDetectorDlg::OnBnClickedButton9() { DevAction(nsFPD::ActionKey::PrepareAcquisition); } //StartAcq void CDetectorDlg::OnBnClickedButton10() { //DevAction(nsFPD::ActionKey::StartAcquisition); char data[20]{ 0 }; strncpy_s(data, m_strStartMode.c_str(), 19); DevActionValue(nsFPD::ActionKey::StartAcquisition, { data }); } //StopAcq void CDetectorDlg::OnBnClickedButton11() { DevAction(nsFPD::ActionKey::StopAcquisition); } //ExitExam void CDetectorDlg::OnBnClickedButton12() { DevActionValue(nsFPD::ActionKey::EnterExam, { to_string(2) }); } //SetExpTime void CDetectorDlg::OnBnClickedButton13() { DevActionValue(nsFPD::ActionKey::SetExposureTimes, { to_string(m_nExpTime) }); } //DetectorID_Value void CDetectorDlg::OnEnKillfocusEdit1() { CString tempStr; m_EditDetectorID.GetWindowText(tempStr); m_nDetectorID = atoi(tempStr); } //AcqMode_Value void CDetectorDlg::OnEnKillfocusEdit2() { CString tempStr; m_EditAcqMode.GetWindowText(tempStr); m_strAcqMode = tempStr; } //SyncMode_Value void CDetectorDlg::OnEnKillfocusEdit3() { CString tempStr; m_EditSyncMode.GetWindowText(tempStr); m_nSyncMode = atoi(tempStr); } //XWinSize_Value void CDetectorDlg::OnEnKillfocusEdit4() { CString tempStr; m_EditXWinSize.GetWindowText(tempStr); m_nXWindowSize = atoi(tempStr); } //XWinSize_Value void CDetectorDlg::OnEnKillfocusEdit12() { CString tempStr; m_EditExpTime.GetWindowText(tempStr); m_nExpTime = atoi(tempStr); } //StartMode_Value void CDetectorDlg::OnEnKillfocusEdit13() { CString tempStr; m_EditStartMode.GetWindowText(tempStr); m_strStartMode = tempStr; }