#include "../pch/pch.h" #include "CValueWnd.h" #include "../tool/CComHelper.h" #include "../tool/CSerialPort.h" void CValueWnd::Notify(TNotifyUI& msg) { if (msg.sType == _T("click")) { if (msg.pSender->GetName() == _T("closebtn")) { PostQuitMessage(0); return; } } } void CValueWnd::Init() { std::thread(&CValueWnd::ReadValue, this).detach(); } void CValueWnd::ReadValue() { //读取串口的模式 CComHelper helper; std::vector comVector = helper.getComPort(); for (std::vector::iterator it = comVector.begin(); it != comVector.end(); it++) { std::wstring comName = *it; LOG_INFO("comName:" << comName.c_str()); } int nReadType = 1; if (nReadType == 1) { std::wstring com_name = L"COM2"; CSerialPort serial(com_name.c_str(), 2400); bool ret = serial.openComm(); if (!ret) { LOG_INFO("open com failed!"); return; } //HANDLE m_hComm = CreateFile(L"COM1", // GENERIC_READ | GENERIC_WRITE, //允许读和写 // FILE_SHARE_READ | FILE_SHARE_WRITE, //独占方式 // NULL, OPEN_EXISTING, //打开而不是创建 // 0, //同步方式 // NULL //); //if (m_hComm == INVALID_HANDLE_VALUE) //{ // int error = GetLastError(); // int a = error; //} while (true) { //开始读取串口的数据 char a[1024] = { 0 }; serial.readFromComm(a, 1024); LOG_INFO("a:" << a); Sleep(200); } serial.closeComm(); } } LRESULT CValueWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { LONG styleValue = ::GetWindowLong(*this, GWL_STYLE); styleValue &= ~WS_CAPTION; ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN); // 把自己的窗口句柄与窗口绘制管理器挂接在一起 m_pm.Init(m_hWnd); m_pm.AddPreMessageFilter(this); CDialogBuilder builder; CControlUI* pRoot = builder.Create(_T("value.xml"), (UINT)0, NULL, &m_pm); ASSERT(pRoot && "Failed to parse XML"); // 把这些控件绘制到本窗口上 m_pm.AttachDialog(pRoot); // 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数 m_pm.AddNotifier(this); Init(); return 0; } LRESULT CValueWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { bHandled = FALSE; return 0; } /* *这个是窗口被销毁的时候调用的 **/ LRESULT CValueWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { bHandled = FALSE; return 0; } LRESULT CValueWnd::OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (::IsIconic(*this)) { bHandled = FALSE; } return (wParam == 0) ? TRUE : FALSE; } LRESULT CValueWnd::OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { return 0; } LRESULT CValueWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { //在这里设置焦点才有用 CEditUI* pAccountEdit = static_cast(m_pm.FindControl(_T("accountedit"))); if (pAccountEdit) { pAccountEdit->SetFocus(); } return 0; } LRESULT CValueWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); ::ScreenToClient(*this, &pt); RECT rcClient; ::GetClientRect(*this, &rcClient); RECT rcCaption = m_pm.GetCaptionRect(); if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \ && pt.y >= rcCaption.top && pt.y < rcCaption.bottom) { CControlUI* pControl = static_cast(m_pm.FindControl(pt)); if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0) { return HTCAPTION; } } return HTCLIENT; } LRESULT CValueWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { LRESULT lRes = 0; BOOL bHandled = TRUE; switch (uMsg) { case WM_CREATE: lRes = OnCreate(uMsg, wParam, lParam, bHandled); break; case WM_CLOSE: lRes = OnClose(uMsg, wParam, lParam, bHandled); break; case WM_DESTROY: lRes = OnDestroy(uMsg, wParam, lParam, bHandled); break; case WM_NCACTIVATE: lRes = OnNcActivate(uMsg, wParam, lParam, bHandled); break; case WM_NCCALCSIZE: lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break; case WM_NCPAINT: lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break; case WM_NCHITTEST: lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled); break; default: bHandled = FALSE; } if (bHandled) { return lRes; } if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes)) { return lRes; } return CWindowWnd::HandleMessage(uMsg, wParam, lParam); } LRESULT CValueWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled) { return false; }