CValueWnd.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #include "../pch/pch.h"
  2. #include "CValueWnd.h"
  3. #include "../tool/CComHelper.h"
  4. #include "../tool/CSerialPort.h"
  5. void CValueWnd::Notify(TNotifyUI& msg)
  6. {
  7. if (msg.sType == _T("click"))
  8. {
  9. if (msg.pSender->GetName() == _T("closebtn"))
  10. {
  11. PostQuitMessage(0);
  12. return;
  13. }
  14. }
  15. }
  16. void CValueWnd::Init()
  17. {
  18. std::thread(&CValueWnd::ReadValue, this).detach();
  19. }
  20. void CValueWnd::ReadValue()
  21. {
  22. //读取串口的模式
  23. CComHelper helper;
  24. std::vector<std::wstring> comVector = helper.getComPort();
  25. for (std::vector<std::wstring>::iterator it = comVector.begin(); it != comVector.end(); it++)
  26. {
  27. std::wstring comName = *it;
  28. LOG_INFO("comName:" << comName.c_str());
  29. }
  30. int nReadType = 1;
  31. if (nReadType == 1)
  32. {
  33. std::wstring com_name = L"COM2";
  34. CSerialPort serial(com_name.c_str(), 2400);
  35. bool ret = serial.openComm();
  36. if (!ret)
  37. {
  38. LOG_INFO("open com failed!");
  39. return;
  40. }
  41. //HANDLE m_hComm = CreateFile(L"COM1",
  42. // GENERIC_READ | GENERIC_WRITE, //允许读和写
  43. // FILE_SHARE_READ | FILE_SHARE_WRITE, //独占方式
  44. // NULL, OPEN_EXISTING, //打开而不是创建
  45. // 0, //同步方式
  46. // NULL
  47. //);
  48. //if (m_hComm == INVALID_HANDLE_VALUE)
  49. //{
  50. // int error = GetLastError();
  51. // int a = error;
  52. //}
  53. while (true)
  54. {
  55. //开始读取串口的数据
  56. char a[1024] = { 0 };
  57. serial.readFromComm(a, 1024);
  58. LOG_INFO("a:" << a);
  59. Sleep(200);
  60. }
  61. serial.closeComm();
  62. }
  63. }
  64. LRESULT CValueWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  65. {
  66. LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
  67. styleValue &= ~WS_CAPTION;
  68. ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
  69. // 把自己的窗口句柄与窗口绘制管理器挂接在一起
  70. m_pm.Init(m_hWnd);
  71. m_pm.AddPreMessageFilter(this);
  72. CDialogBuilder builder;
  73. CControlUI* pRoot = builder.Create(_T("value.xml"), (UINT)0, NULL, &m_pm);
  74. ASSERT(pRoot && "Failed to parse XML");
  75. // 把这些控件绘制到本窗口上
  76. m_pm.AttachDialog(pRoot);
  77. // 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
  78. m_pm.AddNotifier(this);
  79. Init();
  80. return 0;
  81. }
  82. LRESULT CValueWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  83. {
  84. bHandled = FALSE;
  85. return 0;
  86. }
  87. /*
  88. *这个是窗口被销毁的时候调用的
  89. **/
  90. LRESULT CValueWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  91. {
  92. bHandled = FALSE;
  93. return 0;
  94. }
  95. LRESULT CValueWnd::OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  96. {
  97. if (::IsIconic(*this))
  98. {
  99. bHandled = FALSE;
  100. }
  101. return (wParam == 0) ? TRUE : FALSE;
  102. }
  103. LRESULT CValueWnd::OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  104. {
  105. return 0;
  106. }
  107. LRESULT CValueWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  108. {
  109. //在这里设置焦点才有用
  110. CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
  111. if (pAccountEdit)
  112. {
  113. pAccountEdit->SetFocus();
  114. }
  115. return 0;
  116. }
  117. LRESULT CValueWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  118. {
  119. POINT pt;
  120. pt.x = GET_X_LPARAM(lParam);
  121. pt.y = GET_Y_LPARAM(lParam);
  122. ::ScreenToClient(*this, &pt);
  123. RECT rcClient;
  124. ::GetClientRect(*this, &rcClient);
  125. RECT rcCaption = m_pm.GetCaptionRect();
  126. if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
  127. && pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
  128. {
  129. CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
  130. if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
  131. {
  132. return HTCAPTION;
  133. }
  134. }
  135. return HTCLIENT;
  136. }
  137. LRESULT CValueWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
  138. {
  139. LRESULT lRes = 0;
  140. BOOL bHandled = TRUE;
  141. switch (uMsg)
  142. {
  143. case WM_CREATE:
  144. lRes = OnCreate(uMsg, wParam, lParam, bHandled);
  145. break;
  146. case WM_CLOSE:
  147. lRes = OnClose(uMsg, wParam, lParam, bHandled);
  148. break;
  149. case WM_DESTROY:
  150. lRes = OnDestroy(uMsg, wParam, lParam, bHandled);
  151. break;
  152. case WM_NCACTIVATE:
  153. lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
  154. break;
  155. case WM_NCCALCSIZE:
  156. lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
  157. break;
  158. case WM_NCPAINT:
  159. lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
  160. break;
  161. case WM_NCHITTEST:
  162. lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
  163. break;
  164. default:
  165. bHandled = FALSE;
  166. }
  167. if (bHandled)
  168. {
  169. return lRes;
  170. }
  171. if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
  172. {
  173. return lRes;
  174. }
  175. return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
  176. }
  177. LRESULT CValueWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
  178. {
  179. return false;
  180. }