MainFrm.cpp 62 KB

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