/************************************************************************************************** 版本所有(C), 2020-2022, 北京普达迪泰 *************************************************************************************************** 文 件 名: DbCamConfigDlg.cpp 功能描述: 双相机内参标定 版 本 号: 1.00初版 作 者: HYF 生成日期; 2021-12-20 最近修改: 函数列表: 修改历史: 1.日 期 :2021-12-20 作 者 : HYF 修改内容 : 创建文件 **************************************************************************************************/ // DbCamConfigDlg.cpp: 实现文件 #include "pch.h" #include "DMS.h" #include "DbCamConfigDlg.h" #include "afxdialogex.h" #include "IDPMSManager.h" // DbCamConfigDlg 对话框 IMPLEMENT_DYNAMIC(DbCamConfigDlg, CDialogEx) DbCamConfigDlg::DbCamConfigDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DLG_DBCAM_CONFIG, pParent) { } DbCamConfigDlg::DbCamConfigDlg(CWnd* pParent, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode) : CDialogEx(IDD_DLG_DBCAM_CONFIG, pParent) , m_szEquipTypeCode(szEquipTypeCode) , m_szEquipCode(szEquipCode) , m_bIsAttached(FALSE) { } DbCamConfigDlg::~DbCamConfigDlg() { } void DbCamConfigDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_BTN_CAM_CONFIG_STEP1, m_Btn_Step1); DDX_Control(pDX, IDC_BTN_CAM_CONFIG_STEP2, m_Btn_Step2); } BEGIN_MESSAGE_MAP(DbCamConfigDlg, CDialogEx) ON_BN_CLICKED(IDC_BTN_CAM_CONFIG_STEP1, &DbCamConfigDlg::OnBnClickedBtnCamConfigStep1) ON_BN_CLICKED(IDC_BTN_CAM_CONFIG_STEP2, &DbCamConfigDlg::OnBnClickedBtnCamConfigStep2) ON_MESSAGE(WM_START_IDPMS, OnReStartIDPMS) ON_MESSAGE(WM_CAM_CONFIG_FAILURE, OnCamConfigFailure) ON_MESSAGE(WM_CAM_CONFIG_SUCCESS, OnCamConfigSuccess) ON_WM_DESTROY() ON_WM_SIZE() END_MESSAGE_MAP() // DbCamConfigDlg 消息处理程序 BOOL DbCamConfigDlg::OnInitDialog() { CDialogEx::OnInitDialog(); this->ShowWindow(SW_MAXIMIZE); AttachIDPMS(); RelayoutIDPMS(); m_Btn_Step1.EnableWindow(TRUE); m_Btn_Step2.EnableWindow(TRUE); return TRUE; } /************************************************************************************************** 函 数 名 :OnBnClickedBtnCamConfigStep1 功能描述 :事件处理-双相机标定-建立工程 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void DbCamConfigDlg::OnBnClickedBtnCamConfigStep1() { // 启动IDPMS多线程模式 IDPMSManager *pManager = IDPMSManager::GetManager(); BOOL bRet = pManager->DoubleCameraConfigStep1ProcThread(this, m_szEquipTypeCode, m_szEquipCode); m_Btn_Step1.EnableWindow(FALSE); m_Btn_Step2.EnableWindow(FALSE); } /************************************************************************************************** 函 数 名 :OnBnClickedBtnCamConfigStep2 功能描述 :事件处理-双相机外参标定 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void DbCamConfigDlg::OnBnClickedBtnCamConfigStep2() { // 启动IDPMS多线程模式 IDPMSManager *pManager = IDPMSManager::GetManager(); BOOL bRet = pManager->DoubleCameraConfigStep2ProcThread(this, m_szEquipTypeCode, m_szEquipCode); m_Btn_Step1.EnableWindow(FALSE); m_Btn_Step2.EnableWindow(FALSE); } /************************************************************************************************** 函 数 名 :OnCamConfigComplete 功能描述 :WM_CAM_CONFIG_COMPLETE处理 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ afx_msg LRESULT DbCamConfigDlg::OnCamConfigSuccess(WPARAM wp, LPARAM lp) { DMSResponse *pMsg = (DMSResponse *)wp; CString szMsg; if (pMsg != NULL) { szMsg.Format("%s", pMsg->szMsg); Utils::DMS_FreeMsg(pMsg); } else { szMsg.Format("%s", _T("执行成功!")); } GetDlgItem(IDC_STATIC_CAM_RESULT)->SetWindowText(szMsg); m_Btn_Step1.EnableWindow(TRUE); m_Btn_Step2.EnableWindow(TRUE); return 0; } /************************************************************************************************** 函 数 名 :OnCamConfigComplete 功能描述 :WM_CAM_CONFIG_COMPLETE处理 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ afx_msg LRESULT DbCamConfigDlg::OnCamConfigFailure(WPARAM wp, LPARAM lp) { DMSResponse *pMsg = (DMSResponse *)wp; CString szMsg; if (pMsg != NULL) { szMsg.Format("%s", pMsg->szMsg); Utils::DMS_FreeMsg(pMsg); } else { szMsg.Format("%s", _T("执行失败!")); } GetDlgItem(IDC_STATIC_CAM_RESULT)->SetWindowText(szMsg); m_Btn_Step1.EnableWindow(TRUE); m_Btn_Step2.EnableWindow(TRUE); return 0; } /************************************************************************************************** 函 数 名 :AttachIDPMS 功能描述 :附加IDPMS窗口到UI中 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void DbCamConfigDlg::AttachIDPMS() { // 初始化 if (g_hIDPMSHWnd) { ::SetParent(g_hIDPMSHWnd, GetDlgItem(IDC_IDPMS_RECT)->m_hWnd); //::SetParent(g_hIDPMSHWnd, this->m_hWnd); LONG style = GetWindowLong(g_hIDPMSHWnd, GWL_STYLE);// 14CF 0000 style &= ~WS_CAPTION; style &= ~WS_THICKFRAME; //style &= ~WS_MINIMIZEBOX; //style &= ~WS_MAXIMIZEBOX; //style |= WS_CHILD; style |= WS_VISIBLE; ::SetWindowLong(g_hIDPMSHWnd, GWL_STYLE, style);//eraze title of ms paint window. m_bIsAttached = TRUE; } } /************************************************************************************************** 函 数 名 :RelayoutIDPMS 功能描述 :调整IDPMS显示位置 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void DbCamConfigDlg::RelayoutIDPMS() { CRect rect; GetDlgItem(IDC_IDPMS_RECT)->GetWindowRect(&rect); ScreenToClient(rect); CRect rectShow; rectShow.left = 0; rectShow.top = 0; rectShow.right = rect.right - rect.left; rectShow.bottom = rect.bottom - rect.top; ::MoveWindow(g_hIDPMSHWnd, rectShow.left, rectShow.top, rectShow.right, rectShow.bottom, true); ::ShowWindow(g_hIDPMSHWnd, SW_SHOWMAXIMIZED); ::SetFocus(g_hIDPMSHWnd); // ::SwitchToThisWindow(g_hIDPMSHWnd, TRUE); //::SetWindowPos(g_hIDPMSHWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); //::SetWindowPos(g_hIDPMSHWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); ::SetForegroundWindow(g_hIDPMSHWnd); ::BringWindowToTop(g_hIDPMSHWnd); ::InvalidateRect(g_hIDPMSHWnd, NULL, TRUE); ::UpdateWindow(g_hIDPMSHWnd); //::SetWindowPos(g_hIDPMSHWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } /************************************************************************************************** 函 数 名 :AttachIDPMS 功能描述 :附加IDPMS窗口到UI中 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void DbCamConfigDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (m_bIsAttached) { RelayoutIDPMS(); } } /************************************************************************************************** 函 数 名 :OnDestroy 功能描述 :WM_DESTORY消息处理 输入参数 :略 输出参数 :略 返 回 值 :void **************************************************************************************************/ void DbCamConfigDlg::OnDestroy() { if (g_hIDPMSHWnd) { ::SetParent(g_hIDPMSHWnd, NULL); ::ShowWindow(g_hIDPMSHWnd, SW_HIDE); } CDialogEx::OnDestroy(); } /************************************************************************************************** 函 数 名 :OnRestartIDPMS 功能描述 :WM_RESTART_IDPMS处理 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ afx_msg LRESULT DbCamConfigDlg::OnReStartIDPMS(WPARAM wp, LPARAM lp) { // 从IDPMS获取数据 IDPMSManager *pManager = IDPMSManager::GetManager(); BOOL bRet = pManager->StartIDPMS2(); if (bRet) { AttachIDPMS(); RelayoutIDPMS(); m_Btn_Step1.EnableWindow(TRUE); m_Btn_Step2.EnableWindow(TRUE); } return 0; }