DbCamConfigDlg.cpp 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. /**************************************************************************************************
  2. 版本所有(C), 2020-2022, 北京普达迪泰
  3. ***************************************************************************************************
  4. 文 件 名: DbCamConfigDlg.cpp
  5. 功能描述: 双相机内参标定
  6. 版 本 号: 1.00初版
  7. 作 者: HYF
  8. 生成日期; 2021-12-20
  9. 最近修改:
  10. 函数列表:
  11. 修改历史:
  12. 1.日 期 :2021-12-20
  13. 作 者 : HYF
  14. 修改内容 : 创建文件
  15. **************************************************************************************************/
  16. // DbCamConfigDlg.cpp: 实现文件
  17. #include "pch.h"
  18. #include "DMS.h"
  19. #include "DbCamConfigDlg.h"
  20. #include "afxdialogex.h"
  21. #include "IDPMSManager.h"
  22. // DbCamConfigDlg 对话框
  23. IMPLEMENT_DYNAMIC(DbCamConfigDlg, CDialogEx)
  24. DbCamConfigDlg::DbCamConfigDlg(CWnd* pParent /*=nullptr*/)
  25. : CDialogEx(IDD_DLG_DBCAM_CONFIG, pParent)
  26. {
  27. }
  28. DbCamConfigDlg::DbCamConfigDlg(CWnd* pParent, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode)
  29. : CDialogEx(IDD_DLG_DBCAM_CONFIG, pParent)
  30. , m_szEquipTypeCode(szEquipTypeCode)
  31. , m_szEquipCode(szEquipCode)
  32. , m_bIsAttached(FALSE)
  33. {
  34. }
  35. DbCamConfigDlg::~DbCamConfigDlg()
  36. {
  37. }
  38. void DbCamConfigDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialogEx::DoDataExchange(pDX);
  41. DDX_Control(pDX, IDC_BTN_CAM_CONFIG_STEP1, m_Btn_Step1);
  42. DDX_Control(pDX, IDC_BTN_CAM_CONFIG_STEP2, m_Btn_Step2);
  43. }
  44. BEGIN_MESSAGE_MAP(DbCamConfigDlg, CDialogEx)
  45. ON_BN_CLICKED(IDC_BTN_CAM_CONFIG_STEP1, &DbCamConfigDlg::OnBnClickedBtnCamConfigStep1)
  46. ON_BN_CLICKED(IDC_BTN_CAM_CONFIG_STEP2, &DbCamConfigDlg::OnBnClickedBtnCamConfigStep2)
  47. ON_MESSAGE(WM_START_IDPMS, OnReStartIDPMS)
  48. ON_MESSAGE(WM_CAM_CONFIG_FAILURE, OnCamConfigFailure)
  49. ON_MESSAGE(WM_CAM_CONFIG_SUCCESS, OnCamConfigSuccess)
  50. ON_WM_DESTROY()
  51. ON_WM_SIZE()
  52. END_MESSAGE_MAP()
  53. // DbCamConfigDlg 消息处理程序
  54. BOOL DbCamConfigDlg::OnInitDialog()
  55. {
  56. CDialogEx::OnInitDialog();
  57. this->ShowWindow(SW_MAXIMIZE);
  58. AttachIDPMS();
  59. RelayoutIDPMS();
  60. m_Btn_Step1.EnableWindow(TRUE);
  61. m_Btn_Step2.EnableWindow(TRUE);
  62. return TRUE;
  63. }
  64. /**************************************************************************************************
  65. 函 数 名 :OnBnClickedBtnCamConfigStep1
  66. 功能描述 :事件处理-双相机标定-建立工程
  67. 输入参数 :无
  68. 输出参数 :无
  69. 返 回 值 :void
  70. **************************************************************************************************/
  71. void DbCamConfigDlg::OnBnClickedBtnCamConfigStep1()
  72. {
  73. // 启动IDPMS多线程模式
  74. IDPMSManager *pManager = IDPMSManager::GetManager();
  75. BOOL bRet = pManager->DoubleCameraConfigStep1ProcThread(this, m_szEquipTypeCode, m_szEquipCode);
  76. m_Btn_Step1.EnableWindow(FALSE);
  77. m_Btn_Step2.EnableWindow(FALSE);
  78. }
  79. /**************************************************************************************************
  80. 函 数 名 :OnBnClickedBtnCamConfigStep2
  81. 功能描述 :事件处理-双相机外参标定
  82. 输入参数 :无
  83. 输出参数 :无
  84. 返 回 值 :void
  85. **************************************************************************************************/
  86. void DbCamConfigDlg::OnBnClickedBtnCamConfigStep2()
  87. {
  88. // 启动IDPMS多线程模式
  89. IDPMSManager *pManager = IDPMSManager::GetManager();
  90. BOOL bRet = pManager->DoubleCameraConfigStep2ProcThread(this, m_szEquipTypeCode, m_szEquipCode);
  91. m_Btn_Step1.EnableWindow(FALSE);
  92. m_Btn_Step2.EnableWindow(FALSE);
  93. }
  94. /**************************************************************************************************
  95. 函 数 名 :OnCamConfigComplete
  96. 功能描述 :WM_CAM_CONFIG_COMPLETE处理
  97. 输入参数 :略
  98. 输出参数 :略
  99. 返 回 值 :略
  100. **************************************************************************************************/
  101. afx_msg LRESULT DbCamConfigDlg::OnCamConfigSuccess(WPARAM wp, LPARAM lp)
  102. {
  103. DMSResponse *pMsg = (DMSResponse *)wp;
  104. CString szMsg;
  105. if (pMsg != NULL)
  106. {
  107. szMsg.Format("%s", pMsg->szMsg);
  108. Utils::DMS_FreeMsg(pMsg);
  109. }
  110. else
  111. {
  112. szMsg.Format("%s", _T("执行成功!"));
  113. }
  114. GetDlgItem(IDC_STATIC_CAM_RESULT)->SetWindowText(szMsg);
  115. m_Btn_Step1.EnableWindow(TRUE);
  116. m_Btn_Step2.EnableWindow(TRUE);
  117. return 0;
  118. }
  119. /**************************************************************************************************
  120. 函 数 名 :OnCamConfigComplete
  121. 功能描述 :WM_CAM_CONFIG_COMPLETE处理
  122. 输入参数 :略
  123. 输出参数 :略
  124. 返 回 值 :略
  125. **************************************************************************************************/
  126. afx_msg LRESULT DbCamConfigDlg::OnCamConfigFailure(WPARAM wp, LPARAM lp)
  127. {
  128. DMSResponse *pMsg = (DMSResponse *)wp;
  129. CString szMsg;
  130. if (pMsg != NULL)
  131. {
  132. szMsg.Format("%s", pMsg->szMsg);
  133. Utils::DMS_FreeMsg(pMsg);
  134. }
  135. else
  136. {
  137. szMsg.Format("%s", _T("执行失败!"));
  138. }
  139. GetDlgItem(IDC_STATIC_CAM_RESULT)->SetWindowText(szMsg);
  140. m_Btn_Step1.EnableWindow(TRUE);
  141. m_Btn_Step2.EnableWindow(TRUE);
  142. return 0;
  143. }
  144. /**************************************************************************************************
  145. 函 数 名 :AttachIDPMS
  146. 功能描述 :附加IDPMS窗口到UI中
  147. 输入参数 :无
  148. 输出参数 :无
  149. 返 回 值 :void
  150. **************************************************************************************************/
  151. void DbCamConfigDlg::AttachIDPMS()
  152. {
  153. // 初始化
  154. if (g_hIDPMSHWnd)
  155. {
  156. ::SetParent(g_hIDPMSHWnd, GetDlgItem(IDC_IDPMS_RECT)->m_hWnd);
  157. //::SetParent(g_hIDPMSHWnd, this->m_hWnd);
  158. LONG style = GetWindowLong(g_hIDPMSHWnd, GWL_STYLE);// 14CF 0000
  159. style &= ~WS_CAPTION;
  160. style &= ~WS_THICKFRAME;
  161. //style &= ~WS_MINIMIZEBOX;
  162. //style &= ~WS_MAXIMIZEBOX;
  163. //style |= WS_CHILD;
  164. style |= WS_VISIBLE;
  165. ::SetWindowLong(g_hIDPMSHWnd, GWL_STYLE, style);//eraze title of ms paint window.
  166. m_bIsAttached = TRUE;
  167. }
  168. }
  169. /**************************************************************************************************
  170. 函 数 名 :RelayoutIDPMS
  171. 功能描述 :调整IDPMS显示位置
  172. 输入参数 :无
  173. 输出参数 :无
  174. 返 回 值 :void
  175. **************************************************************************************************/
  176. void DbCamConfigDlg::RelayoutIDPMS()
  177. {
  178. CRect rect;
  179. GetDlgItem(IDC_IDPMS_RECT)->GetWindowRect(&rect);
  180. ScreenToClient(rect);
  181. CRect rectShow;
  182. rectShow.left = 0;
  183. rectShow.top = 0;
  184. rectShow.right = rect.right - rect.left;
  185. rectShow.bottom = rect.bottom - rect.top;
  186. ::MoveWindow(g_hIDPMSHWnd, rectShow.left, rectShow.top, rectShow.right, rectShow.bottom, true);
  187. ::ShowWindow(g_hIDPMSHWnd, SW_SHOWMAXIMIZED);
  188. ::SetFocus(g_hIDPMSHWnd);
  189. //
  190. ::SwitchToThisWindow(g_hIDPMSHWnd, TRUE);
  191. //::SetWindowPos(g_hIDPMSHWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
  192. //::SetWindowPos(g_hIDPMSHWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
  193. ::SetForegroundWindow(g_hIDPMSHWnd);
  194. ::BringWindowToTop(g_hIDPMSHWnd);
  195. ::InvalidateRect(g_hIDPMSHWnd, NULL, TRUE);
  196. ::UpdateWindow(g_hIDPMSHWnd);
  197. //::SetWindowPos(g_hIDPMSHWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  198. }
  199. /**************************************************************************************************
  200. 函 数 名 :AttachIDPMS
  201. 功能描述 :附加IDPMS窗口到UI中
  202. 输入参数 :无
  203. 输出参数 :无
  204. 返 回 值 :void
  205. **************************************************************************************************/
  206. void DbCamConfigDlg::OnSize(UINT nType, int cx, int cy)
  207. {
  208. CDialogEx::OnSize(nType, cx, cy);
  209. if (m_bIsAttached)
  210. {
  211. RelayoutIDPMS();
  212. }
  213. }
  214. /**************************************************************************************************
  215. 函 数 名 :OnDestroy
  216. 功能描述 :WM_DESTORY消息处理
  217. 输入参数 :略
  218. 输出参数 :略
  219. 返 回 值 :void
  220. **************************************************************************************************/
  221. void DbCamConfigDlg::OnDestroy()
  222. {
  223. if (g_hIDPMSHWnd)
  224. {
  225. ::SetParent(g_hIDPMSHWnd, NULL);
  226. ::ShowWindow(g_hIDPMSHWnd, SW_HIDE);
  227. }
  228. CDialogEx::OnDestroy();
  229. }
  230. /**************************************************************************************************
  231. 函 数 名 :OnRestartIDPMS
  232. 功能描述 :WM_RESTART_IDPMS处理
  233. 输入参数 :略
  234. 输出参数 :略
  235. 返 回 值 :略
  236. **************************************************************************************************/
  237. afx_msg LRESULT DbCamConfigDlg::OnReStartIDPMS(WPARAM wp, LPARAM lp)
  238. {
  239. // 从IDPMS获取数据
  240. IDPMSManager *pManager = IDPMSManager::GetManager();
  241. BOOL bRet = pManager->StartIDPMS2();
  242. if (bRet)
  243. {
  244. AttachIDPMS();
  245. RelayoutIDPMS();
  246. m_Btn_Step1.EnableWindow(TRUE);
  247. m_Btn_Step2.EnableWindow(TRUE);
  248. }
  249. return 0;
  250. }