123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717 |
- // 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
- // (“Fluent UI”)。该示例仅供参考,
- // 用以补充《Microsoft 基础类参考》和
- // MFC C++ 库软件随附的相关电子文档。
- // 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
- // 若要了解有关 Fluent UI 许可计划的详细信息,请访问
- // https://go.microsoft.com/fwlink/?LinkId=238214.
- //
- // 版权所有(C) Microsoft Corporation
- // 保留所有权利。
- #include "stdafx.h"
- #include "framework.h"
- #include "IRControlWnd.h"
- #include "Resource.h"
- #include "MainFrm.h"
- #include "VideoCapture.h"
- #include <filehelper.h>
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #define new DEBUG_NEW
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CResourceViewBar
- unsigned char TwoHexChar2Char(char ch1, char ch2)
- {
- char Numb1;
- char Numb2;
- if (ch1 >= 'A')
- Numb1 = (toupper(ch1) - '0' - 7) * 16;
- else
- Numb1 = (ch1 - '0') * 16;
- if (ch2 >= 'A')
- Numb2 = (toupper(ch2) - '0' - 7);
- else
- Numb2 = (ch2 - '0');
- return (Numb1 + Numb2);
- }
- COLORREF HexColor2RGB(std::string strHexColor)
- {
- DWORD r = TwoHexChar2Char(strHexColor[0], strHexColor[1]);
- DWORD g = TwoHexChar2Char(strHexColor[2], strHexColor[3]);
- DWORD b = TwoHexChar2Char(strHexColor[4], strHexColor[5]);
- return RGB(r, g, b);
- }
- CIRControlWnd::CIRControlWnd() noexcept
- {
- m_nComboHeight = 0;
- }
- CIRControlWnd::~CIRControlWnd()
- {
- FreeLogLibarary();
- for (std::vector<BtnInfo>::iterator it = m_vtBtnInfo.begin(); it != m_vtBtnInfo.end(); it++)
- {
- if (it->pBTN)
- it->pBTN->DestroyWindow();
- it->pBTN = NULL;
- }
- m_vtBtnInfo.clear();
- }
- // 重启进程按钮id;
- #define ID_BUTTON_RESTART_PROC 1
- // 复制框控件id;
- #define ID_CHECKBOX_SIGNAL_TYPE 2
- // 下拉框控件id;
- #define ID_COMBOBOX_SIGNAL_FILE 3
- BEGIN_MESSAGE_MAP(CIRControlWnd, CDockablePane)
- ON_WM_CREATE()
- ON_WM_SIZE()
- ON_COMMAND(ID_EXPAND_ALL, OnExpandAllProperties)
- ON_UPDATE_COMMAND_UI(ID_EXPAND_ALL, OnUpdateExpandAllProperties)
- ON_COMMAND(ID_SORTPROPERTIES, OnSortProperties)
- ON_UPDATE_COMMAND_UI(ID_SORTPROPERTIES, OnUpdateSortProperties)
- ON_COMMAND(ID_PROPERTIES1, OnProperties1)
- ON_UPDATE_COMMAND_UI(ID_PROPERTIES1, OnUpdateProperties1)
- ON_COMMAND(ID_PROPERTIES2, OnProperties2)
- ON_UPDATE_COMMAND_UI(ID_PROPERTIES2, OnUpdateProperties2)
- ON_WM_SETFOCUS()
- ON_WM_SETTINGCHANGE()
- ON_WM_PAINT()
- // 信号按钮;
- ON_COMMAND_RANGE(BTNID, BTNID + 100, OnSignalBtnClick)
- ON_UPDATE_COMMAND_UI_RANGE(BTNID, BTNID + 100, OnUpdateSignalBtn)
- // checkbox
- ON_UPDATE_COMMAND_UI(ID_CHECKBOX_SIGNAL_TYPE, OnUpdateCheckBox)
- ON_COMMAND(ID_CHECKBOX_SIGNAL_TYPE, OnCheckBoxClicked)
- //
- ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE, &CIRControlWnd::OnCbnSelchangeSignal)
- ON_UPDATE_COMMAND_UI(ID_BUTTON_RESTART_PROC, OnUpdateBtnRestartProc)
- ON_COMMAND(ID_BUTTON_RESTART_PROC, OnBtnRestartProcClicked)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CResourceViewBar 消息处理程序
- void CIRControlWnd::AdjustLayout()
- {
- if (GetSafeHwnd() == nullptr || (AfxGetMainWnd() != nullptr && AfxGetMainWnd()->IsIconic()))
- {
- return;
- }
- CRect rectClient;
- GetClientRect(rectClient);
- m_btnRestart.SetWindowPos(nullptr, rectClient.left + 5, rectClient.top + 5, 180, m_nComboHeight, SWP_NOACTIVATE | SWP_NOZORDER);
- m_wndSignalCheck.SetWindowPos(nullptr, rectClient.left + 190, rectClient.top + 5, 150, m_nComboHeight, SWP_NOACTIVATE | SWP_NOZORDER);
- m_wndSignalCombo.SetWindowPos(nullptr, rectClient.left + 5, rectClient.top + m_nComboHeight + 10, rectClient.Width() - 10, m_nComboHeight + 210, SWP_NOACTIVATE | SWP_NOZORDER);
- #if __PANE_DLG__
- m_dlgIRControl.SetWindowPos(nullptr, rectClient.left, rectClient.top + m_nComboHeight, rectClient.Width(), rectClient.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
- #endif
- }
- int CIRControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CDockablePane::OnCreate(lpCreateStruct) == -1)
- return -1;
- CRect rectDummy;
- rectDummy.SetRectEmpty();
- // 创建组合:
- const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_BORDER | CBS_SORT | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
- if (!m_btnRestart.Create(_T("重启遥控器服务端进程"), WS_CHILD | WS_VISIBLE, rectDummy, this, ID_BUTTON_RESTART_PROC))
- {
- TRACE0("未能创建遥控器组合 \n");
- return -1; // 未能创建
- }
- if (!m_wndSignalCheck.Create(_T("通用遥控器选择"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, rectDummy, this, ID_CHECKBOX_SIGNAL_TYPE))
- {
- TRACE0("未能创建信号集下拉框 \n");
- return -1; // 未能创建
- }
- m_wndSignalCheck.SetCheck(Global::g_Config.bGenerics ? BST_CHECKED : BST_UNCHECKED);
- m_wndSignalCheck.m_bHighlightChecked = TRUE;
- // CMFCButton只能用图标来显示check;
- m_wndSignalCheck.SetImage(IDB_UNCHECKED);
- m_wndSignalCheck.SetCheckedImage(IDB_CHECKED);
- m_wndSignalCheck.m_bTransparent = FALSE;
- m_wndSignalCheck.m_bDrawFocus = FALSE;
- m_wndSignalCheck.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
- m_wndSignalCheck.SizeToContent();
- if (!m_wndSignalCombo.Create(dwViewStyle| WS_VSCROLL, rectDummy, this, ID_COMBOBOX_SIGNAL_FILE))
- {
- TRACE0("未能创建信号集下拉框 \n");
- return -1; // 未能创建
- }
- LoadSignals();
- CRect rectCombo;
- m_wndSignalCombo.GetClientRect(&rectCombo);
- m_nComboHeight = rectCombo.Height();
- #if __PANE_DLG__
- if (!m_dlgIRControl.Create(IDD_DLG_IRCONTROL, this))
- {
- TRACE0("未能创建遥控器主窗口 \n");
- return -1; // 未能创建
- }
- m_dlgIRControl.ShowWindow(SW_SHOW);
- #else
- Loadlayout(m_vtBtnInfo);
- #endif
- // 设置最小窗体;
- SetMinSize((350, 420));
- // 校正布局;
- AdjustLayout();
- //////////////////////////////////////////////////////////////////////////
- // 启动红老鼠;
- if (!LoadLogLibarary())
- {
- AfxMessageBox("加载遥控dll失败,请检测dll是否正常!");
- }
- #if 1
- ReStartIRDevice();
- #else
- // 启动服务;
- if (g_IsAppRunning(Global::g_Config.redratpath.c_str()))
- {
- TRACE("启动红老鼠进程已运行\r");
- }
- else
- {
- TRACE("启动红老鼠进程未运行\r");
- if (g_StartIRApp(Global::g_Config.redratpath.c_str(), ".\\default.xml", 40000))
- {
- TRACE("启动红老鼠进程启动成功\r");
- }
- else
- {
- TRACE("启动红老鼠进程启动失败\r");
- AfxMessageBox("启动红老鼠进程启动失败!");
- }
- }
- Sleep(3500); // 等待进程启动完全;
- // 连接服务器;
- if (!g_Connect(_T("127.0.0.1"), 40000))
- AfxMessageBox("连接红老鼠服务端失败,请重启设备!");
- UpdateSignalBtnStatus();
- // 获取设备列表,以逗号分隔;
- std::string devices = g_getDeviceNames();
- if (devices.size() == 0)
- {
- AfxMessageBox("当前无红老鼠设备连接!");
- }
- std::string signale = Global::g_Config.bGenerics ? Global::g_Config.signaldir + "\\general\\" : Global::g_Config.signaldir + "\\product\\";
- signale.append(Global::g_Config.use_signal + ".xml");
- // 加载指定目录的xml信号集文件;
- if (!g_loadSignalDataSet(signale.c_str()))
- {
- TRACE("加载信号集文件失败\r");
- AfxMessageBox("加载信号集文件失败!");
- }
- else
- {
- TRACE("加载信号集文件成功\r");
- }
- #endif
- return 0;
- }
- void CIRControlWnd::OnSize(UINT nType, int cx, int cy)
- {
- CDockablePane::OnSize(nType, cx, cy);
- TRACE2("坐标:%d,%d\n", cx, cy);
- AdjustLayout();
- }
- void CIRControlWnd::OnExpandAllProperties()
- {
- //m_wndPropList.ExpandAll();
- }
- void CIRControlWnd::OnUpdateExpandAllProperties(CCmdUI* /* pCmdUI */)
- {
- }
- void CIRControlWnd::OnSortProperties()
- {
- //m_wndPropList.SetAlphabeticMode(!m_wndPropList.IsAlphabeticMode());
- }
- void CIRControlWnd::OnUpdateSortProperties(CCmdUI* pCmdUI)
- {
- //pCmdUI->SetCheck(m_wndPropList.IsAlphabeticMode());
- }
- void CIRControlWnd::OnProperties1()
- {
- // TODO: 在此处添加命令处理程序代码
- }
- void CIRControlWnd::OnUpdateProperties1(CCmdUI* /*pCmdUI*/)
- {
- // TODO: 在此处添加命令更新 UI 处理程序代码
- }
- void CIRControlWnd::OnProperties2()
- {
- // TODO: 在此处添加命令处理程序代码
- }
- void CIRControlWnd::OnUpdateProperties2(CCmdUI* /*pCmdUI*/)
- {
- // TODO: 在此处添加命令更新 UI 处理程序代码
- }
- void CIRControlWnd::OnSetFocus(CWnd* pOldWnd)
- {
- CDockablePane::OnSetFocus(pOldWnd);
- }
- void CIRControlWnd::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
- {
- CDockablePane::OnSettingChange(uFlags, lpszSection);
- //SetPropListFont();
- }
- void CIRControlWnd::OnCbnSelchangeSignal()
- {
- CString strSignal;
- int nCurSel = m_wndSignalCombo.GetCurSel();
- if ( nCurSel != CB_ERR )
- {
- std::string signalpath;
- m_wndSignalCombo.GetLBText(nCurSel, strSignal);
- // 保存到配置文件中;
- Global::g_Config.use_signal = strSignal.GetString();
- WritePrivateProfileString("ir-device", "use-signal", strSignal.GetString(), Global::g_szConfig);
- }
- DisableSignalBtn();
- ReLoadSignalXml();
- }
- void CIRControlWnd::SetPropListFont()
- {
- ::DeleteObject(m_fntPropList.Detach());
- LOGFONT lf;
- afxGlobalData.fontRegular.GetLogFont(&lf);
- NONCLIENTMETRICS info;
- info.cbSize = sizeof(info);
- afxGlobalData.GetNonClientMetrics(info);
- lf.lfHeight = info.lfMenuFont.lfHeight;
- lf.lfWeight = info.lfMenuFont.lfWeight;
- lf.lfItalic = info.lfMenuFont.lfItalic;
- m_fntPropList.CreateFontIndirect(&lf);
- //m_wndObjectCombo.SetFont(&m_fntPropList);
- }
- void CIRControlWnd::ReStartIRDevice(std::string signalName)
- {
- std::thread t([&](std::string signal_name) {
- // 结束进程;
- if (g_CloseApp)
- g_CloseApp();
- // 默认加载配置的信号集文件;
- std::string signale = Global::g_Config.bGenerics ? Global::g_Config.signaldir + "\\general\\" : Global::g_Config.signaldir + "\\product\\";
- signale.append(Global::g_Config.use_signal + ".xml");
- if ( !PathFileExists(signale.c_str()) )
- {
- m_wndSignalCombo.SetCurSel(-1);
- signale = ".\\default.xml";
- }
- else
- {
- m_wndSignalCombo.SelectString(0, Global::g_Config.use_signal.c_str());
- }
- if (g_StartIRApp(Global::g_Config.redratpath.c_str(), signale.c_str(), 40000))
- {
- TRACE("启动红老鼠进程启动成功\r");
- }
- else
- {
- TRACE("启动红老鼠进程启动失败\r");
- AfxMessageBox("启动红老鼠进程启动失败!");
- }
- BOOL bRet = FALSE;
- // 连接服务器;
- for (int i = 0; i < 5; i++)
- {
- if ((bRet = g_Connect(_T("127.0.0.1"), 40000)))
- break;
- Sleep(1000);
- }
- if (!bRet)
- AfxMessageBox("连接红老鼠服务端失败,请重启设备!");
- // 更新按钮状态;
- UpdateSignalBtnStatus();
- // 获取设备列表,以逗号分隔;
- std::string devices = g_getDeviceNames();
- if (devices.size() == 0)
- {
- AfxMessageBox("当前无红老鼠设备连接!");
- }
- }, signalName);
- t.detach();
- }
- void CIRControlWnd::ReLoadSignalXml()
- {
- std::string signaldir,signalpath;
- if (Global::g_Config.bGenerics)
- {
- signaldir = Global::g_Config.signaldir + "\\general\\";
- }
- else
- {
- signaldir = Global::g_Config.signaldir + "\\product\\";
- }
- signalpath = signaldir;
- signalpath.append(Global::g_Config.use_signal + ".xml");
- if (!PathFileExists(signalpath.c_str()))
- {
- AfxMessageBox(_T("该信号文件不存在!"));
- // 设置默认的;
- CString strSignal;
- m_wndSignalCombo.SetCurSel(0);
- m_wndSignalCombo.GetLBText(0, strSignal);
- signalpath = signaldir;
- signalpath.append(strSignal.GetString());
- signalpath.append(".xml");
- // 保存到配置文件中;
- Global::g_Config.use_signal = strSignal.GetString();
- WritePrivateProfileString("ir-device", "use-signal", strSignal.GetString(), Global::g_szConfig);
- }
- else // 切换通用类型时用到;
- {
- m_wndSignalCombo.SelectString(0, Global::g_Config.use_signal.c_str());
- }
- // 加载指定目录的xml信号集文件;
- if (!g_loadSignalDataSet(signalpath.c_str()))
- {
- TRACE("加载信号集文件失败\r");
- }
- else
- {
- TRACE("加载信号集文件成功\r");
- UpdateSignalBtnStatus();
- }
- }
- void CIRControlWnd::LoadSignals()
- {
- filehelper fh;
- fh.getfolderfiles((Global::g_Config.signaldir + "\\general\\").c_str(), NULL, &m_vtsignal_gen);
- fh.getfolderfiles((Global::g_Config.signaldir + "\\product\\").c_str(), NULL, &m_vtsignal_pro);
- // 添加到combobox中;
- if (Global::g_Config.bGenerics )
- {
- m_wndSignalCombo.ResetContent();
- for ( auto it : m_vtsignal_gen)
- {
- m_wndSignalCombo.AddString(fh.getfilename(it).c_str());
- }
- }
- else
- {
- m_wndSignalCombo.ResetContent();
- for (auto it : m_vtsignal_pro)
- {
- m_wndSignalCombo.AddString(fh.getfilename(it).c_str());
- }
- }
- }
- void CIRControlWnd::Loadlayout(std::vector<BtnInfo>& vt)
- {
- // 解析xml;
- std::string path;
- path.append(Global::g_szCurModuleDir);
- path.append("layout.xml");
- tinyxml2::XMLDocument doc;
- if (tinyxml2::XML_SUCCESS != doc.LoadFile(path.c_str()))
- {
- return;
- }
- vt.clear();
- std::string data;
- tinyxml2::XMLElement* pXmlRoot = NULL;
- if ((pXmlRoot = doc.RootElement()) != NULL)
- {
- if (_tcsicmp(pXmlRoot->Value(), "ButtonList") == 0)
- {
- // 子项;
- tinyxml2::XMLElement* pXmlElent = pXmlRoot->FirstChildElement();
- while (pXmlElent)
- {
- BtnInfo btninfo;
- if (_tcsicmp(pXmlElent->Value(), _T("ITEM")) == 0)
- {
- tinyxml2::XMLElement* pItem = pXmlElent->FirstChildElement();
- while (pItem)
- {
- if (_tcsicmp(pItem->Value(), _T("NAME")) == 0)
- {
- btninfo.name = pItem->GetText();
- }
- else if (_tcsicmp(pItem->Value(), _T("WIDTH")) == 0)
- {
- data = pItem->GetText();
- btninfo.width = _ttol(data.c_str());
- }
- else if (_tcsicmp(pItem->Value(), _T("HEIGHT")) == 0)
- {
- data = pItem->GetText();
- btninfo.height = _ttol(data.c_str());
- }
- else if (_tcsicmp(pItem->Value(), _T("COLOR")) == 0)
- {
- data = pItem->GetText();
- btninfo.color = HexColor2RGB(data);
- }
- btninfo.pBTN = new CMFCButton();
- pItem = pItem->NextSiblingElement();
- }
- }
- vt.push_back(btninfo);
- pXmlElent = pXmlElent->NextSiblingElement();
- }
- }
- }
- int sx = 0, sy = 80;
- int i = 0, id = 10000;
- DWORD dwStyle = WS_CHILD | WS_VISIBLE;
- for (std::vector<BtnInfo>::iterator it = vt.begin(); it != vt.end(); it++)
- {
- if (i != 0 && i % 4 == 0)
- {//换行;
- sy += it->height + 5;
- }
- sx = (i % 4) * it->width + (i % 4 + 1) * 5;
- it->pBTN->Create(it->name.c_str(), dwStyle, CRect(sx, sy, sx + it->width, sy + it->height), this, BTNID + i);
- // 设置透明false以显示背景色
- it->pBTN->m_bTransparent = FALSE;
- it->pBTN->m_bDontUseWinXPTheme = TRUE;
- // 设置背景色;
- it->pBTN->SetFaceColor(it->color, TRUE);
- // 消除单击时黑色内圈;
- it->pBTN->m_bDrawFocus = FALSE;
- // 设置按钮扁平样式;
- it->pBTN->m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
- // 设置鼠标形状;
- it->pBTN->SetMouseCursorHand();
- // 存入map中;
- m_map_btn.insert(std::pair<UINT, BtnInfo&>(BTNID+i, *it));
- i++;
- }
- }
- // 如果CDockablePane无控件,改变大小时背景会刷新失败;
- // 所以要重载onpaint;
- void CIRControlWnd::OnPaint()
- {
- CPaintDC dc(this); // device context for painting
- // TODO: 在此处添加消息处理程序代码
- // 不为绘图消息调用 CDockablePane::OnPaint();
- #if !__PANE_DLG__
- CRect rc;
- GetClientRect(rc);
- CBrush brush;
- brush.CreateSolidBrush(0xFFEFD5);
- dc.FillRect(&rc, &brush);
- #endif
- }
- void CIRControlWnd::OnSignalBtnClick(UINT uId) // 发送遥控信号;
- {
- CWnd* pWnd = GetFocus();
- int id = pWnd->GetDlgCtrlID();
- if (id >= BTNID && id <= BTNID + 100)
- {
- CString text;
- pWnd->GetWindowText(text);
- // 发送单信号;
- if (g_sendSignal(text.GetString(), 1, 20))
- {
- TRACE("发送单信号成功\n");
- }
- else
- {
- TRACE("发送单信号失败\n");
- }
- }
- }
- void CIRControlWnd::OnUpdateSignalBtn(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(m_map_btn.find(pCmdUI->m_nID)->second.bEnable);
- }
- void CIRControlWnd::OnUpdateCheckBox(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable();
- }
- void CIRControlWnd::OnCheckBoxClicked()
- {
- Global::g_Config.bGenerics = m_wndSignalCheck.IsChecked();
- // 保存到配置文件中;
- WritePrivateProfileString("ir-device", "generics", Global::g_Config.bGenerics ? "1" : "0", Global::g_szConfig);
- // 添加到combobox中;
- if (Global::g_Config.bGenerics)
- {
- m_wndSignalCombo.ResetContent();
- for (auto it : m_vtsignal_gen)
- {
- m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str());
- }
- }
- else
- {
- m_wndSignalCombo.ResetContent();
- for (auto it : m_vtsignal_pro)
- {
- m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str());
- }
- }
-
- DisableSignalBtn();
- ReLoadSignalXml();
- }
- void CIRControlWnd::OnUpdateBtnRestartProc(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(TRUE);
- }
- void CIRControlWnd::OnBtnRestartProcClicked() // 重启红老鼠;
- {
- #if 1
- DisableSignalBtn();
- ReStartIRDevice();
- #else
- // 关闭旧类型进程;
- if (g_CloseApp)
- g_CloseApp();
- // 新启动类型进程;
- if (g_StartIRApp)
- {
- if (g_StartIRApp(Global::g_Config.redratpath.c_str(), ".\\default.xml", 40000))
- {
- TRACE("启动红老鼠进程启动成功\r");
- }
- else
- {
- TRACE("启动红老鼠进程启动失败\r");
- AfxMessageBox("启动红老鼠进程启动失败!");
- }
- }
- Sleep(5500); // 等待进程启动完全;
- // 连接服务器;
- if (!g_Connect(_T("127.0.0.1"), 40000))
- AfxMessageBox("连接红老鼠服务端失败,请重启设备!");
- // 获取设备列表,以逗号分隔;
- std::string devices = g_getDeviceNames();
- if (devices.size() == 0)
- {
- AfxMessageBox("当前无红老鼠设备连接!");
- }
- std::string signale = Global::g_Config.bGenerics ? Global::g_Config.signaldir + "\\general\\" : Global::g_Config.signaldir + "\\product\\";
- signale.append(Global::g_Config.use_signal + ".xml");
- // 加载指定目录的xml信号集文件;
- if (!g_loadSignalDataSet(signale.c_str()))
- {
- TRACE("加载信号集文件失败\r");
- AfxMessageBox("加载信号集文件失败!");
- }
- else
- {
- TRACE("加载信号集文件成功\r");
- UpdateSignalBtnStatus();
- }
- #endif
- }
- void CIRControlWnd::UpdateSignalBtnStatus()
- {
- // 获取信号集;
- if (g_getSignalsName )
- {
- // 获取信号数据集,以\n分隔;
- std::string data = g_getSignalsName();
- CString signals = data.append(1, '\n').c_str();
- signals.MakeUpper();
- for ( std::vector<BtnInfo>::iterator it = m_vtBtnInfo.begin(); it != m_vtBtnInfo.end(); it++)
- {
- if ( signals.Find((it->name+'\n').c_str()) == -1 )
- {
- it->bEnable = false;
- }
- else
- {
- it->bEnable = true;
- }
- }
- }
- }
|