MainFrm.cpp 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717
  1. // 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
  2. // (“Fluent UI”)。该示例仅供参考,
  3. // 用以补充《Microsoft 基础类参考》和
  4. // MFC C++ 库软件随附的相关电子文档。
  5. // 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
  6. // 若要了解有关 Fluent UI 许可计划的详细信息,请访问
  7. // https://go.microsoft.com/fwlink/?LinkId=238214.
  8. //
  9. // 版权所有(C) Microsoft Corporation
  10. // 保留所有权利。
  11. // MainFrm.cpp: CMainFrame 类的实现
  12. //
  13. #include "stdafx.h"
  14. #include "framework.h"
  15. #include "SATHelper.h"
  16. #include "MainFrm.h"
  17. #include "DlgLogin.h"
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #endif
  21. CMainFrame* g_pMainFrame = NULL;
  22. #if USE_TRAYICON
  23. #define WM_MY_TRAY_NOTIFICATION WM_USER + 108
  24. const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("UB530"));
  25. #endif
  26. // CMainFrame
  27. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWndEx)
  28. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
  29. ON_WM_CREATE()
  30. ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
  31. ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
  32. ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
  33. ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
  34. ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
  35. ON_COMMAND(ID_TOOLS_OPTIONS, &CMainFrame::OnOptions)
  36. ON_WM_SETTINGCHANGE()
  37. #if USE_TRAYICON
  38. ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)
  39. ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated)
  40. #endif
  41. ON_COMMAND(ID_TRAYMENU_EXIT, &CMainFrame::OnTraymenuExit)
  42. ON_MESSAGE(MSG_STATUS_BAR, &CMainFrame::OnMsgStatusBar)
  43. ON_REGISTERED_MESSAGE(AFX_WM_ON_CHANGE_RIBBON_CATEGORY, &CMainFrame::OnRibbonChanged)
  44. ON_WM_CLOSE()
  45. ON_WM_DEVICECHANGE()
  46. // 全步骤截图;
  47. ON_COMMAND(ID_CHECK_FULL_CUT, &CMainFrame::OnCheckFullCut)
  48. ON_UPDATE_COMMAND_UI(ID_CHECK_FULL_CUT, &CMainFrame::OnUpdateCheckFullCut)
  49. // 有声按钮;
  50. ON_COMMAND(BTN_HAD_SOUND, &CMainFrame::OnHadSound)
  51. ON_UPDATE_COMMAND_UI(BTN_HAD_SOUND, &CMainFrame::OnUpdateHadSound)
  52. // 声音默认按钮;
  53. ON_COMMAND(BTN_DEF_SOUND, &CMainFrame::OnDefSound)
  54. ON_UPDATE_COMMAND_UI(BTN_DEF_SOUND, &CMainFrame::OnUpdateDefSound)
  55. // 声音等级编辑框;
  56. // OCR账号下拉框;
  57. ON_COMMAND(ID_COMBOX_OCR, &CMainFrame::OnComboxOcr)
  58. ON_UPDATE_COMMAND_UI(ID_COMBOX_OCR, &CMainFrame::OnUpdateComboxOcr)
  59. // MenuTree项目下拉框;
  60. ON_COMMAND(ID_COMBO_PRODUCT, &CMainFrame::OnComboProduct)
  61. ON_UPDATE_COMMAND_UI(ID_COMBO_PRODUCT, &CMainFrame::OnUpdateComboProduct)
  62. // MenuTree UI下拉框;
  63. ON_COMMAND(ID_COMBO_UI, &CMainFrame::OnComboUi)
  64. ON_UPDATE_COMMAND_UI(ID_COMBO_UI, &CMainFrame::OnUpdateComboUi)
  65. // MenuTree 子UI下拉框;
  66. ON_COMMAND(ID_COMBO_SUBUI, &CMainFrame::OnComboSubUi)
  67. ON_UPDATE_COMMAND_UI(ID_COMBO_SUBUI, &CMainFrame::OnUpdateComboSubUi)
  68. // 信号仪1下拉框;
  69. ON_COMMAND(ID_COMBO1_22293, &CMainFrame::OnCombo1_22293)
  70. ON_UPDATE_COMMAND_UI(ID_COMBO1_22293, &CMainFrame::OnUpdateCombo1_22293)
  71. // 信号仪2下拉框;
  72. ON_COMMAND(ID_COMBO2_22293, &CMainFrame::OnCombo2_22293)
  73. ON_UPDATE_COMMAND_UI(ID_COMBO2_22293, &CMainFrame::OnUpdateCombo2_22293)
  74. // 信号仪1CheckBox;
  75. ON_COMMAND(ID_CHECK1_22293, &CMainFrame::OnCheck1_22293)
  76. ON_UPDATE_COMMAND_UI(ID_CHECK1_22293, &CMainFrame::OnUpdateCheck1_22293)
  77. // 信号仪2CheckBox;
  78. ON_COMMAND(ID_CHECK2_22293, &CMainFrame::OnCheck2_22293)
  79. ON_UPDATE_COMMAND_UI(ID_CHECK2_22293, &CMainFrame::OnUpdateCheck2_22293)
  80. //////////////////////////////////////////////////////////////////////////
  81. ON_COMMAND(ID_COMBO_TVPORT, &CMainFrame::OnCombo2Tv)
  82. ON_UPDATE_COMMAND_UI(ID_COMBO_TVPORT, &CMainFrame::OnUpdateCombo2Tv)
  83. ON_COMMAND(ID_CHECK_WATCHTV, &CMainFrame::OnCheckWatchtv)
  84. ON_UPDATE_COMMAND_UI(ID_CHECK_WATCHTV, &CMainFrame::OnUpdateCheckWatchtv)
  85. ON_COMMAND(ID_TRAYMENU_LOGIN, &CMainFrame::OnTraymenuLogin)
  86. ON_COMMAND(ID_CHECK_ENABLETW, &CMainFrame::OnCheckEnabletw)
  87. ON_UPDATE_COMMAND_UI(ID_CHECK_ENABLETW, &CMainFrame::OnUpdateCheckEnabletw)
  88. ON_COMMAND(ID_COMBO_TWPORT, &CMainFrame::OnComboTwport)
  89. ON_UPDATE_COMMAND_UI(ID_COMBO_TWPORT, &CMainFrame::OnUpdateComboTwport)
  90. END_MESSAGE_MAP()
  91. // CMainFrame 构造/析构
  92. CMainFrame::CMainFrame() noexcept :m_trayIcon(IDR_MAINFRAME)
  93. {
  94. // TODO: 在此添加成员初始化代码
  95. theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2008);
  96. #if USE_TRAYICON
  97. m_isNotify = TRUE;
  98. m_bNoticeTray = TRUE;
  99. #endif
  100. m_pDoc = NULL;
  101. m_pActiveView = NULL;
  102. for ( int i = 0; i < 10; i++ )
  103. {
  104. m_pViewIDE[i] = NULL;
  105. }
  106. m_bShotIR = FALSE;
  107. m_pUB530View = m_pDeviceView = NULL;
  108. ReadBaiduCfg(m_bdcfg);
  109. ReadRsRunCfg(m_rscfg);
  110. ReadTreePath();
  111. }
  112. CMainFrame::~CMainFrame()
  113. {
  114. }
  115. #if USE_TRAYICON
  116. void CMainFrame::InitTrayIcon()
  117. {
  118. m_trayIcon.SetNotificationWnd(this, WM_MY_TRAY_NOTIFICATION);
  119. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530"));
  120. m_trayIcon.SetIconInfos(IDR_MAINFRAME, IDR_MAINFRAME, IDR_MAINFRAME);
  121. m_trayIcon.SetDefaultTip(_T("UB530"));
  122. }
  123. LRESULT CMainFrame::OnTaskBarCreated(WPARAM wp, LPARAM lp)
  124. {
  125. Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid);
  126. return 0;
  127. }
  128. // Handle notification from tray icon: display a message.
  129. LRESULT CMainFrame::OnTrayNotification(WPARAM uID, LPARAM lEvent)
  130. {
  131. if (m_isNotify)
  132. {
  133. static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE",
  134. "WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK",
  135. "WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK",
  136. "WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" };
  137. }
  138. if (uID != IDR_MAINFRAME)
  139. return m_trayIcon.OnTrayNotification(uID, lEvent);
  140. switch (lEvent)
  141. {
  142. case WM_RBUTTONUP:
  143. TrayRight();
  144. break;
  145. case WM_LBUTTONUP:
  146. break;
  147. case WM_LBUTTONDBLCLK:
  148. TaskNotifyIcon();
  149. break;
  150. default:
  151. break;
  152. }
  153. return 0;
  154. }
  155. void CMainFrame::TrayRight()
  156. {
  157. CMenu menu;
  158. if (!menu.LoadMenu(IDR_MAINFRAME))
  159. return;
  160. CMenu* pSubMenu = menu.GetSubMenu(3);
  161. if (!pSubMenu)
  162. return;
  163. CPoint point;
  164. GetCursorPos(&point);
  165. ::SetForegroundWindow(m_hWnd);
  166. pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
  167. }
  168. void CMainFrame::TaskNotifyIcon()
  169. {
  170. if (!m_bNoticeTray)
  171. {
  172. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序"));
  173. ShowWindow(SW_SHOWNORMAL);
  174. m_bNoticeTray = TRUE;
  175. }
  176. else
  177. {
  178. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序"));
  179. ShowWindow(SW_HIDE);
  180. m_bNoticeTray = FALSE;
  181. }
  182. }
  183. #endif
  184. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  185. {
  186. if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
  187. return -1;
  188. g_pMainFrame = this;
  189. #if USE_TRAYICON
  190. InitTrayIcon();
  191. #endif
  192. BOOL bNameValid;
  193. #if __TAB_BAR__
  194. CMDITabInfo mdiTabParams;
  195. mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
  196. mdiTabParams.m_bActiveTabCloseButton = TRUE; // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
  197. mdiTabParams.m_bTabIcons = FALSE; // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
  198. mdiTabParams.m_bAutoColor = TRUE; // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
  199. mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
  200. EnableMDITabbedGroups(TRUE, mdiTabParams);
  201. #endif
  202. m_wndRibbonBar.Create(this);
  203. m_wndRibbonBar.LoadFromResource(IDR_RIBBON);
  204. #if !__QUICKACCESS_COMMAND__
  205. // 添加以下代码段,禁用快速启动栏;
  206. CMFCRibbonQuickAccessToolBar* pQAToolbar = m_wndRibbonBar.GetQuickAccessToolbar();
  207. pQAToolbar->RemoveAll();
  208. #endif
  209. if (!m_wndStatusBar.Create(this))
  210. {
  211. TRACE0("未能创建状态栏\n");
  212. return -1; // 未能创建
  213. }
  214. CString strTitlePane1;
  215. CString strTitlePane2;
  216. bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
  217. ASSERT(bNameValid);
  218. bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
  219. ASSERT(bNameValid);
  220. m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
  221. m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);
  222. // 启用 Visual Studio 2005 样式停靠窗口行为
  223. CDockingManager::SetDockingMode(DT_SMART);
  224. // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
  225. EnableAutoHidePanes(CBRS_ALIGN_ANY);
  226. #if __OUTLOOKBAR__
  227. // 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
  228. EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
  229. // 创建并设置“Outlook”导航栏:
  230. if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
  231. {
  232. TRACE0("未能创建导航窗格\n");
  233. return -1; // 未能创建
  234. }
  235. #endif
  236. #if __CAPTIONBAR__
  237. // 创建标题栏:
  238. if (!CreateCaptionBar())
  239. {
  240. TRACE0("未能创建标题栏\n");
  241. return -1; // 未能创建
  242. }
  243. #endif
  244. #if __OUTLOOKBAR__
  245. // 已创建 Outlook 栏,应允许在左侧停靠。
  246. EnableDocking(CBRS_ALIGN_LEFT);
  247. EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
  248. #endif
  249. // 加载菜单项图像(不在任何标准工具栏上):
  250. CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
  251. #if __DOCKINGBAR__
  252. // 创建停靠窗口
  253. if (!CreateDockingWindows())
  254. {
  255. TRACE0("未能创建停靠窗口\n");
  256. return -1;
  257. }
  258. #if __FC_WIN__
  259. m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
  260. m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
  261. DockPane(&m_wndFileView);
  262. CDockablePane* pTabbedBar = nullptr;
  263. m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
  264. #endif
  265. #if __OUT_PUT_WIN__
  266. m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
  267. DockPane(&m_wndOutput);
  268. #endif
  269. m_wndIRControl.EnableDocking(CBRS_ALIGN_ANY);
  270. DockPane(&m_wndIRControl);
  271. m_wndDevices.EnableDocking(CBRS_ALIGN_ANY);
  272. CDockablePane* pTabbedBar = nullptr;
  273. m_wndDevices.AttachToTabWnd(&m_wndIRControl, DM_SHOW, TRUE, &pTabbedBar);
  274. #endif
  275. // 基于持久值设置视觉管理器和样式
  276. OnApplicationLook(theApp.m_nAppLook);
  277. // 启用增强的窗口管理对话框
  278. EnableWindowsDialog(ID_WINDOW_MANAGER, ID_WINDOW_MANAGER, TRUE);
  279. #if __TAB_BAR__
  280. // 将文档名和应用程序名称在窗口标题栏上的顺序进行交换。这
  281. // 将改进任务栏的可用性,因为显示的文档名带有缩略图。
  282. ModifyStyle(0, FWS_PREFIXTITLE);
  283. #endif
  284. #if _USE_DLGVIEW_ // 第一个视图;
  285. CCreateContext context;
  286. m_pUB530View = new CChildFrame();
  287. context.m_pLastView = NULL;
  288. context.m_pCurrentFrame = this;
  289. context.m_pCurrentDoc = m_pDoc;
  290. context.m_pNewViewClass = RUNTIME_CLASS(CUB530View);
  291. context.m_pNewDocTemplate = m_pDoc->GetDocTemplate();
  292. if (m_pUB530View->LoadFrame(DLG_UB530VIEW, WS_MAXIMIZE | WS_CHILDWINDOW, this, &context))
  293. {
  294. //m_pUB530View->ShowWindow(SW_SHOWMAXIMIZED);
  295. m_pUB530View->InitialUpdateFrame(context.m_pCurrentDoc, FALSE);
  296. //m_pUB530View->MDIActivate();
  297. }
  298. #else
  299. CCreateContext context;
  300. m_pUB530View = new CChildFrame();
  301. context.m_pLastView = NULL;
  302. context.m_pCurrentFrame = this;
  303. context.m_pCurrentDoc = m_pDoc;
  304. context.m_pNewViewClass = RUNTIME_CLASS(CSATHelperView);
  305. context.m_pNewDocTemplate = m_pDoc->GetDocTemplate();
  306. if (m_pUB530View->LoadFrame(1100, WS_MAXIMIZE | WS_OVERLAPPEDWINDOW /*WS_CHILDWINDOW*/, this, &context))
  307. {
  308. //m_pUB530View->ShowWindow(SW_SHOWMAXIMIZED);
  309. m_pUB530View->InitialUpdateFrame(context.m_pCurrentDoc, TRUE);
  310. //m_pUB530View->MDIActivate();
  311. }
  312. #endif
  313. #if 0 // 第二个视图;
  314. CCreateContext context2;
  315. m_pDeviceView = new CChildFrame();
  316. context2.m_pLastView = NULL;
  317. context2.m_pCurrentFrame = this;
  318. context2.m_pCurrentDoc = m_pDoc;
  319. context2.m_pNewViewClass = RUNTIME_CLASS(CDeviceView);
  320. context2.m_pNewDocTemplate = m_pDoc->GetDocTemplate();
  321. // 说明:DLG_DEVICEMANAGER对话框的Style属性必须设置成Child才能LoadFrame成功;
  322. if (m_pDeviceView->LoadFrame(DLG_DEVICEMANAGER, WS_MAXIMIZE | WS_CHILDWINDOW, this, &context2))
  323. {
  324. //m_pDeviceView->ShowWindow(SW_SHOWMAXIMIZED);
  325. m_pDeviceView->InitialUpdateFrame(NULL, FALSE);
  326. m_pDeviceView->MDIActivate();
  327. }
  328. #endif
  329. m_pUB530View->MDIActivate();
  330. m_pUB530View->ShowWindow(SW_SHOWMAXIMIZED);
  331. InitDevicePanel();
  332. SetWindowText(_T("SATHelper 版本4.39.003"));
  333. return 0;
  334. }
  335. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  336. {
  337. if( !CMDIFrameWndEx::PreCreateWindow(cs) )
  338. return FALSE;
  339. // TODO: 在此处通过修改
  340. // CREATESTRUCT cs 来修改窗口类或样式
  341. //不把子框架标题添加到主框架标题(主框架中就不会再处理WM_SETTEXT消息)
  342. cs.style &= ~FWS_ADDTOTITLE;
  343. return TRUE;
  344. }
  345. #if __DOCKINGBAR__
  346. BOOL CMainFrame::CreateDockingWindows()
  347. {
  348. #if __FC_WIN__
  349. // 创建类视图
  350. CString strClassView;
  351. bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
  352. ASSERT(bNameValid);
  353. if (!m_wndClassView.Create(strClassView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
  354. {
  355. TRACE0("未能创建“类视图”窗口\n");
  356. return FALSE; // 未能创建
  357. }
  358. // 创建文件视图
  359. CString strFileView;
  360. bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
  361. ASSERT(bNameValid);
  362. if (!m_wndFileView.Create(strFileView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI))
  363. {
  364. TRACE0("未能创建“文件视图”窗口\n");
  365. return FALSE; // 未能创建
  366. }
  367. #endif
  368. #if __OUT_PUT_WIN__
  369. // 创建输出窗口
  370. CString strOutputWnd;
  371. bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
  372. ASSERT(bNameValid);
  373. if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
  374. {
  375. TRACE0("未能创建输出窗口\n");
  376. return FALSE; // 未能创建
  377. }
  378. #endif
  379. // 创建遥控器窗口
  380. CString strPropertiesWnd = _T("遥控器");
  381. if (!m_wndIRControl.Create(strPropertiesWnd, this, CRect(0, 0, 230, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
  382. {
  383. TRACE0("未能创建“遥控器”窗口\n");
  384. return FALSE; // 未能创建
  385. }
  386. // 创建设备管理窗口
  387. CString strDevicesWnd = _T("执行器");
  388. if (!m_wndDevices.Create(strDevicesWnd, this, CRect(0, 0, 230, 200), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
  389. {
  390. TRACE0("未能创建“执行器”窗口\n");
  391. return FALSE; // 未能创建
  392. }
  393. SetDockingWindowIcons(theApp.m_bHiColorIcons);
  394. return TRUE;
  395. }
  396. void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
  397. {
  398. #if __FC_WIN__
  399. HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  400. m_wndFileView.SetIcon(hFileViewIcon, FALSE);
  401. HICON hClassViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_CLASS_VIEW_HC : IDI_CLASS_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  402. m_wndClassView.SetIcon(hClassViewIcon, FALSE);
  403. #endif
  404. #if __OUT_PUT_WIN__
  405. HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  406. m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
  407. #endif
  408. HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  409. m_wndIRControl.SetIcon(hPropertiesBarIcon, FALSE);
  410. HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  411. m_wndDevices.SetIcon(hOutputBarIcon, FALSE);
  412. #if __TAB_BAR__
  413. UpdateMDITabbedBarsIcons();
  414. #endif
  415. }
  416. #endif
  417. #if __OUTLOOKBAR__
  418. BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth)
  419. {
  420. bar.SetMode2003();
  421. BOOL bNameValid;
  422. CString strTemp;
  423. bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
  424. ASSERT(bNameValid);
  425. if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
  426. {
  427. return FALSE; // 未能创建
  428. }
  429. CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
  430. if (pOutlookBar == nullptr)
  431. {
  432. ASSERT(FALSE);
  433. return FALSE;
  434. }
  435. pOutlookBar->EnableInPlaceEdit(TRUE);
  436. static UINT uiPageID = 1;
  437. // 可浮动,可自动隐藏,可调整大小,但不能关闭
  438. DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
  439. CRect rectDummy(0, 0, 0, 0);
  440. const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
  441. tree.Create(dwTreeStyle, rectDummy, &bar, 1200);
  442. bNameValid = strTemp.LoadString(IDS_FOLDERS);
  443. ASSERT(bNameValid);
  444. pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle);
  445. calendar.Create(rectDummy, &bar, 1201);
  446. bNameValid = strTemp.LoadString(IDS_CALENDAR);
  447. ASSERT(bNameValid);
  448. pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle);
  449. bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  450. pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24);
  451. pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16);
  452. pOutlookBar->RecalcLayout();
  453. BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE);
  454. CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation);
  455. bar.SetButtonsFont(&afxGlobalData.fontBold);
  456. return TRUE;
  457. }
  458. #endif
  459. #if __CAPTIONBAR__
  460. BOOL CMainFrame::CreateCaptionBar()
  461. {
  462. if (!m_wndCaptionBar.Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this, ID_VIEW_CAPTION_BAR, -1, TRUE))
  463. {
  464. TRACE0("未能创建标题栏\n");
  465. return FALSE;
  466. }
  467. BOOL bNameValid;
  468. CString strTemp, strTemp2;
  469. bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON);
  470. ASSERT(bNameValid);
  471. m_wndCaptionBar.SetButton(strTemp, ID_TOOLS_OPTIONS, CMFCCaptionBar::ALIGN_LEFT, FALSE);
  472. bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON_TIP);
  473. ASSERT(bNameValid);
  474. m_wndCaptionBar.SetButtonToolTip(strTemp);
  475. bNameValid = strTemp.LoadString(IDS_CAPTION_TEXT);
  476. ASSERT(bNameValid);
  477. m_wndCaptionBar.SetText(strTemp, CMFCCaptionBar::ALIGN_LEFT);
  478. m_wndCaptionBar.SetBitmap(IDB_INFO, RGB(255, 255, 255), FALSE, CMFCCaptionBar::ALIGN_LEFT);
  479. bNameValid = strTemp.LoadString(IDS_CAPTION_IMAGE_TIP);
  480. ASSERT(bNameValid);
  481. bNameValid = strTemp2.LoadString(IDS_CAPTION_IMAGE_TEXT);
  482. ASSERT(bNameValid);
  483. m_wndCaptionBar.SetImageToolTip(strTemp, strTemp2);
  484. return TRUE;
  485. }
  486. #endif
  487. // CMainFrame 诊断
  488. #ifdef _DEBUG
  489. void CMainFrame::AssertValid() const
  490. {
  491. CMDIFrameWndEx::AssertValid();
  492. }
  493. void CMainFrame::Dump(CDumpContext& dc) const
  494. {
  495. CMDIFrameWndEx::Dump(dc);
  496. }
  497. #endif //_DEBUG
  498. // CMainFrame 消息处理程序
  499. void CMainFrame::OnWindowManager()
  500. {
  501. ShowWindowsDialog();
  502. }
  503. void CMainFrame::OnApplicationLook(UINT id)
  504. {
  505. CWaitCursor wait;
  506. theApp.m_nAppLook = id;
  507. switch (theApp.m_nAppLook)
  508. {
  509. case ID_VIEW_APPLOOK_WIN_2000:
  510. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
  511. m_wndRibbonBar.SetWindows7Look(FALSE);
  512. break;
  513. case ID_VIEW_APPLOOK_OFF_XP:
  514. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
  515. m_wndRibbonBar.SetWindows7Look(FALSE);
  516. break;
  517. case ID_VIEW_APPLOOK_WIN_XP:
  518. CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
  519. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
  520. m_wndRibbonBar.SetWindows7Look(FALSE);
  521. break;
  522. case ID_VIEW_APPLOOK_OFF_2003:
  523. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
  524. CDockingManager::SetDockingMode(DT_SMART);
  525. m_wndRibbonBar.SetWindows7Look(FALSE);
  526. break;
  527. case ID_VIEW_APPLOOK_VS_2005:
  528. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
  529. CDockingManager::SetDockingMode(DT_SMART);
  530. m_wndRibbonBar.SetWindows7Look(FALSE);
  531. break;
  532. case ID_VIEW_APPLOOK_VS_2008:
  533. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008));
  534. CDockingManager::SetDockingMode(DT_SMART);
  535. m_wndRibbonBar.SetWindows7Look(FALSE);
  536. break;
  537. case ID_VIEW_APPLOOK_WINDOWS_7:
  538. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));
  539. CDockingManager::SetDockingMode(DT_SMART);
  540. m_wndRibbonBar.SetWindows7Look(TRUE);
  541. break;
  542. default:
  543. switch (theApp.m_nAppLook)
  544. {
  545. case ID_VIEW_APPLOOK_OFF_2007_BLUE:
  546. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
  547. break;
  548. case ID_VIEW_APPLOOK_OFF_2007_BLACK:
  549. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
  550. break;
  551. case ID_VIEW_APPLOOK_OFF_2007_SILVER:
  552. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
  553. break;
  554. case ID_VIEW_APPLOOK_OFF_2007_AQUA:
  555. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
  556. break;
  557. }
  558. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
  559. CDockingManager::SetDockingMode(DT_SMART);
  560. m_wndRibbonBar.SetWindows7Look(FALSE);
  561. }
  562. #if __DOCKINGBAR__
  563. #if __OUT_PUT_WIN__
  564. m_wndOutput.UpdateFonts();
  565. #endif
  566. #endif
  567. RedrawWindow(nullptr, nullptr, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
  568. theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
  569. }
  570. void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
  571. {
  572. pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
  573. }
  574. void CMainFrame::OnViewCaptionBar()
  575. {
  576. #if __CAPTIONBAR__
  577. m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW);
  578. RecalcLayout(FALSE);
  579. #endif
  580. }
  581. void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI)
  582. {
  583. #if __CAPTIONBAR__
  584. pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
  585. #endif
  586. }
  587. void CMainFrame::OnOptions()
  588. {
  589. CMFCRibbonCustomizeDialog *pOptionsDlg = new CMFCRibbonCustomizeDialog(this, &m_wndRibbonBar);
  590. ASSERT(pOptionsDlg != nullptr);
  591. pOptionsDlg->DoModal();
  592. delete pOptionsDlg;
  593. }
  594. void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
  595. {
  596. CMDIFrameWndEx::OnSettingChange(uFlags, lpszSection);
  597. #if __DOCKINGBAR__
  598. #if __OUT_PUT_WIN__
  599. m_wndOutput.UpdateFonts();
  600. #endif
  601. #endif
  602. }
  603. LRESULT CMainFrame::OnMsgStatusBar(WPARAM wParam, LPARAM lParam)
  604. {
  605. CString strMSG = *(CString*)wParam;
  606. int uId = lParam;
  607. SetRibbonStatusBarText(strMSG, uId);
  608. return LRESULT();
  609. }
  610. void CMainFrame::OnTraymenuExit()
  611. {
  612. // TODO: 在此添加命令处理程序代码
  613. //GetActiveView();
  614. CFrameWnd::OnClose();
  615. }
  616. void CMainFrame::OnClose()
  617. {
  618. // TODO: 在此添加消息处理程序代码和/或调用默认值
  619. #ifndef _DEBUG
  620. ShowWindow(SW_HIDE);
  621. m_bNoticeTray = FALSE;
  622. #else
  623. CFrameWnd::OnClose();
  624. #endif
  625. }
  626. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
  627. {
  628. // TODO: 在此添加专用代码和/或调用基类
  629. static BOOL bTopWnd = FALSE;
  630. if (pMsg->message == WM_KEYDOWN)
  631. {
  632. if (pMsg->wParam == VK_F3)
  633. {
  634. if (bTopWnd == FALSE)
  635. {
  636. SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//窗口置顶
  637. SetWindowText(_T("SATHelper 版本4.39.003 视频采集卡 - 前置窗口(请按F3取消或开启前置)"));
  638. }
  639. else
  640. {
  641. SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//取消窗口置顶
  642. SetWindowText(_T("SATHelper 版本4.39.003 视频采集卡-取消前置(请按F3取消或开启前置)"));
  643. }
  644. bTopWnd = !bTopWnd;
  645. // 必须退出,否则执行2次;
  646. return TRUE;
  647. }
  648. }
  649. return CMDIFrameWndEx::PreTranslateMessage(pMsg);
  650. }
  651. LRESULT CMainFrame::OnRibbonChanged(WPARAM wParam, LPARAM lParam)
  652. {
  653. CMFCRibbonCategory* pCategory = m_wndRibbonBar.GetActiveCategory();
  654. int nCategory = m_wndRibbonBar.GetCategoryIndex(pCategory);
  655. if (nCategory == 1)
  656. {
  657. if (m_pUB530View)
  658. {
  659. m_pUB530View->MDIActivate();
  660. m_pUB530View->ShowWindow(SW_SHOWMAXIMIZED);
  661. }
  662. }
  663. else if (nCategory == 2)
  664. {
  665. if (m_pDeviceView)
  666. {
  667. m_pDeviceView->MDIActivate();
  668. m_pDeviceView->ShowWindow(SW_SHOWMAXIMIZED);
  669. }
  670. }
  671. return LRESULT();
  672. }
  673. void CMainFrame::ReadBaiduCfg(BaiduCfg& bdcfg)
  674. {
  675. TCHAR szValue[MAX_PATH] = { 0 };
  676. TCHAR szBuffer[1024] = { 0 };
  677. _stprintf_s(m_szBaiduCfgPath, _T("%s%s"), Global::g_szPython27Dir, _T("Lib\\site-packages\\ssat_sdk\\config\\baidu_run.cfg"));
  678. GetPrivateProfileString(_T("CurStatus"), _T("Cur_Count"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  679. bdcfg.cur_count = szValue;
  680. GetPrivateProfileString(_T("CurStatus"), _T("Reset_Time"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  681. bdcfg.reset_time = szValue;
  682. // 读取所有Section值;
  683. DWORD dwLen = GetPrivateProfileString(NULL, NULL, NULL, szBuffer, 1024, m_szBaiduCfgPath);
  684. for (int i = 0, j = 0; i < dwLen; i++)
  685. {
  686. if (szBuffer[i] == '\0')
  687. {
  688. TCHAR szData[MAX_PATH] = { 0 };
  689. memcpy(szData, &szBuffer[j], i - j);
  690. if (_tcsicmp(szData, _T("CurStatus")))
  691. {
  692. CountInfo countInfo;
  693. GetPrivateProfileString(szData, _T("APP_ID"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  694. countInfo.app_id = szValue;
  695. GetPrivateProfileString(szData, _T("API_KEY"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  696. countInfo.api_key = szValue;
  697. GetPrivateProfileString(szData, _T("SECRET_KEY"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  698. countInfo.secret_key = szValue;
  699. GetPrivateProfileString(szData, _T("Ret_Count"), NULL, szValue, MAX_PATH, m_szBaiduCfgPath);
  700. countInfo.ret_count = szValue;
  701. bdcfg.list_count.insert(std::pair<std::string, CountInfo>(szData, countInfo));
  702. }
  703. OutputDebugString(szData);
  704. OutputDebugString("\n");
  705. j = i + 1;
  706. }
  707. }
  708. }
  709. void CMainFrame::ReadRsRunCfg(RsRunCfg& rscfg)
  710. {
  711. TCHAR szValue[MAX_PATH] = { 0 };
  712. TCHAR szBuffer[1024] = { 0 };
  713. _stprintf_s(m_szRsCfgPath, _T("%s%s"), Global::g_szPython27Dir, _T("Lib\\site-packages\\ssat_sdk\\config\\resource_run.cfg"));
  714. GetPrivateProfileString(_T("Sound"), _T("sound_list"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  715. rscfg.sound_list = szValue;
  716. int pos1(0), pos2(0);
  717. pos1 = rscfg.sound_list.find_first_of('[');
  718. pos2 = rscfg.sound_list.find_first_of(',');
  719. if (pos1 != std::string::npos && pos2 != std::string::npos)
  720. {
  721. rscfg.sound1 = rscfg.sound_list.substr(pos1 + 1, pos2 - pos1 - 1);
  722. rscfg.sound2 = rscfg.sound_list.substr(pos2 + 1, rscfg.sound_list.length() - pos2 - 2);
  723. }
  724. GetPrivateProfileString(_T("COMM"), _T("issendkeytakepicture_tester"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  725. rscfg.full_cut = szValue;
  726. GetPrivateProfileString(_T("COMM"), _T("tg39_port"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  727. rscfg.tg39_port = szValue;
  728. GetPrivateProfileString(_T("COMM"), _T("serial_communicator_port"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  729. rscfg.tv_port = szValue;
  730. GetPrivateProfileString(_T("COMM"), _T("sat_home"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  731. rscfg.sat_home = szValue;
  732. GetPrivateProfileString(_T("COMM"), _T("sat_result_dir"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  733. rscfg.sat_result_dir = szValue;
  734. GetPrivateProfileString(_T("COMM"), _T("chroma22293"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  735. rscfg.chroma22293 = szValue;
  736. //...
  737. GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  738. rscfg.menutree_chip = szValue;
  739. GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  740. rscfg.menutree_style = szValue;
  741. GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  742. rscfg.menutree_channel = szValue;
  743. // SATHelper
  744. GetPrivateProfileString(_T("SATHelper"), _T("chroma1"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  745. rscfg.chroma1 = szValue;
  746. GetPrivateProfileString(_T("SATHelper"), _T("chroma2"), NULL, szValue, MAX_PATH, m_szRsCfgPath);
  747. rscfg.chroma2 = szValue;
  748. rscfg.bWatchTV = GetPrivateProfileInt(_T("Abnormal"), _T("Watch"), 0, m_szRsCfgPath);
  749. }
  750. void CMainFrame::ReadTreePath()
  751. {
  752. // 必须在ReadRsRunCfg之后调用;
  753. TCHAR szRootDir[MAX_PATH] = { 0 };
  754. _stprintf_s(szRootDir, _T("%s%s"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"));
  755. auto _get_dir = [](std::string dir) {
  756. int nIndex = dir.find_last_of('\\');
  757. if (nIndex != std::string::npos)
  758. {
  759. return dir.substr(nIndex + 1);
  760. }
  761. return dir;
  762. };
  763. auto _get_name = [](std::string dir) {
  764. int pos1 = dir.find_last_of('\\');
  765. if (pos1 != std::string::npos)
  766. {
  767. dir = dir.substr(pos1 + 1);
  768. int pos2 = dir.find_last_of('.');
  769. if (pos2 != std::string::npos)
  770. {
  771. dir = dir.substr(0, pos2);
  772. int pos3 = dir.find("MenuTree_");
  773. if (pos3 != std::string::npos)
  774. {
  775. return dir.substr(strlen("MenuTree_"));
  776. }
  777. }
  778. }
  779. return std::string();
  780. };
  781. // 查找根目录下的目录;
  782. filehelper fh;
  783. STR_VEC vt_dir;
  784. fh.getsubfolder(szRootDir, &vt_dir);
  785. for (auto it : vt_dir)
  786. {
  787. STR_VEC vt_subdir;
  788. std::vector<UITree> vtTree;
  789. fh.getsubfolder(it.c_str(), &vt_subdir);
  790. for (auto ui : vt_subdir)
  791. {
  792. // 查找xls文件;
  793. UITree uitree;
  794. uitree.ui = ui;
  795. fh.getfiles_findout_subfolder(ui.c_str(), _T("*.xls"), &uitree.vtSubUI);
  796. vtTree.push_back(uitree);
  797. }
  798. m_map_tree.insert(std::pair<std::string, std::vector<UITree>>(_get_dir(it), vtTree));
  799. }
  800. // 去除目录级;
  801. for (std::map<std::string, std::vector<UITree>>::iterator it = m_map_tree.begin(); it != m_map_tree.end(); it++)
  802. {
  803. for (std::vector<UITree>::iterator ui = it->second.begin(); ui != it->second.end(); ui++)
  804. {
  805. ui->ui = _get_dir(ui->ui);
  806. for (std::vector<std::string>::iterator xls = ui->vtSubUI.begin(); xls != ui->vtSubUI.end();)
  807. {
  808. *xls = _get_name(xls->c_str());
  809. if (xls->size() == 0)
  810. {
  811. xls = ui->vtSubUI.erase(xls);
  812. }
  813. else
  814. {
  815. xls++;
  816. }
  817. }
  818. }
  819. }
  820. }
  821. void CMainFrame::ParseJson()
  822. {
  823. if (m_rscfg.chroma1.size() == 0)
  824. {
  825. cJSON* pJson = cJSON_Parse(m_rscfg.chroma22293.c_str());
  826. if (pJson)
  827. {
  828. cJSON* pArray = cJSON_GetObjectItem(pJson, "devices");
  829. if (pArray)
  830. {
  831. int nCount = cJSON_GetArraySize(pArray);
  832. for (int i = 0; i < nCount; i++)
  833. {
  834. cJSON* pItem = cJSON_GetArrayItem(pArray, i);
  835. if (pItem)
  836. {
  837. if (i == 0)
  838. m_rscfg.chroma1 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
  839. if (i == 1)
  840. m_rscfg.chroma2 = cJSON_GetObjectItem(pItem, "port") ? cJSON_GetObjectItem(pItem, "port")->valuestring : _T("");
  841. }
  842. }
  843. }
  844. }
  845. // 保存;
  846. WritePrivateProfileString(_T("SATHelper"), _T("chroma1"), m_rscfg.chroma1.c_str(), m_szRsCfgPath);
  847. WritePrivateProfileString(_T("SATHelper"), _T("chroma2"), m_rscfg.chroma2.c_str(), m_szRsCfgPath);
  848. }
  849. }
  850. void CMainFrame::RunDevice()
  851. {
  852. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  853. ASSERT_VALID(pRibbon);
  854. CMFCRibbonButton* pCheck1 = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK1_22293));
  855. CMFCRibbonButton* pCheck2 = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK2_22293));
  856. if (m_rscfg.chroma1.size())
  857. {
  858. CDevice* pdev = new CDevice();
  859. pdev->m_iBaudrate = 115200;
  860. pdev->m_iDatabit = 8;
  861. pdev->m_iPort = atoi(m_rscfg.chroma1.substr(3).c_str());
  862. pdev->m_iParitybit = 0;
  863. pdev->m_iStopbit = 0;
  864. pdev->m_iID = 1;
  865. pdev->m_strDeviceName = "Chroma22293";
  866. pdev->m_iDeviceType = 1;
  867. if (pdev->Open())
  868. {
  869. g_dmap.insert(std::pair<int, CDevice*>(pdev->m_iID, pdev));
  870. }
  871. else
  872. {
  873. delete pdev;
  874. }
  875. }
  876. if (m_rscfg.chroma2.size())
  877. {
  878. CDevice* pdev = new CDevice();
  879. pdev->m_iBaudrate = 115200;
  880. pdev->m_iDatabit = 8;
  881. pdev->m_iPort = atoi(m_rscfg.chroma2.substr(3).c_str());
  882. pdev->m_iParitybit = 0;
  883. pdev->m_iStopbit = 0;
  884. pdev->m_iID = 2;
  885. pdev->m_strDeviceName = "Chroma22293";
  886. pdev->m_iDeviceType = 1;
  887. if (pdev->Open())
  888. {
  889. g_dmap.insert(std::pair<int, CDevice*>(pdev->m_iID, pdev));
  890. }
  891. else
  892. {
  893. delete pdev;
  894. }
  895. }
  896. UpdateData(FALSE);
  897. }
  898. void CMainFrame::InitCombobox_port()
  899. {
  900. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  901. ASSERT_VALID(pRibbon);
  902. CMFCRibbonComboBox* pCommbox1 = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO1_22293));
  903. CMFCRibbonComboBox* pCommbox2 = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO2_22293));
  904. CMFCRibbonComboBox* pCommboxTV = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TVPORT));
  905. CMFCRibbonComboBox* pCommboxTW = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TWPORT));
  906. for (std::vector<std::string>::iterator it = m_vtCOM.begin(); it != m_vtCOM.end(); it++)
  907. {
  908. if (!IsPortInserted(pCommbox1, it->c_str()))
  909. pCommbox1->AddItem(it->c_str());
  910. if (!IsPortInserted(pCommbox2, it->c_str()))
  911. pCommbox2->AddItem(it->c_str());
  912. if (!IsPortInserted(pCommboxTV, it->c_str()))
  913. pCommboxTV->AddItem(it->c_str());
  914. if (!IsPortInserted(pCommboxTW, it->c_str()))
  915. pCommboxTW->AddItem(it->c_str());
  916. }
  917. if (m_rscfg.chroma1.size())
  918. pCommbox1->SelectItem(m_rscfg.chroma1.c_str());
  919. if (m_rscfg.chroma2.size())
  920. pCommbox2->SelectItem(m_rscfg.chroma2.c_str());
  921. if (m_rscfg.tv_port.size())
  922. pCommboxTV->SelectItem(m_rscfg.tv_port.c_str());
  923. if (Global::g_Config.twPort)
  924. {
  925. TCHAR szCom[16] = {0};
  926. _stprintf_s(szCom, _T("COM%d"), Global::g_Config.twPort);
  927. pCommboxTW->SelectItem(szCom);
  928. }
  929. }
  930. BOOL CMainFrame::IsPortInserted(CMFCRibbonComboBox* pCommbox, LPCTSTR lpPort)
  931. {
  932. int nCount = pCommbox->GetCount();
  933. for (int i = 0; i < nCount; i++ )
  934. {
  935. if (_tcsicmp(pCommbox->GetItem(i), lpPort) == 0)
  936. return TRUE;
  937. }
  938. return FALSE;
  939. }
  940. BOOL CMainFrame::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
  941. {
  942. switch (nEventType)
  943. {
  944. // 串口拨掉;
  945. case DBT_DEVICEREMOVECOMPLETE:
  946. break;
  947. // 串口插入;
  948. case DBT_DEVICEARRIVAL:
  949. {
  950. Global::GetSysSerialPort(m_vtCOM);
  951. InitCombobox_port();
  952. }
  953. break;
  954. default:
  955. break;
  956. }
  957. return TRUE;
  958. }
  959. void CMainFrame::InitDevicePanel()
  960. {
  961. ParseJson();
  962. // Ribbon Combobox添加默认项;
  963. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  964. ASSERT_VALID(pRibbon);
  965. CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
  966. if (pOcrCombo)
  967. {
  968. for (auto it : m_bdcfg.list_count)
  969. {
  970. pOcrCombo->AddItem(it.first.c_str());
  971. }
  972. // 选择默认项;
  973. pOcrCombo->SetEditText(m_bdcfg.cur_count.c_str());
  974. }
  975. // 剩余次数;
  976. CMFCRibbonEdit* pOcrCount = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_COUNT));
  977. if (pOcrCount)
  978. {
  979. pOcrCount->SetEditText(m_bdcfg.reset_time.c_str());
  980. }
  981. // 声音等级;
  982. CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
  983. if (pSoundLevel)
  984. {
  985. pSoundLevel->SetEditText(m_rscfg.sound1.c_str());
  986. }
  987. // 全步骤截图;
  988. // CMFCRibbonCheckBox* pCheckFullCut = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_CHECK_FULL_CUT));
  989. // if (pCheckFullCut)
  990. // {
  991. // pCheckFullCut->SetCheck();
  992. // }
  993. // MenuTree;
  994. CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
  995. if (pChipCombo && m_map_tree.size())
  996. {
  997. for (auto it : m_map_tree)
  998. {
  999. pChipCombo->AddItem(it.first.c_str());
  1000. }
  1001. // 选择默认项;
  1002. pChipCombo->SetEditText(m_rscfg.menutree_chip.c_str());
  1003. // UI下拉框;
  1004. CString curText = pChipCombo->GetEditText();
  1005. CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
  1006. for (auto it : m_map_tree.find(curText.GetString())->second)
  1007. {
  1008. pStyleCombo->AddItem(it.ui.c_str());
  1009. }
  1010. pStyleCombo->SetEditText(m_rscfg.menutree_style.c_str());
  1011. CString strCurChip = pChipCombo->GetEditText();
  1012. CString strCurStyle = pStyleCombo->GetEditText();
  1013. _stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
  1014. }
  1015. // if (Global::g_Config.enableTW)
  1016. // TW::OpenDevice(Global::g_Config.twPort, 115200, 8, 0, 0);
  1017. // 启动设备;
  1018. Global::GetSysSerialPort(m_vtCOM);
  1019. InitCombobox_port();
  1020. RunDevice();
  1021. }
  1022. void CMainFrame::OnCheckFullCut()
  1023. {
  1024. // TODO: 在此添加命令处理程序代码
  1025. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1026. ASSERT_VALID(pRibbon);
  1027. CMFCRibbonButton* pFullCutCheck = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK_FULL_CUT));
  1028. if (pFullCutCheck)
  1029. {
  1030. WritePrivateProfileString(_T("COMM"), _T("issendkeytakepicture_tester"), !pFullCutCheck->IsChecked() ? _T("True") : _T("False"), m_szRsCfgPath);
  1031. m_rscfg.full_cut = !pFullCutCheck->IsChecked() ? _T("True") : _T("False");
  1032. }
  1033. }
  1034. void CMainFrame::OnUpdateCheckFullCut(CCmdUI* pCmdUI)
  1035. {
  1036. // TODO: 在此添加命令更新用户界面处理程序代码
  1037. pCmdUI->SetCheck(!_tcsicmp(m_rscfg.full_cut.c_str(), _T("True")));
  1038. }
  1039. void CMainFrame::OnHadSound()
  1040. {
  1041. // TODO: 在此添加命令处理程序代码
  1042. std::thread t([&]() {
  1043. // 强制stdion, stdout和stderr完全无缓冲:python -u
  1044. TCHAR szCommandLine[MAX_PATH] = { 0 };
  1045. _stprintf_s(szCommandLine, _T("python -W ignore \"%s%s\" >>%ssound_log.txt"), Global::g_szPython27Dir, _T("Lib\\site-packages\\ssat_sdk\\sound_init.py"), Global::g_szCurModuleDir);
  1046. WinExec(szCommandLine, SW_HIDE);
  1047. OutputDebugString(szCommandLine);
  1048. // 等待10秒;
  1049. Sleep(30000);
  1050. ReadRsRunCfg(m_rscfg);
  1051. // Ribbon Combobox添加默认项;
  1052. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1053. CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
  1054. if (pSoundLevel)
  1055. {
  1056. pSoundLevel->SetEditText(m_rscfg.sound1.c_str());
  1057. }
  1058. });
  1059. t.detach();
  1060. }
  1061. void CMainFrame::OnUpdateHadSound(CCmdUI* pCmdUI)
  1062. {
  1063. // TODO: 在此添加命令更新用户界面处理程序代码
  1064. }
  1065. void CMainFrame::OnDefSound()
  1066. {
  1067. // TODO: 在此添加命令处理程序代码
  1068. TCHAR szValue[MAX_PATH] = { 0 };
  1069. TCHAR szBuffer[1024] = { 0 };
  1070. _stprintf_s(m_szRsCfgPath, _T("%s%s"), Global::g_szPython27Dir, _T("Lib\\site-packages\\ssat_sdk\\config\\resource_run.cfg"));
  1071. WritePrivateProfileString(_T("Sound"), _T("sound_list"), _T("[2000,2000]"), m_szRsCfgPath);
  1072. // Ribbon Combobox添加默认项;
  1073. m_rscfg.sound1 = _T("2000");
  1074. m_rscfg.sound2 = _T("2000");
  1075. m_rscfg.sound_list = _T("[2000,2000]");
  1076. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1077. CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
  1078. if (pSoundLevel)
  1079. {
  1080. pSoundLevel->SetEditText(m_rscfg.sound1.c_str());
  1081. }
  1082. }
  1083. void CMainFrame::OnUpdateDefSound(CCmdUI* pCmdUI)
  1084. {
  1085. // TODO: 在此添加命令更新用户界面处理程序代码
  1086. }
  1087. void CMainFrame::OnComboxOcr()
  1088. {
  1089. // TODO: 在此添加命令处理程序代码
  1090. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1091. ASSERT_VALID(pRibbon);
  1092. CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
  1093. if (pOcrCombo)
  1094. {
  1095. // 获取当前文本项;
  1096. CString strOcr = pOcrCombo->GetEditText();
  1097. WritePrivateProfileString(_T("CurStatus"), _T("Cur_Count"), strOcr, m_szBaiduCfgPath);
  1098. }
  1099. }
  1100. void CMainFrame::OnUpdateComboxOcr(CCmdUI* pCmdUI)
  1101. {
  1102. // TODO: 在此添加命令更新用户界面处理程序代码
  1103. }
  1104. void CMainFrame::OnComboProduct()
  1105. {
  1106. // TODO: 在此添加命令处理程序代码
  1107. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1108. ASSERT_VALID(pRibbon);
  1109. CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
  1110. if (pChipCombo)
  1111. {
  1112. // UI下拉框;
  1113. CString curText = pChipCombo->GetEditText();
  1114. CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
  1115. pStyleCombo->RemoveAllItems();
  1116. for (auto it : m_map_tree.find(curText.GetString())->second)
  1117. {
  1118. pStyleCombo->AddItem(it.ui.c_str());
  1119. }
  1120. pStyleCombo->SelectItem(0);
  1121. // SUBUI下拉框;
  1122. CString strUIName = pStyleCombo->GetEditText();
  1123. CMFCRibbonComboBox* pSubUICombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_SUBUI));
  1124. pSubUICombo->RemoveAllItems();
  1125. std::vector<UITree>& ui = m_map_tree.find(curText.GetString())->second;
  1126. for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++)
  1127. {
  1128. if (_tcsicmp(strUIName.GetString(), it->ui.c_str()) == 0)
  1129. {
  1130. if (it->vtSubUI.size() == 0)
  1131. break;
  1132. for (auto SubUI : it->vtSubUI)
  1133. {
  1134. pSubUICombo->AddItem(SubUI.c_str());
  1135. }
  1136. pSubUICombo->SelectItem(0);
  1137. }
  1138. }
  1139. // 保存结果;
  1140. CString strCurChip = pChipCombo->GetEditText();
  1141. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), strCurChip, m_szRsCfgPath);
  1142. CString strCurStyle = pStyleCombo->GetEditText();
  1143. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strCurStyle, m_szRsCfgPath);
  1144. CString strSubStyle = pSubUICombo->GetEditText();
  1145. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
  1146. _stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
  1147. }
  1148. }
  1149. void CMainFrame::OnUpdateComboProduct(CCmdUI* pCmdUI)
  1150. {
  1151. // TODO: 在此添加命令更新用户界面处理程序代码
  1152. }
  1153. void CMainFrame::OnComboUi()
  1154. {
  1155. // TODO: 在此添加命令处理程序代码
  1156. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1157. ASSERT_VALID(pRibbon);
  1158. CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
  1159. if (pStyleCombo)
  1160. {
  1161. CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
  1162. // UI下拉框;
  1163. CString strCurChip = pChipCombo->GetEditText();
  1164. // SUBUI下拉框;
  1165. CString strUIName = pStyleCombo->GetEditText();
  1166. CMFCRibbonComboBox* pSubUICombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_SUBUI));
  1167. pSubUICombo->RemoveAllItems();
  1168. std::vector<UITree>& ui = m_map_tree.find(strCurChip.GetString())->second;
  1169. for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++)
  1170. {
  1171. if (_tcsicmp(strUIName.GetString(), it->ui.c_str()) == 0)
  1172. {
  1173. if (it->vtSubUI.size() == 0)
  1174. break;
  1175. for (auto SubUI : it->vtSubUI)
  1176. {
  1177. pSubUICombo->AddItem(SubUI.c_str());
  1178. }
  1179. pSubUICombo->SelectItem(0);
  1180. }
  1181. }
  1182. // UI下拉框;
  1183. CString strCurStyle = pStyleCombo->GetEditText();
  1184. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strCurStyle, m_szRsCfgPath);
  1185. CString strSubStyle = pSubUICombo->GetEditText();
  1186. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
  1187. _stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
  1188. }
  1189. }
  1190. void CMainFrame::OnUpdateComboUi(CCmdUI* pCmdUI)
  1191. {
  1192. // TODO: 在此添加命令更新用户界面处理程序代码
  1193. }
  1194. void CMainFrame::OnComboSubUi()
  1195. {
  1196. // TODO: 在此添加命令处理程序代码
  1197. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1198. ASSERT_VALID(pRibbon);
  1199. CMFCRibbonComboBox* pSubUICombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_SUBUI));
  1200. if (pSubUICombo)
  1201. {
  1202. // UI下拉框;
  1203. CString strSubStyle = pSubUICombo->GetEditText();
  1204. WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strSubStyle, m_szRsCfgPath);
  1205. }
  1206. }
  1207. void CMainFrame::OnUpdateComboSubUi(CCmdUI* pCmdUI)
  1208. {
  1209. // TODO: 在此添加命令更新用户界面处理程序代码
  1210. }
  1211. void CMainFrame::OnCombo1_22293()
  1212. {
  1213. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1214. ASSERT_VALID(pRibbon);
  1215. CMFCRibbonComboBox* pCombobx1 = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO1_22293));
  1216. // 保存到配置文件中;
  1217. int nCurSel = pCombobx1->GetCurSel();
  1218. if (nCurSel != CB_ERR)
  1219. {
  1220. CString strChroma1 = pCombobx1->GetEditText();
  1221. WritePrivateProfileString(_T("SATHelper"), _T("chroma1"), strChroma1, m_szRsCfgPath);
  1222. m_rscfg.chroma1 = strChroma1.GetString();
  1223. if (g_dmap.find(1) == g_dmap.end())
  1224. {
  1225. CDevice* pdev = new CDevice();
  1226. pdev->m_iBaudrate = 115200;
  1227. pdev->m_iDatabit = 8;
  1228. pdev->m_iPort = atoi(m_rscfg.chroma1.substr(3).c_str());
  1229. pdev->m_iParitybit = 0;
  1230. pdev->m_iStopbit = 1;
  1231. pdev->m_iID = 1;
  1232. pdev->m_strDeviceName = "Chroma22293";
  1233. pdev->m_iDeviceType = 1;
  1234. if (pdev->Open())
  1235. {
  1236. g_dmap.insert(std::pair<int, CDevice*>(pdev->m_iID, pdev));
  1237. }
  1238. else
  1239. {
  1240. delete pdev;
  1241. }
  1242. }
  1243. else
  1244. {
  1245. CDevice* pDev = g_dmap.find(1)->second;
  1246. int port = atoi(strChroma1.Right(1).GetString());
  1247. if (pDev->m_iPort != port)
  1248. {
  1249. pDev->m_iPort = port;
  1250. pDev->Close();
  1251. pDev->Open();
  1252. }
  1253. }
  1254. }
  1255. }
  1256. void CMainFrame::OnUpdateCombo1_22293(CCmdUI* pCmdUI)
  1257. {
  1258. // TODO: 在此添加命令更新用户界面处理程序代码
  1259. }
  1260. void CMainFrame::OnCombo2_22293()
  1261. {
  1262. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1263. ASSERT_VALID(pRibbon);
  1264. CMFCRibbonComboBox* pCombobx2 = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO2_22293));
  1265. // 保存到配置文件中;
  1266. int nCurSel = pCombobx2->GetCurSel();
  1267. if (nCurSel != CB_ERR)
  1268. {
  1269. CString strChroma2 = pCombobx2->GetEditText();
  1270. WritePrivateProfileString(_T("SATHelper"), _T("chroma2"), strChroma2, m_szRsCfgPath);
  1271. m_rscfg.chroma2 = strChroma2.GetString();
  1272. if (g_dmap.find(2) == g_dmap.end())
  1273. {
  1274. CDevice* pdev = new CDevice();
  1275. pdev->m_iBaudrate = 115200;
  1276. pdev->m_iDatabit = 8;
  1277. pdev->m_iPort = atoi(m_rscfg.chroma2.substr(3).c_str());
  1278. pdev->m_iParitybit = 0;
  1279. pdev->m_iStopbit = 1;
  1280. pdev->m_iID = 2;
  1281. pdev->m_strDeviceName = "Chroma22293";
  1282. pdev->m_iDeviceType = 1;
  1283. if (pdev->Open())
  1284. {
  1285. g_dmap.insert(std::pair<int, CDevice*>(pdev->m_iID, pdev));
  1286. }
  1287. else
  1288. {
  1289. delete pdev;
  1290. }
  1291. }
  1292. else
  1293. {
  1294. CDevice* pDev = g_dmap.find(2)->second;
  1295. int port = atoi(strChroma2.Right(1).GetString());
  1296. if (pDev->m_iPort != port)
  1297. {
  1298. pDev->m_iPort = port;
  1299. pDev->Close();
  1300. pDev->Open();
  1301. }
  1302. }
  1303. }
  1304. }
  1305. void CMainFrame::OnUpdateCombo2_22293(CCmdUI* pCmdUI)
  1306. {
  1307. // TODO: 在此添加命令更新用户界面处理程序代码
  1308. }
  1309. void CMainFrame::OnCheck1_22293()
  1310. {
  1311. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1312. ASSERT_VALID(pRibbon);
  1313. CMFCRibbonButton* pCheck1 = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK1_22293));
  1314. // TODO: 在此添加命令处理程序代码
  1315. if (g_dmap.find(1) != g_dmap.end())
  1316. {
  1317. if (pCheck1->IsChecked())
  1318. {
  1319. g_dmap.find(1)->second->Close();
  1320. }
  1321. else
  1322. {
  1323. g_dmap.find(1)->second->Open();
  1324. }
  1325. }
  1326. }
  1327. void CMainFrame::OnUpdateCheck1_22293(CCmdUI* pCmdUI)
  1328. {
  1329. // TODO: 在此添加命令更新用户界面处理程序代码
  1330. if (g_dmap.find(1) != g_dmap.end())
  1331. pCmdUI->SetCheck(g_dmap.find(1)->second->IsOpen());
  1332. else
  1333. pCmdUI->SetCheck(FALSE);
  1334. }
  1335. void CMainFrame::OnCheck2_22293()
  1336. {
  1337. // TODO: 在此添加命令处理程序代码
  1338. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1339. ASSERT_VALID(pRibbon);
  1340. CMFCRibbonButton* pCheck2 = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK2_22293));
  1341. // TODO: 在此添加命令处理程序代码
  1342. if (g_dmap.find(2) != g_dmap.end())
  1343. {
  1344. if (pCheck2->IsChecked())
  1345. {
  1346. g_dmap.find(2)->second->Close();
  1347. }
  1348. else
  1349. {
  1350. g_dmap.find(2)->second->Open();
  1351. }
  1352. }
  1353. }
  1354. void CMainFrame::OnUpdateCheck2_22293(CCmdUI* pCmdUI)
  1355. {
  1356. // TODO: 在此添加命令更新用户界面处理程序代码
  1357. if (g_dmap.find(2) != g_dmap.end())
  1358. pCmdUI->SetCheck(g_dmap.find(2)->second->IsOpen());
  1359. else
  1360. pCmdUI->SetCheck(FALSE);
  1361. }
  1362. void CMainFrame::OnCombo2Tv()
  1363. {
  1364. // TODO: 在此添加命令处理程序代码
  1365. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1366. ASSERT_VALID(pRibbon);
  1367. CMFCRibbonComboBox* pCombobxTV = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TVPORT));
  1368. // 保存到配置文件中;
  1369. int nCurSel = pCombobxTV->GetCurSel();
  1370. if (nCurSel != CB_ERR)
  1371. {
  1372. CString strTVPort = pCombobxTV->GetEditText();
  1373. WritePrivateProfileString(_T("COMM"), _T("serial_communicator_port"), strTVPort, m_szRsCfgPath);
  1374. m_rscfg.tv_port = strTVPort.GetString();
  1375. }
  1376. }
  1377. void CMainFrame::OnUpdateCombo2Tv(CCmdUI* pCmdUI)
  1378. {
  1379. // TODO: 在此添加命令更新用户界面处理程序代码
  1380. }
  1381. void CMainFrame::OnCheckWatchtv()
  1382. {
  1383. // TODO: 在此添加命令处理程序代码
  1384. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1385. ASSERT_VALID(pRibbon);
  1386. CMFCRibbonButton* pCheckWatchTV = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK_WATCHTV));
  1387. m_rscfg.bWatchTV = !pCheckWatchTV->IsChecked();
  1388. WritePrivateProfileString(_T("Abnormal"), _T("Watch"), m_rscfg.bWatchTV ? _T("1") : _T("0"), m_szRsCfgPath);
  1389. }
  1390. void CMainFrame::OnUpdateCheckWatchtv(CCmdUI* pCmdUI)
  1391. {
  1392. // TODO: 在此添加命令更新用户界面处理程序代码
  1393. pCmdUI->SetCheck(m_rscfg.bWatchTV);
  1394. }
  1395. void CMainFrame::OnCheckEnabletw()
  1396. {
  1397. // TODO: 在此添加命令处理程序代码
  1398. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1399. ASSERT_VALID(pRibbon);
  1400. CMFCRibbonButton* pCheckEnableTW = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK_ENABLETW));
  1401. Global::g_Config.enableTW = !pCheckEnableTW->IsChecked();
  1402. WritePrivateProfileString(_T("SATHelper"), _T("enableTW"), Global::g_Config.enableTW ? _T("1") : _T("0"), Global::g_szConfig);
  1403. // 同时写入resource_run.cfg中:[devices].[rcudevice_selected]
  1404. WritePrivateProfileString(_T("devices"), _T("rcudevice_selected"), Global::g_Config.enableTW ? _T("tw") : _T("redrat4"), m_szRsCfgPath);
  1405. if (Global::g_Config.enableTW)
  1406. TW::OpenDevice(Global::g_Config.twPort, 115200, 8, 0, 0);
  1407. else
  1408. TW::CloseDevice();
  1409. m_wndIRControl.LoadSignals();
  1410. m_wndIRControl.ReLoadSignalXml();
  1411. }
  1412. void CMainFrame::OnUpdateCheckEnabletw(CCmdUI* pCmdUI)
  1413. {
  1414. // TODO: 在此添加命令更新用户界面处理程序代码
  1415. pCmdUI->SetCheck(Global::g_Config.enableTW);
  1416. }
  1417. void CMainFrame::OnComboTwport()
  1418. {
  1419. // TODO: 在此添加命令处理程序代码
  1420. // TODO: 在此添加命令处理程序代码
  1421. CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
  1422. ASSERT_VALID(pRibbon);
  1423. CMFCRibbonComboBox* pCombobxTW = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TWPORT));
  1424. // 保存到配置文件中;
  1425. int nCurSel = pCombobxTW->GetCurSel();
  1426. if (nCurSel != CB_ERR)
  1427. {
  1428. CString strTWPort = pCombobxTW->GetEditText();
  1429. Global::g_Config.twPort = _ttol(strTWPort.Mid(3).GetString());
  1430. WritePrivateProfileString(_T("TestWizard"), _T("Com"), strTWPort.Mid(3).GetString(), Global::g_szConfig);
  1431. if (Global::g_Config.enableTW) {
  1432. TW::CloseDevice();
  1433. TW::OpenDevice(Global::g_Config.twPort, 115200, 8, 0, 0);
  1434. }
  1435. }
  1436. }
  1437. void CMainFrame::OnUpdateComboTwport(CCmdUI* pCmdUI)
  1438. {
  1439. // TODO: 在此添加命令更新用户界面处理程序代码
  1440. }
  1441. void CMainFrame::OnTraymenuLogin()
  1442. {
  1443. // TODO: 在此添加命令处理程序代码
  1444. CDlgLogin dlg;
  1445. if ( dlg.DoModal() )
  1446. {
  1447. }
  1448. }