MainFrm.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  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 "VideoCapture.h"
  16. #include "MainFrm.h"
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #endif
  20. #if USE_TRAYICON
  21. #define WM_MY_TRAY_NOTIFICATION WM_USER + 108
  22. const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("UB530"));
  23. #endif
  24. // CMainFrame
  25. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)
  26. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
  27. ON_WM_CREATE()
  28. ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
  29. ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
  30. ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
  31. ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
  32. ON_COMMAND(ID_TOOLS_OPTIONS, &CMainFrame::OnOptions)
  33. ON_COMMAND(ID_FILE_PRINT, &CMainFrame::OnFilePrint)
  34. ON_COMMAND(ID_FILE_PRINT_DIRECT, &CMainFrame::OnFilePrint)
  35. ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CMainFrame::OnFilePrintPreview)
  36. ON_UPDATE_COMMAND_UI(ID_FILE_PRINT_PREVIEW, &CMainFrame::OnUpdateFilePrintPreview)
  37. #if USE_TRAYICON
  38. ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)
  39. ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated)
  40. #endif
  41. ON_WM_SETTINGCHANGE()
  42. ON_COMMAND(ID_TRAYMENU_EXIT, &CMainFrame::OnTraymenuExit)
  43. ON_MESSAGE(MSG_STATUS_BAR, &CMainFrame::OnMsgStatusBar)
  44. ON_WM_CLOSE()
  45. ON_WM_GETMINMAXINFO()
  46. END_MESSAGE_MAP()
  47. // CMainFrame 构造/析构
  48. CMainFrame::CMainFrame() noexcept :m_trayIcon(IDR_MAINFRAME)
  49. {
  50. // TODO: 在此添加成员初始化代码
  51. theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2008);
  52. #if USE_TRAYICON
  53. m_isNotify = TRUE;
  54. m_bNoticeTray = TRUE;
  55. #endif
  56. }
  57. CMainFrame::~CMainFrame()
  58. {
  59. }
  60. #if USE_TRAYICON
  61. void CMainFrame::InitTrayIcon()
  62. {
  63. m_trayIcon.SetNotificationWnd(this, WM_MY_TRAY_NOTIFICATION);
  64. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530"));
  65. m_trayIcon.SetIconInfos(IDR_MAINFRAME, IDR_MAINFRAME, IDR_MAINFRAME);
  66. m_trayIcon.SetDefaultTip(_T("UB530"));
  67. }
  68. LRESULT CMainFrame::OnTaskBarCreated(WPARAM wp, LPARAM lp)
  69. {
  70. Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid);
  71. return 0;
  72. }
  73. // Handle notification from tray icon: display a message.
  74. LRESULT CMainFrame::OnTrayNotification(WPARAM uID, LPARAM lEvent)
  75. {
  76. if (m_isNotify)
  77. {
  78. static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE",
  79. "WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK",
  80. "WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK",
  81. "WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" };
  82. }
  83. if (uID != IDR_MAINFRAME)
  84. return m_trayIcon.OnTrayNotification(uID, lEvent);
  85. switch (lEvent)
  86. {
  87. case WM_RBUTTONUP:
  88. TrayRight();
  89. break;
  90. case WM_LBUTTONUP:
  91. break;
  92. case WM_LBUTTONDBLCLK:
  93. TaskNotifyIcon();
  94. break;
  95. default:
  96. break;
  97. }
  98. return 0;
  99. }
  100. void CMainFrame::TrayRight()
  101. {
  102. CMenu menu;
  103. if (!menu.LoadMenu(IDR_MAINFRAME))
  104. return;
  105. CMenu* pSubMenu = menu.GetSubMenu(4);
  106. if (!pSubMenu)
  107. return;
  108. CPoint point;
  109. GetCursorPos(&point);
  110. ::SetForegroundWindow(m_hWnd);
  111. pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
  112. }
  113. void CMainFrame::TaskNotifyIcon()
  114. {
  115. if (!m_bNoticeTray)
  116. {
  117. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序"));
  118. ShowWindow(SW_SHOWNORMAL);
  119. m_bNoticeTray = TRUE;
  120. }
  121. else
  122. {
  123. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序"));
  124. ShowWindow(SW_HIDE);
  125. m_bNoticeTray = FALSE;
  126. }
  127. }
  128. #endif
  129. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  130. {
  131. if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
  132. return -1;
  133. #if USE_TRAYICON
  134. InitTrayIcon();
  135. #endif
  136. BOOL bNameValid;
  137. m_wndRibbonBar.Create(this);
  138. m_wndRibbonBar.LoadFromResource(IDR_RIBBON);
  139. #if !__QUICKACCESS_COMMAND__
  140. // 添加以下代码段,禁用快速启动栏;
  141. CMFCRibbonQuickAccessToolBar* pQAToolbar = m_wndRibbonBar.GetQuickAccessToolbar();
  142. pQAToolbar->RemoveAll();
  143. #endif
  144. if (!m_wndStatusBar.Create(this))
  145. {
  146. TRACE0("未能创建状态栏\n");
  147. return -1; // 未能创建
  148. }
  149. CString strTitlePane1;
  150. CString strTitlePane2;
  151. bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
  152. ASSERT(bNameValid);
  153. bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
  154. ASSERT(bNameValid);
  155. m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
  156. m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);
  157. // 启用 Visual Studio 2005 样式停靠窗口行为
  158. CDockingManager::SetDockingMode(DT_SMART);
  159. // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
  160. EnableAutoHidePanes(CBRS_ALIGN_ANY);
  161. #if __OUTLOOKBAR__
  162. // 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
  163. EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
  164. // 创建并设置“Outlook”导航栏:
  165. if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
  166. {
  167. TRACE0("未能创建导航窗格\n");
  168. return -1; // 未能创建
  169. }
  170. #endif
  171. #if __CAPTIONBAR__
  172. // 创建标题栏:
  173. if (!CreateCaptionBar())
  174. {
  175. TRACE0("未能创建标题栏\n");
  176. return -1; // 未能创建
  177. }
  178. #endif
  179. #if __OUTLOOKBAR__
  180. // 已创建 Outlook 栏,应允许在左侧停靠。
  181. EnableDocking(CBRS_ALIGN_LEFT);
  182. EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
  183. #endif
  184. // 加载菜单项图像(不在任何标准工具栏上):
  185. CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
  186. #if __DOCKINGBAR__
  187. // 创建停靠窗口
  188. if (!CreateDockingWindows())
  189. {
  190. TRACE0("未能创建停靠窗口\n");
  191. return -1;
  192. }
  193. #if __FC_WIN__
  194. m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
  195. m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
  196. DockPane(&m_wndFileView);
  197. #endif
  198. #if __FC_WIN__
  199. CDockablePane* pTabbedBar = nullptr;
  200. m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
  201. #endif
  202. #if __OUT_PUT_WIN__
  203. m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
  204. DockPane(&m_wndOutput);
  205. #endif
  206. m_wndIRControl.EnableDocking(CBRS_ALIGN_ANY);
  207. DockPane(&m_wndIRControl);
  208. #endif
  209. // 基于持久值设置视觉管理器和样式
  210. OnApplicationLook(theApp.m_nAppLook);
  211. return 0;
  212. }
  213. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  214. {
  215. if( !CFrameWndEx::PreCreateWindow(cs) )
  216. return FALSE;
  217. // TODO: 在此处通过修改
  218. // CREATESTRUCT cs 来修改窗口类或样式
  219. //不把子框架标题添加到主框架标题(主框架中就不会再处理WM_SETTEXT消息)
  220. cs.style &= ~FWS_ADDTOTITLE;
  221. cs.cx = 640;
  222. cs.cy = 480;
  223. return TRUE;
  224. }
  225. #if __DOCKINGBAR__
  226. BOOL CMainFrame::CreateDockingWindows()
  227. {
  228. BOOL bNameValid;
  229. #if __FC_WIN__
  230. // 创建类视图
  231. CString strClassView;
  232. bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
  233. ASSERT(bNameValid);
  234. 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))
  235. {
  236. TRACE0("未能创建“类视图”窗口\n");
  237. return FALSE; // 未能创建
  238. }
  239. // 创建文件视图
  240. CString strFileView;
  241. bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
  242. ASSERT(bNameValid);
  243. 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))
  244. {
  245. TRACE0("未能创建“文件视图”窗口\n");
  246. return FALSE; // 未能创建
  247. }
  248. #endif
  249. #if __OUT_PUT_WIN__
  250. // 创建输出窗口
  251. CString strOutputWnd;
  252. bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
  253. ASSERT(bNameValid);
  254. 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))
  255. {
  256. TRACE0("未能创建输出窗口\n");
  257. return FALSE; // 未能创建
  258. }
  259. #endif
  260. // 创建遥控器窗口
  261. CString strPropertiesWnd = _T("遥控器");
  262. if (!m_wndIRControl.Create(strPropertiesWnd, this, CRect(0, 0, 230, 350), TRUE, ID_VIEW_PROPERTIESWND,
  263. WS_CHILD | WS_VISIBLE | /*WS_VSCROLL |*/ WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI ))
  264. {
  265. TRACE0("未能创建“遥控器”窗口\n");
  266. return FALSE; // 未能创建
  267. }
  268. SetDockingWindowIcons(theApp.m_bHiColorIcons);
  269. return TRUE;
  270. }
  271. void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
  272. {
  273. #if __FC_WIN__
  274. HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  275. m_wndFileView.SetIcon(hFileViewIcon, FALSE);
  276. HICON hClassViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_CLASS_VIEW_HC : IDI_CLASS_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  277. m_wndClassView.SetIcon(hClassViewIcon, FALSE);
  278. #endif
  279. #if __OUT_PUT_WIN__
  280. HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  281. m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
  282. #endif
  283. HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  284. m_wndIRControl.SetIcon(hPropertiesBarIcon, FALSE);
  285. }
  286. #endif
  287. #if __OUTLOOKBAR__
  288. BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth)
  289. {
  290. bar.SetMode2003();
  291. BOOL bNameValid;
  292. CString strTemp;
  293. bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
  294. ASSERT(bNameValid);
  295. if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
  296. {
  297. return FALSE; // 未能创建
  298. }
  299. CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
  300. if (pOutlookBar == nullptr)
  301. {
  302. ASSERT(FALSE);
  303. return FALSE;
  304. }
  305. pOutlookBar->EnableInPlaceEdit(TRUE);
  306. static UINT uiPageID = 1;
  307. // 可浮动,可自动隐藏,可调整大小,但不能关闭
  308. DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
  309. CRect rectDummy(0, 0, 0, 0);
  310. const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
  311. tree.Create(dwTreeStyle, rectDummy, &bar, 1200);
  312. bNameValid = strTemp.LoadString(IDS_FOLDERS);
  313. ASSERT(bNameValid);
  314. pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle);
  315. calendar.Create(rectDummy, &bar, 1201);
  316. bNameValid = strTemp.LoadString(IDS_CALENDAR);
  317. ASSERT(bNameValid);
  318. pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle);
  319. bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  320. pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24);
  321. pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16);
  322. pOutlookBar->RecalcLayout();
  323. BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE);
  324. CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation);
  325. bar.SetButtonsFont(&afxGlobalData.fontBold);
  326. // bar.ShowCaret();
  327. // bar.ShowOwnedPopups();
  328. // bar.ShowPane(TRUE, FALSE, TRUE);
  329. //
  330. // bar.ShowWindow(SW_SHOW);
  331. return TRUE;
  332. }
  333. #endif
  334. #if __CAPTIONBAR__
  335. BOOL CMainFrame::CreateCaptionBar()
  336. {
  337. if (!m_wndCaptionBar.Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this, ID_VIEW_CAPTION_BAR, -1, TRUE))
  338. {
  339. TRACE0("未能创建标题栏\n");
  340. return FALSE;
  341. }
  342. BOOL bNameValid;
  343. CString strTemp, strTemp2;
  344. bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON);
  345. ASSERT(bNameValid);
  346. m_wndCaptionBar.SetButton(strTemp, ID_TOOLS_OPTIONS, CMFCCaptionBar::ALIGN_LEFT, FALSE);
  347. bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON_TIP);
  348. ASSERT(bNameValid);
  349. m_wndCaptionBar.SetButtonToolTip(strTemp);
  350. bNameValid = strTemp.LoadString(IDS_CAPTION_TEXT);
  351. ASSERT(bNameValid);
  352. m_wndCaptionBar.SetText(strTemp, CMFCCaptionBar::ALIGN_LEFT);
  353. m_wndCaptionBar.SetBitmap(IDB_INFO, RGB(255, 255, 255), FALSE, CMFCCaptionBar::ALIGN_LEFT);
  354. bNameValid = strTemp.LoadString(IDS_CAPTION_IMAGE_TIP);
  355. ASSERT(bNameValid);
  356. bNameValid = strTemp2.LoadString(IDS_CAPTION_IMAGE_TEXT);
  357. ASSERT(bNameValid);
  358. m_wndCaptionBar.SetImageToolTip(strTemp, strTemp2);
  359. return TRUE;
  360. }
  361. #endif
  362. // CMainFrame 诊断
  363. #ifdef _DEBUG
  364. void CMainFrame::AssertValid() const
  365. {
  366. CFrameWndEx::AssertValid();
  367. }
  368. void CMainFrame::Dump(CDumpContext& dc) const
  369. {
  370. CFrameWndEx::Dump(dc);
  371. }
  372. #endif //_DEBUG
  373. // CMainFrame 消息处理程序
  374. void CMainFrame::OnApplicationLook(UINT id)
  375. {
  376. CWaitCursor wait;
  377. theApp.m_nAppLook = id;
  378. switch (theApp.m_nAppLook)
  379. {
  380. case ID_VIEW_APPLOOK_WIN_2000:
  381. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
  382. m_wndRibbonBar.SetWindows7Look(FALSE);
  383. break;
  384. case ID_VIEW_APPLOOK_OFF_XP:
  385. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
  386. m_wndRibbonBar.SetWindows7Look(FALSE);
  387. break;
  388. case ID_VIEW_APPLOOK_WIN_XP:
  389. CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
  390. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
  391. m_wndRibbonBar.SetWindows7Look(FALSE);
  392. break;
  393. case ID_VIEW_APPLOOK_OFF_2003:
  394. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
  395. CDockingManager::SetDockingMode(DT_SMART);
  396. m_wndRibbonBar.SetWindows7Look(FALSE);
  397. break;
  398. case ID_VIEW_APPLOOK_VS_2005:
  399. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
  400. CDockingManager::SetDockingMode(DT_SMART);
  401. m_wndRibbonBar.SetWindows7Look(FALSE);
  402. break;
  403. case ID_VIEW_APPLOOK_VS_2008:
  404. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008));
  405. CDockingManager::SetDockingMode(DT_SMART);
  406. m_wndRibbonBar.SetWindows7Look(FALSE);
  407. break;
  408. case ID_VIEW_APPLOOK_WINDOWS_7:
  409. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));
  410. CDockingManager::SetDockingMode(DT_SMART);
  411. m_wndRibbonBar.SetWindows7Look(TRUE);
  412. break;
  413. default:
  414. switch (theApp.m_nAppLook)
  415. {
  416. case ID_VIEW_APPLOOK_OFF_2007_BLUE:
  417. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
  418. break;
  419. case ID_VIEW_APPLOOK_OFF_2007_BLACK:
  420. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
  421. break;
  422. case ID_VIEW_APPLOOK_OFF_2007_SILVER:
  423. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
  424. break;
  425. case ID_VIEW_APPLOOK_OFF_2007_AQUA:
  426. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
  427. break;
  428. }
  429. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
  430. CDockingManager::SetDockingMode(DT_SMART);
  431. m_wndRibbonBar.SetWindows7Look(FALSE);
  432. }
  433. #if __DOCKINGBAR__
  434. #if __OUT_PUT_WIN__
  435. m_wndOutput.UpdateFonts();
  436. #endif
  437. #endif
  438. RedrawWindow(nullptr, nullptr, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
  439. theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
  440. }
  441. void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
  442. {
  443. pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
  444. }
  445. void CMainFrame::OnViewCaptionBar()
  446. {
  447. #if __CAPTIONBAR__
  448. m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW);
  449. RecalcLayout(FALSE);
  450. #endif
  451. }
  452. void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI)
  453. {
  454. #if __CAPTIONBAR__
  455. pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
  456. #endif
  457. }
  458. void CMainFrame::OnOptions()
  459. {
  460. CMFCRibbonCustomizeDialog *pOptionsDlg = new CMFCRibbonCustomizeDialog(this, &m_wndRibbonBar);
  461. ASSERT(pOptionsDlg != nullptr);
  462. pOptionsDlg->DoModal();
  463. delete pOptionsDlg;
  464. }
  465. void CMainFrame::OnFilePrint()
  466. {
  467. if (IsPrintPreview())
  468. {
  469. PostMessage(WM_COMMAND, AFX_ID_PREVIEW_PRINT);
  470. }
  471. }
  472. void CMainFrame::OnFilePrintPreview()
  473. {
  474. if (IsPrintPreview())
  475. {
  476. PostMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE); // 强制关闭“打印预览”模式
  477. }
  478. }
  479. void CMainFrame::OnUpdateFilePrintPreview(CCmdUI* pCmdUI)
  480. {
  481. pCmdUI->SetCheck(IsPrintPreview());
  482. }
  483. void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
  484. {
  485. CFrameWndEx::OnSettingChange(uFlags, lpszSection);
  486. #if __DOCKINGBAR__
  487. #if __OUT_PUT_WIN__
  488. m_wndOutput.UpdateFonts();
  489. #endif
  490. #endif
  491. }
  492. LRESULT CMainFrame::OnMsgStatusBar(WPARAM wParam, LPARAM lParam)
  493. {
  494. CString strMSG = *(CString*)wParam;
  495. int uId = lParam;
  496. SetRibbonStatusBarText(strMSG, uId);
  497. return LRESULT();
  498. }
  499. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
  500. {
  501. // TODO: 在此添加专用代码和/或调用基类
  502. static BOOL bTopWnd = FALSE;
  503. if (pMsg->message == WM_KEYDOWN)
  504. {
  505. switch (pMsg->wParam)
  506. {
  507. case VK_F3:
  508. if (bTopWnd == FALSE)
  509. {
  510. SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//窗口置顶
  511. SetWindowText(_T("视频采集卡-前置窗口(请按F3取消或开启前置)"));
  512. }
  513. else
  514. {
  515. SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//取消窗口置顶
  516. SetWindowText(_T("视频采集卡-取消前置(请按F3取消或开启前置)"));
  517. }
  518. bTopWnd = !bTopWnd;
  519. break;
  520. default:
  521. break;
  522. }
  523. }
  524. return CFrameWndEx::PreTranslateMessage(pMsg);
  525. }
  526. void CMainFrame::OnTraymenuExit()
  527. {
  528. // TODO: 在此添加命令处理程序代码
  529. //GetActiveView();
  530. CFrameWnd::OnClose();
  531. }
  532. void CMainFrame::OnClose()
  533. {
  534. // TODO: 在此添加消息处理程序代码和/或调用默认值
  535. #ifndef _DEBUG
  536. ShowWindow(SW_HIDE);
  537. m_bNoticeTray = FALSE;
  538. #else
  539. CFrameWnd::OnClose();
  540. #endif
  541. }
  542. void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
  543. {
  544. // TODO: 在此添加消息处理程序代码和/或调用默认值
  545. // lpMMI->ptMinTrackSize.x = 640;
  546. // lpMMI->ptMinTrackSize.y = 480;
  547. //lpMMI->ptMinTrackSize.x = 860;
  548. //lpMMI->ptMinTrackSize.y = 830;
  549. CFrameWndEx::OnGetMinMaxInfo(lpMMI);
  550. }