DeviceView.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  1. // CDeviceView.cpp: 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "SATHelper.h"
  5. #include "DeviceView.h"
  6. #include "MainFrm.h"
  7. #include <filehelper.h>
  8. extern CMainFrame* g_pMainFrame;
  9. // CDeviceView
  10. IMPLEMENT_DYNCREATE(CDeviceView, CFormView)
  11. CDeviceView::CDeviceView()
  12. : CFormView(DLG_DEVICEMANAGER)
  13. {
  14. ReadBaiduCfg(m_bdcfg);
  15. ReadRsRunCfg(m_rscfg);
  16. ReadTreePath();
  17. }
  18. CDeviceView::~CDeviceView()
  19. {
  20. }
  21. void CDeviceView::DoDataExchange(CDataExchange* pDX)
  22. {
  23. CFormView::DoDataExchange(pDX);
  24. DDX_Control(pDX, IDC_COMBO1, m_cb_chroma1);
  25. DDX_Control(pDX, IDC_COMBO2, m_cb_chroma2);
  26. DDX_Control(pDX, IDC_CHECK1, m_ck_chroma1);
  27. DDX_Control(pDX, IDC_CHECK2, m_ck_chroma2);
  28. }
  29. BEGIN_MESSAGE_MAP(CDeviceView, CFormView)
  30. ON_WM_PAINT()
  31. ON_WM_CTLCOLOR()
  32. ON_WM_DEVICECHANGE()
  33. // 全步骤截图;
  34. ON_COMMAND(ID_CHECK_FULL_CUT, &CDeviceView::OnCheckFullCut)
  35. ON_UPDATE_COMMAND_UI(ID_CHECK_FULL_CUT, &CDeviceView::OnUpdateCheckFullCut)
  36. // 有声按钮;
  37. ON_COMMAND(BTN_HAD_SOUND, &CDeviceView::OnHadSound)
  38. ON_UPDATE_COMMAND_UI(BTN_HAD_SOUND, &CDeviceView::OnUpdateHadSound)
  39. // 声音默认按钮;
  40. ON_COMMAND(BTN_DEF_SOUND, &CDeviceView::OnDefSound)
  41. ON_UPDATE_COMMAND_UI(BTN_DEF_SOUND, &CDeviceView::OnUpdateDefSound)
  42. // 声音等级编辑框;
  43. // OCR账号下拉框;
  44. ON_COMMAND(ID_COMBOX_OCR, &CDeviceView::OnComboxOcr)
  45. ON_UPDATE_COMMAND_UI(ID_COMBOX_OCR, &CDeviceView::OnUpdateComboxOcr)
  46. // MenuTree项目下拉框;
  47. ON_COMMAND(ID_COMBO_PRODUCT, &CDeviceView::OnComboProduct)
  48. ON_UPDATE_COMMAND_UI(ID_COMBO_PRODUCT, &CDeviceView::OnUpdateComboProduct)
  49. // MenuTree UI下拉框;
  50. ON_COMMAND(ID_COMBO_UI, &CDeviceView::OnComboUi)
  51. ON_UPDATE_COMMAND_UI(ID_COMBO_UI, &CDeviceView::OnUpdateComboUi)
  52. // MenuTree 子UI下拉框;
  53. ON_COMMAND(ID_COMBO_SUBUI, &CDeviceView::OnComboSubUi)
  54. ON_UPDATE_COMMAND_UI(ID_COMBO_SUBUI, &CDeviceView::OnUpdateComboSubUi)
  55. // 信号仪1下拉框;
  56. ON_COMMAND(ID_COMBO1_22293, &CDeviceView::OnCombo1_22293)
  57. ON_UPDATE_COMMAND_UI(ID_COMBO1_22293, &CDeviceView::OnUpdateCombo1_22293)
  58. // 信号仪2下拉框;
  59. ON_COMMAND(ID_COMBO2_22293, &CDeviceView::OnCombo2_22293)
  60. ON_UPDATE_COMMAND_UI(ID_COMBO2_22293, &CDeviceView::OnUpdateCombo2_22293)
  61. // 信号仪1CheckBox;
  62. ON_COMMAND(ID_CHECK1_22293, &CDeviceView::OnCheck1_22293)
  63. ON_UPDATE_COMMAND_UI(ID_CHECK1_22293, &CDeviceView::OnUpdateCheck1_22293)
  64. // 信号仪2CheckBox;
  65. ON_COMMAND(ID_CHECK2_22293, &CDeviceView::OnCheck2_22293)
  66. ON_UPDATE_COMMAND_UI(ID_CHECK2_22293, &CDeviceView::OnUpdateCheck2_22293)
  67. //////////////////////////////////////////////////////////////////////////
  68. // 对话框控件;
  69. ON_BN_CLICKED(IDC_BUTTON1, &CDeviceView::OnBnClickedButton1)
  70. ON_BN_CLICKED(IDC_BUTTON2, &CDeviceView::OnBnClickedButton2)
  71. ON_BN_CLICKED(IDC_CHECK1, &CDeviceView::OnBnClickedCheck1)
  72. ON_BN_CLICKED(IDC_CHECK2, &CDeviceView::OnBnClickedCheck2)
  73. ON_CBN_SELCHANGE(IDC_COMBO1, &CDeviceView::OnCbnSelchangeCombo1)
  74. ON_CBN_SELCHANGE(IDC_COMBO2, &CDeviceView::OnCbnSelchangeCombo2)
  75. ON_WM_CREATE()
  76. END_MESSAGE_MAP()
  77. // CDeviceView 诊断
  78. #ifdef _DEBUG
  79. void CDeviceView::AssertValid() const
  80. {
  81. CFormView::AssertValid();
  82. }
  83. #ifndef _WIN32_WCE
  84. void CDeviceView::Dump(CDumpContext& dc) const
  85. {
  86. CFormView::Dump(dc);
  87. }
  88. #endif
  89. #endif //_DEBUG
  90. // CDeviceView 消息处理程序
  91. void CDeviceView::ReadBaiduCfg(BaiduCfg& bdcfg)
  92. {
  93. TCHAR szValue[MAX_PATH] = {0};
  94. TCHAR szBuffer[1024] = { 0 };
  95. _stprintf_s(m_szBaiduCfgPath, _T("%s%s"), Global::g_szPython27Dir, _T("Lib\\site-packages\\ssat_sdk\\config\\baidu.cfg"));
  96. GetPrivateProfileString(_T("CurStatus"), _T("Cur_Count"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  97. bdcfg.cur_count = szValue;
  98. GetPrivateProfileString(_T("CurStatus"), _T("Reset_Time"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  99. bdcfg.reset_time = szValue;
  100. // 读取所有Section值;
  101. DWORD dwLen = GetPrivateProfileString(NULL, NULL, NULL, szBuffer, 1024, m_szBaiduCfgPath);
  102. for ( int i = 0, j = 0; i < dwLen; i++ )
  103. {
  104. if ( szBuffer[i] == '\0' )
  105. {
  106. TCHAR szData[MAX_PATH] = {0};
  107. memcpy(szData, &szBuffer[j], i-j);
  108. if ( _tcsicmp(szData, _T("CurStatus")) )
  109. {
  110. CountInfo countInfo;
  111. GetPrivateProfileString(szData, _T("APP_ID"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  112. countInfo.app_id = szValue;
  113. GetPrivateProfileString(szData, _T("API_KEY"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  114. countInfo.api_key = szValue;
  115. GetPrivateProfileString(szData, _T("SECRET_KEY"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  116. countInfo.secret_key = szValue;
  117. GetPrivateProfileString(szData, _T("Ret_Count"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  118. countInfo.ret_count = szValue;
  119. bdcfg.list_count.insert(std::pair<std::string, CountInfo>(szData, countInfo));
  120. }
  121. OutputDebugString(szData);
  122. OutputDebugString("\n");
  123. j = i+1;
  124. }
  125. }
  126. }
  127. void CDeviceView::ReadRsRunCfg(RsRunCfg& rscfg)
  128. {
  129. TCHAR szValue[MAX_PATH] = { 0 };
  130. TCHAR szBuffer[1024] = { 0 };
  131. _stprintf_s(m_szRsCfgPath, _T("%s%s"), Global::g_szPython27Dir, _T("Lib\\site-packages\\ssat_sdk\\config\\resource_run.cfg"));
  132. GetPrivateProfileString(_T("Sound"), _T("sound_list"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  133. rscfg.sound_list = szValue;
  134. GetPrivateProfileString(_T("COMM"), _T("issendkeytakepicture_tester"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  135. rscfg.full_cut = szValue;
  136. GetPrivateProfileString(_T("COMM"), _T("tg39_port"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  137. rscfg.tg39_port = szValue;
  138. GetPrivateProfileString(_T("COMM"), _T("serial_communicator_port"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  139. rscfg.tv_port = szValue;
  140. GetPrivateProfileString(_T("COMM"), _T("sat_home"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  141. rscfg.sat_home = szValue;
  142. GetPrivateProfileString(_T("COMM"), _T("sat_result_dir"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  143. rscfg.sat_result_dir = szValue;
  144. GetPrivateProfileString(_T("COMM"), _T("chroma22293"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  145. rscfg.chroma22293 = szValue;
  146. //...
  147. GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  148. rscfg.menutree_chip = szValue;
  149. GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  150. rscfg.menutree_style = szValue;
  151. GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  152. rscfg.menutree_channel = szValue;
  153. // SATHelper
  154. GetPrivateProfileString(_T("SATHelper"), _T("chroma1"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  155. rscfg.chroma1 = szValue;
  156. GetPrivateProfileString(_T("SATHelper"), _T("chroma2"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  157. rscfg.chroma2 = szValue;
  158. }
  159. void CDeviceView::ReadTreePath()
  160. {
  161. // 必须在ReadRsRunCfg之后调用;
  162. TCHAR szRootDir[MAX_PATH] = {0};
  163. _stprintf_s(szRootDir, _T("%s%s"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\") );
  164. auto _get_dir = [](std::string dir){
  165. int nIndex = dir.find_last_of('\\');
  166. if (nIndex != std::string::npos)
  167. {
  168. return dir.substr(nIndex+1);
  169. }
  170. return dir;
  171. };
  172. auto _get_name = [](std::string dir) {
  173. int pos1 = dir.find_last_of('\\');
  174. if (pos1 != std::string::npos)
  175. {
  176. dir = dir.substr(pos1 + 1);
  177. int pos2 = dir.find_last_of('.');
  178. if (pos2 != std::string::npos)
  179. {
  180. dir = dir.substr(0, pos2);
  181. int pos3 = dir.find("MenuTree_");
  182. if (pos3 != std::string::npos)
  183. {
  184. return dir.substr(strlen("MenuTree_"));
  185. }
  186. }
  187. }
  188. return std::string();
  189. };
  190. // 查找根目录下的目录;
  191. filehelper fh;
  192. STR_VEC vt_dir;
  193. fh.getsubfolder(szRootDir, &vt_dir);
  194. for (auto it : vt_dir )
  195. {
  196. STR_VEC vt_subdir;
  197. std::vector<UITree> vtTree;
  198. fh.getsubfolder(it.c_str(), &vt_subdir);
  199. for ( auto ui : vt_subdir)
  200. {
  201. // 查找xls文件;
  202. UITree uitree;
  203. uitree.ui = ui;
  204. fh.getfiles_findout_subfolder(ui.c_str(), _T("*.xls"), &uitree.vtSubUI);
  205. vtTree.push_back(uitree);
  206. }
  207. m_map_tree.insert(std::pair<std::string, std::vector<UITree>>(_get_dir(it), vtTree));
  208. }
  209. // 去除目录级;
  210. for (std::map<std::string, std::vector<UITree>>::iterator it = m_map_tree.begin(); it != m_map_tree.end(); it++ )
  211. {
  212. for (std::vector<UITree>::iterator ui = it->second.begin(); ui != it->second.end(); ui++ )
  213. {
  214. ui->ui = _get_dir(ui->ui);
  215. for (std::vector<std::string>::iterator xls = ui->vtSubUI.begin(); xls != ui->vtSubUI.end();)
  216. {
  217. *xls = _get_name(xls->c_str());
  218. if ( xls->size() == 0 )
  219. {
  220. xls = ui->vtSubUI.erase(xls);
  221. }
  222. else
  223. {
  224. xls++;
  225. }
  226. }
  227. }
  228. }
  229. }
  230. void CDeviceView::ParseJson()
  231. {
  232. if ( m_rscfg.chroma1.size() == 0 )
  233. {
  234. cJSON* pJson = cJSON_Parse(m_rscfg.chroma22293.c_str());
  235. if (pJson)
  236. {
  237. cJSON* pArray = cJSON_GetObjectItem(pJson, "devices");
  238. if (pArray)
  239. {
  240. int nCount = cJSON_GetArraySize(pArray);
  241. for ( int i = 0; i < nCount; i++ )
  242. {
  243. cJSON *pItem = cJSON_GetArrayItem(pArray, i);
  244. if ( pItem )
  245. {
  246. if (i == 0)
  247. m_rscfg.chroma1 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
  248. if (i == 1)
  249. m_rscfg.chroma2 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
  250. }
  251. }
  252. }
  253. }
  254. // 保存;
  255. WritePrivateProfileString(_T("SATHelper"), _T("chroma1"), m_rscfg.chroma1.c_str(), m_szRsCfgPath);
  256. WritePrivateProfileString(_T("SATHelper"), _T("chroma2"), m_rscfg.chroma2.c_str(), m_szRsCfgPath);
  257. }
  258. }
  259. void CDeviceView::RunDevice()
  260. {
  261. if ( m_rscfg.chroma1.size() )
  262. {
  263. CDevice* pdev = new CDevice();
  264. pdev->m_iBaudrate = 115200;
  265. pdev->m_iDatabit = 8;
  266. pdev->m_iPort = atoi(m_rscfg.chroma1.substr(3).c_str());
  267. pdev->m_iParitybit = 0;
  268. pdev->m_iStopbit = 1;
  269. pdev->m_iID = 1;
  270. pdev->m_strDeviceName = "Chroma22293";
  271. pdev->m_iDeviceType = 1;
  272. if (pdev->Open())
  273. {
  274. g_dmap.insert(std::pair<int, CDevice*>(pdev->m_iID, pdev));
  275. m_ck_chroma1.SetCheck(TRUE);
  276. }
  277. else
  278. {
  279. delete pdev;
  280. m_ck_chroma1.SetCheck(FALSE);
  281. }
  282. }
  283. if (m_rscfg.chroma2.size())
  284. {
  285. CDevice* pdev = new CDevice();
  286. pdev->m_iBaudrate = 115200;
  287. pdev->m_iDatabit = 8;
  288. pdev->m_iPort = atoi(m_rscfg.chroma2.substr(3).c_str());
  289. pdev->m_iParitybit = 0;
  290. pdev->m_iStopbit = 1;
  291. pdev->m_iID = 2;
  292. pdev->m_strDeviceName = "Chroma22293";
  293. pdev->m_iDeviceType = 1;
  294. if (pdev->Open())
  295. {
  296. g_dmap.insert(std::pair<int, CDevice*>(pdev->m_iID, pdev));
  297. m_ck_chroma2.SetCheck(TRUE);
  298. }
  299. else
  300. {
  301. delete pdev;
  302. m_ck_chroma2.SetCheck(FALSE);
  303. }
  304. }
  305. UpdateData(FALSE);
  306. }
  307. void CDeviceView::InitCombobox_port()
  308. {
  309. CComboBox* pCommbox1 = ((CComboBox*)GetDlgItem(IDC_COMBO1));
  310. CComboBox* pCommbox2 = ((CComboBox*)GetDlgItem(IDC_COMBO2));
  311. for (std::vector<std::string>::iterator it = m_vtCOM.begin(); it != m_vtCOM.end(); it++)
  312. {
  313. if (!IsPortInserted(pCommbox1, it->c_str()))
  314. pCommbox1->AddString(it->c_str());
  315. if (!IsPortInserted(pCommbox2, it->c_str()))
  316. pCommbox2->AddString(it->c_str());
  317. }
  318. if ( m_rscfg.chroma1.size())
  319. pCommbox1->SelectString(0, m_rscfg.chroma1.c_str());
  320. if (m_rscfg.chroma2.size())
  321. pCommbox2->SelectString(0, m_rscfg.chroma2.c_str());
  322. }
  323. BOOL CDeviceView::IsPortInserted(CComboBox* pCommbox, LPCTSTR lpPort)
  324. {
  325. BOOL bInserted = FALSE;
  326. CString strCommPort = _T("");
  327. int nCount = pCommbox->GetCount();
  328. for (int i = 0; i < nCount; i++)
  329. {
  330. pCommbox->GetLBText(i, strCommPort);
  331. if (strCommPort.CompareNoCase(lpPort) == 0)
  332. {
  333. bInserted = TRUE;
  334. break;
  335. }
  336. }
  337. return bInserted;
  338. }
  339. //实现串口热插拔
  340. BOOL CDeviceView::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
  341. {
  342. switch (nEventType)
  343. {
  344. // 串口拨掉;
  345. case DBT_DEVICEREMOVECOMPLETE:
  346. break;
  347. // 串口插入;
  348. case DBT_DEVICEARRIVAL:
  349. {
  350. Global::GetSysSerialPort(m_vtCOM);
  351. InitCombobox_port();
  352. }
  353. break;
  354. default:
  355. break;
  356. }
  357. return TRUE;
  358. }
  359. void CDeviceView::OnInitialUpdate()
  360. {
  361. CFormView::OnInitialUpdate();
  362. // TODO: 在此添加您专用的创建代码
  363. ParseJson();
  364. // Ribbon Combobox添加默认项;
  365. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  366. ASSERT_VALID(pRibbon);
  367. CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
  368. if (pOcrCombo)
  369. {
  370. for (auto it : m_bdcfg.list_count)
  371. {
  372. pOcrCombo->AddItem(it.first.c_str());
  373. }
  374. // 选择默认项;
  375. pOcrCombo->SetEditText(m_bdcfg.cur_count.c_str());
  376. }
  377. // 剩余次数;
  378. CMFCRibbonEdit* pOcrCount = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_COUNT));
  379. if (pOcrCount)
  380. {
  381. pOcrCount->SetEditText(m_bdcfg.reset_time.c_str());
  382. }
  383. // 声音等级;
  384. CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
  385. if (pSoundLevel)
  386. {
  387. pSoundLevel->SetEditText(m_bdcfg.reset_time.c_str());
  388. }
  389. // 全步骤截图;
  390. // CMFCRibbonCheckBox* pCheckFullCut = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_CHECK_FULL_CUT));
  391. // if (pCheckFullCut)
  392. // {
  393. // pCheckFullCut->SetCheck();
  394. // }
  395. // MenuTree;
  396. CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
  397. if (pChipCombo)
  398. {
  399. for (auto it : m_map_tree)
  400. {
  401. pChipCombo->AddItem(it.first.c_str());
  402. }
  403. // 选择默认项;
  404. pChipCombo->SetEditText(m_rscfg.menutree_chip.c_str());
  405. // UI下拉框;
  406. CString curText = pChipCombo->GetEditText();
  407. CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
  408. for (auto it : m_map_tree.find(curText.GetString())->second)
  409. {
  410. pStyleCombo->AddItem(it.ui.c_str());
  411. }
  412. pStyleCombo->SetEditText(m_rscfg.menutree_style.c_str());
  413. }
  414. // 启动设备;
  415. Global::GetSysSerialPort(m_vtCOM);
  416. InitCombobox_port();
  417. RunDevice();
  418. }
  419. void CDeviceView::OnDraw(CDC* /*pDC*/)
  420. {
  421. // TODO: 在此添加专用代码和/或调用基类
  422. }
  423. void CDeviceView::OnPaint()
  424. {
  425. CPaintDC dc(this); // device context for painting
  426. // TODO: 在此处添加消息处理程序代码
  427. // 不为绘图消息调用 CFormView::OnPaint()
  428. CRect rc;
  429. GetWindowRect(&rc);
  430. static CImage mImage;
  431. static BOOL bLoad = FALSE;
  432. if (!bLoad)
  433. {
  434. bLoad = mImage.Load(_T("bk.jpg")) == S_OK;
  435. }
  436. if (bLoad)
  437. {
  438. // 缩放到最小后再拉大,区域为Null;
  439. if (rc.IsRectEmpty() || rc.IsRectNull())
  440. return;
  441. //...BUG,当出现滚动条时,绘制的内容出错;
  442. //这里让图片绘制区域和窗口大小一致
  443. mImage.Draw(GetDC()->GetSafeHdc(), CRect(0, 0, rc.Width(), rc.Height()));
  444. }
  445. }
  446. HBRUSH CDeviceView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  447. {
  448. HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
  449. // TODO: 在此更改 DC 的任何特性
  450. if (nCtlColor == CTLCOLOR_STATIC)
  451. {
  452. pDC->SetBkMode(TRANSPARENT);//<设置背景透明
  453. return (HBRUSH)::GetStockObject(NULL_BRUSH);
  454. }
  455. // TODO: 如果默认的不是所需画笔,则返回另一个画笔
  456. return hbr;
  457. }
  458. void CDeviceView::OnCheckFullCut()
  459. {
  460. // TODO: 在此添加命令处理程序代码
  461. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  462. ASSERT_VALID(pRibbon);
  463. CMFCRibbonButton* pFullCutCheck = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK_FULL_CUT));
  464. if (pFullCutCheck)
  465. {
  466. WritePrivateProfileString(_T("COMM"), _T("issendkeytakepicture_tester"), !pFullCutCheck->IsChecked() ? _T("True") : _T("False"), m_szRsCfgPath);
  467. m_rscfg.full_cut = !pFullCutCheck->IsChecked() ? _T("True") : _T("False");
  468. }
  469. }
  470. void CDeviceView::OnUpdateCheckFullCut(CCmdUI* pCmdUI)
  471. {
  472. // TODO: 在此添加命令更新用户界面处理程序代码
  473. pCmdUI->SetCheck(!_tcsicmp(m_rscfg.full_cut.c_str(), _T("True")));
  474. }
  475. void CDeviceView::OnHadSound()
  476. {
  477. // TODO: 在此添加命令处理程序代码
  478. }
  479. void CDeviceView::OnUpdateHadSound(CCmdUI* pCmdUI)
  480. {
  481. // TODO: 在此添加命令更新用户界面处理程序代码
  482. }
  483. void CDeviceView::OnDefSound()
  484. {
  485. // TODO: 在此添加命令处理程序代码
  486. }
  487. void CDeviceView::OnUpdateDefSound(CCmdUI* pCmdUI)
  488. {
  489. // TODO: 在此添加命令更新用户界面处理程序代码
  490. }
  491. void CDeviceView::OnComboxOcr()
  492. {
  493. // TODO: 在此添加命令处理程序代码
  494. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  495. ASSERT_VALID(pRibbon);
  496. CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
  497. if (pOcrCombo)
  498. {
  499. // 获取当前文本项;
  500. CString strOcr = pOcrCombo->GetEditText();
  501. WritePrivateProfileString(_T("CurStatus"), _T("Cur_Count"), strOcr, m_szBaiduCfgPath);
  502. }
  503. }
  504. void CDeviceView::OnUpdateComboxOcr(CCmdUI* pCmdUI)
  505. {
  506. // TODO: 在此添加命令更新用户界面处理程序代码
  507. }
  508. void CDeviceView::OnComboProduct()
  509. {
  510. // TODO: 在此添加命令处理程序代码
  511. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  512. ASSERT_VALID(pRibbon);
  513. CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
  514. if (pChipCombo)
  515. {
  516. // UI下拉框;
  517. CString curText = pChipCombo->GetEditText();
  518. CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
  519. pStyleCombo->RemoveAllItems();
  520. for (auto it : m_map_tree.find(curText.GetString())->second)
  521. {
  522. pStyleCombo->AddItem(it.ui.c_str());
  523. }
  524. pStyleCombo->SelectItem(0);
  525. // SUBUI下拉框;
  526. CString strUIName = pStyleCombo->GetEditText();
  527. CMFCRibbonComboBox* pSubUICombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_SUBUI));
  528. pSubUICombo->RemoveAllItems();
  529. std::vector<UITree> &ui = m_map_tree.find(curText.GetString())->second;
  530. for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++)
  531. {
  532. if ( _tcsicmp(strUIName.GetString(), it->ui.c_str()) == 0 )
  533. {
  534. if ( it->vtSubUI.size() == 0 )
  535. break;
  536. for ( auto SubUI : it->vtSubUI )
  537. {
  538. pSubUICombo->AddItem(SubUI.c_str());
  539. }
  540. pSubUICombo->SelectItem(0);
  541. }
  542. }
  543. // 保存结果;
  544. CString strCurChip = pChipCombo->GetEditText();
  545. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), strCurChip, m_szRsCfgPath);
  546. CString strCurStyle = pStyleCombo->GetEditText();
  547. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strCurStyle, m_szRsCfgPath);
  548. CString strSubStyle = pSubUICombo->GetEditText();
  549. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
  550. }
  551. }
  552. void CDeviceView::OnUpdateComboProduct(CCmdUI* pCmdUI)
  553. {
  554. // TODO: 在此添加命令更新用户界面处理程序代码
  555. }
  556. void CDeviceView::OnComboUi()
  557. {
  558. // TODO: 在此添加命令处理程序代码
  559. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  560. ASSERT_VALID(pRibbon);
  561. CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
  562. if (pStyleCombo)
  563. {
  564. CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
  565. // UI下拉框;
  566. CString curText = pChipCombo->GetEditText();
  567. // SUBUI下拉框;
  568. CString strUIName = pStyleCombo->GetEditText();
  569. CMFCRibbonComboBox* pSubUICombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_SUBUI));
  570. pSubUICombo->RemoveAllItems();
  571. std::vector<UITree>& ui = m_map_tree.find(curText.GetString())->second;
  572. for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++)
  573. {
  574. if (_tcsicmp(strUIName.GetString(), it->ui.c_str()) == 0 )
  575. {
  576. if (it->vtSubUI.size() == 0)
  577. break;
  578. for (auto SubUI : it->vtSubUI)
  579. {
  580. pSubUICombo->AddItem(SubUI.c_str());
  581. }
  582. pSubUICombo->SelectItem(0);
  583. }
  584. }
  585. // UI下拉框;
  586. CString strCurStyle = pStyleCombo->GetEditText();
  587. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strCurStyle, m_szRsCfgPath);
  588. CString strSubStyle = pSubUICombo->GetEditText();
  589. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
  590. }
  591. }
  592. void CDeviceView::OnUpdateComboUi(CCmdUI* pCmdUI)
  593. {
  594. // TODO: 在此添加命令更新用户界面处理程序代码
  595. }
  596. void CDeviceView::OnComboSubUi()
  597. {
  598. // TODO: 在此添加命令处理程序代码
  599. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  600. ASSERT_VALID(pRibbon);
  601. CMFCRibbonComboBox* pSubUICombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_SUBUI));
  602. if (pSubUICombo)
  603. {
  604. // UI下拉框;
  605. CString strSubStyle = pSubUICombo->GetEditText();
  606. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
  607. }
  608. }
  609. void CDeviceView::OnUpdateComboSubUi(CCmdUI* pCmdUI)
  610. {
  611. // TODO: 在此添加命令更新用户界面处理程序代码
  612. }
  613. void CDeviceView::OnCombo1_22293()
  614. {
  615. // TODO: 在此添加命令处理程序代码
  616. }
  617. void CDeviceView::OnUpdateCombo1_22293(CCmdUI* pCmdUI)
  618. {
  619. // TODO: 在此添加命令更新用户界面处理程序代码
  620. }
  621. void CDeviceView::OnCombo2_22293()
  622. {
  623. // TODO: 在此添加命令处理程序代码
  624. }
  625. void CDeviceView::OnUpdateCombo2_22293(CCmdUI* pCmdUI)
  626. {
  627. // TODO: 在此添加命令更新用户界面处理程序代码
  628. }
  629. void CDeviceView::OnCheck1_22293()
  630. {
  631. // TODO: 在此添加命令处理程序代码
  632. }
  633. void CDeviceView::OnUpdateCheck1_22293(CCmdUI* pCmdUI)
  634. {
  635. // TODO: 在此添加命令更新用户界面处理程序代码
  636. }
  637. void CDeviceView::OnCheck2_22293()
  638. {
  639. // TODO: 在此添加命令处理程序代码
  640. }
  641. void CDeviceView::OnUpdateCheck2_22293(CCmdUI* pCmdUI)
  642. {
  643. // TODO: 在此添加命令更新用户界面处理程序代码
  644. }
  645. //////////////////////////////////////////////////////////////////////////
  646. // 说明:使用CFormView时,任务初始化动作都应该放在OnCreate中;
  647. // 而非放在OnInitialUpdate中执行,因为OnInitialUpdate可能被调用多次;
  648. int CDeviceView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  649. {
  650. if (CFormView::OnCreate(lpCreateStruct) == -1)
  651. return -1;
  652. #if 0
  653. // TODO: 在此添加您专用的创建代码
  654. ParseJson();
  655. // Ribbon Combobox添加默认项;
  656. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  657. ASSERT_VALID(pRibbon);
  658. CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
  659. if (pOcrCombo)
  660. {
  661. for (auto it : m_bdcfg.list_count)
  662. {
  663. pOcrCombo->AddItem(it.first.c_str());
  664. }
  665. // 选择默认项;
  666. pOcrCombo->SetEditText(m_bdcfg.cur_count.c_str());
  667. }
  668. // 剩余次数;
  669. CMFCRibbonEdit* pOcrCount = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_COUNT));
  670. if (pOcrCount)
  671. {
  672. pOcrCount->SetEditText(m_bdcfg.reset_time.c_str());
  673. }
  674. // 声音等级;
  675. CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
  676. if (pSoundLevel)
  677. {
  678. pSoundLevel->SetEditText(m_bdcfg.reset_time.c_str());
  679. }
  680. // 全步骤截图;
  681. // CMFCRibbonCheckBox* pCheckFullCut = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_CHECK_FULL_CUT));
  682. // if (pCheckFullCut)
  683. // {
  684. // pCheckFullCut->SetCheck();
  685. // }
  686. // MenuTree;
  687. CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
  688. if (pChipCombo)
  689. {
  690. for (auto it : m_map_tree)
  691. {
  692. pChipCombo->AddItem(it.first.c_str());
  693. }
  694. // 选择默认项;
  695. pChipCombo->SetEditText(m_rscfg.menutree_chip.c_str());
  696. // UI下拉框;
  697. CString curText = pChipCombo->GetEditText();
  698. CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
  699. for (auto it : m_map_tree.find(curText.GetString())->second)
  700. {
  701. pStyleCombo->AddItem(it.c_str());
  702. }
  703. pStyleCombo->SetEditText(m_rscfg.menutree_style.c_str());
  704. }
  705. // 启动设备;
  706. Global::GetSysSerialPort(m_vtCOM);
  707. InitCombobox_port();
  708. RunDevice();
  709. #endif
  710. return 0;
  711. }
  712. void CDeviceView::OnBnClickedButton1()
  713. {
  714. // TODO: 在此添加控件通知处理程序代码
  715. }
  716. void CDeviceView::OnBnClickedButton2()
  717. {
  718. // TODO: 在此添加控件通知处理程序代码
  719. }
  720. void CDeviceView::OnBnClickedCheck1()
  721. {
  722. // TODO: 在此添加控件通知处理程序代码
  723. CDevice* pDev = g_dmap.find(1)->second;
  724. if (m_ck_chroma1.GetCheck())
  725. pDev->Open();
  726. else
  727. pDev->Close();
  728. }
  729. void CDeviceView::OnBnClickedCheck2()
  730. {
  731. // TODO: 在此添加控件通知处理程序代码
  732. CDevice* pDev = g_dmap.find(2)->second;
  733. if (m_ck_chroma2.GetCheck())
  734. pDev->Open();
  735. else
  736. pDev->Close();
  737. }
  738. void CDeviceView::OnCbnSelchangeCombo1()
  739. {
  740. // 保存到配置文件中;
  741. int nCurSel = m_cb_chroma1.GetCurSel();
  742. if ( nCurSel != CB_ERR )
  743. {
  744. CString strChroma1;
  745. m_cb_chroma1.GetLBText(nCurSel, strChroma1);
  746. WritePrivateProfileString(_T("SATHelper"), _T("chroma1"), strChroma1, m_szRsCfgPath);
  747. CDevice *pDev = g_dmap.find(1)->second;
  748. int port = atoi(strChroma1.Right(1).GetString());
  749. if (pDev->m_iPort != port)
  750. {
  751. pDev->m_iPort = port;
  752. pDev->Close();
  753. m_ck_chroma1.SetCheck(pDev->Open());
  754. }
  755. }
  756. }
  757. void CDeviceView::OnCbnSelchangeCombo2()
  758. {
  759. int nCurSel = m_cb_chroma2.GetCurSel();
  760. if (nCurSel != CB_ERR)
  761. {
  762. CString strChroma2;
  763. m_cb_chroma2.GetLBText(nCurSel, strChroma2);
  764. WritePrivateProfileString(_T("SATHelper"), _T("chroma2"), strChroma2, m_szRsCfgPath);
  765. CDevice* pDev = g_dmap.find(2)->second;
  766. int port = atoi(strChroma2.Right(1).GetString());
  767. if (pDev->m_iPort != port)
  768. {
  769. pDev->m_iPort = port;
  770. pDev->Close();
  771. m_ck_chroma2.SetCheck(pDev->Open());
  772. }
  773. }
  774. }