MainFrm.cpp 52 KB

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