MainFrm.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  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. #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_DYNAMIC(CMainFrame, CMDIFrameWndEx)
  26. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
  27. ON_WM_CREATE()
  28. ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
  29. ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
  30. ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
  31. ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
  32. ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
  33. ON_COMMAND(ID_TOOLS_OPTIONS, &CMainFrame::OnOptions)
  34. ON_WM_SETTINGCHANGE()
  35. #if USE_TRAYICON
  36. ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)
  37. ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated)
  38. #endif
  39. END_MESSAGE_MAP()
  40. // CMainFrame 构造/析构
  41. CMainFrame::CMainFrame() noexcept :m_trayIcon(IDR_MAINFRAME)
  42. {
  43. // TODO: 在此添加成员初始化代码
  44. theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2008);
  45. #if USE_TRAYICON
  46. m_isNotify = TRUE;
  47. m_bNoticeTray = TRUE;
  48. #endif
  49. }
  50. CMainFrame::~CMainFrame()
  51. {
  52. }
  53. #if USE_TRAYICON
  54. void CMainFrame::InitTrayIcon()
  55. {
  56. m_trayIcon.SetNotificationWnd(this, WM_MY_TRAY_NOTIFICATION);
  57. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530"));
  58. m_trayIcon.SetIconInfos(IDR_MAINFRAME, IDR_MAINFRAME, IDR_MAINFRAME);
  59. m_trayIcon.SetDefaultTip(_T("UB530"));
  60. }
  61. LRESULT CMainFrame::OnTaskBarCreated(WPARAM wp, LPARAM lp)
  62. {
  63. Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid);
  64. return 0;
  65. }
  66. // Handle notification from tray icon: display a message.
  67. LRESULT CMainFrame::OnTrayNotification(WPARAM uID, LPARAM lEvent)
  68. {
  69. if (m_isNotify)
  70. {
  71. static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE",
  72. "WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK",
  73. "WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK",
  74. "WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" };
  75. }
  76. if (uID != IDR_MAINFRAME)
  77. return m_trayIcon.OnTrayNotification(uID, lEvent);
  78. switch (lEvent)
  79. {
  80. case WM_RBUTTONUP:
  81. TrayRight();
  82. break;
  83. case WM_LBUTTONUP:
  84. break;
  85. case WM_LBUTTONDBLCLK:
  86. TaskNotifyIcon();
  87. break;
  88. default:
  89. break;
  90. }
  91. return 0;
  92. }
  93. void CMainFrame::TrayRight()
  94. {
  95. CMenu menu;
  96. if (!menu.LoadMenu(IDR_MAINFRAME))
  97. return;
  98. CMenu* pSubMenu = menu.GetSubMenu(4);
  99. if (!pSubMenu)
  100. return;
  101. CPoint point;
  102. GetCursorPos(&point);
  103. ::SetForegroundWindow(m_hWnd);
  104. pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
  105. }
  106. void CMainFrame::TaskNotifyIcon()
  107. {
  108. if (!m_bNoticeTray)
  109. {
  110. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序"));
  111. ShowWindow(SW_SHOWNORMAL);
  112. m_bNoticeTray = TRUE;
  113. }
  114. else
  115. {
  116. m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序"));
  117. ShowWindow(SW_HIDE);
  118. m_bNoticeTray = FALSE;
  119. }
  120. }
  121. #endif
  122. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  123. {
  124. if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
  125. return -1;
  126. #if USE_TRAYICON
  127. InitTrayIcon();
  128. #endif
  129. BOOL bNameValid;
  130. #if __TAB_BAR__
  131. CMDITabInfo mdiTabParams;
  132. mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
  133. mdiTabParams.m_bActiveTabCloseButton = TRUE; // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
  134. mdiTabParams.m_bTabIcons = FALSE; // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
  135. mdiTabParams.m_bAutoColor = TRUE; // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
  136. mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
  137. EnableMDITabbedGroups(TRUE, mdiTabParams);
  138. #endif
  139. m_wndRibbonBar.Create(this);
  140. m_wndRibbonBar.LoadFromResource(IDR_RIBBON);
  141. #if !__QUICKACCESS_COMMAND__
  142. // 添加以下代码段,禁用快速启动栏;
  143. CMFCRibbonQuickAccessToolBar* pQAToolbar = m_wndRibbonBar.GetQuickAccessToolbar();
  144. pQAToolbar->RemoveAll();
  145. #endif
  146. if (!m_wndStatusBar.Create(this))
  147. {
  148. TRACE0("未能创建状态栏\n");
  149. return -1; // 未能创建
  150. }
  151. CString strTitlePane1;
  152. CString strTitlePane2;
  153. bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
  154. ASSERT(bNameValid);
  155. bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
  156. ASSERT(bNameValid);
  157. m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
  158. m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);
  159. // 启用 Visual Studio 2005 样式停靠窗口行为
  160. CDockingManager::SetDockingMode(DT_SMART);
  161. // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
  162. EnableAutoHidePanes(CBRS_ALIGN_ANY);
  163. #if __OUTLOOKBAR__
  164. // 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
  165. EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
  166. // 创建并设置“Outlook”导航栏:
  167. if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
  168. {
  169. TRACE0("未能创建导航窗格\n");
  170. return -1; // 未能创建
  171. }
  172. #endif
  173. #if __CAPTIONBAR__
  174. // 创建标题栏:
  175. if (!CreateCaptionBar())
  176. {
  177. TRACE0("未能创建标题栏\n");
  178. return -1; // 未能创建
  179. }
  180. #endif
  181. #if __OUTLOOKBAR__
  182. // 已创建 Outlook 栏,应允许在左侧停靠。
  183. EnableDocking(CBRS_ALIGN_LEFT);
  184. EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
  185. #endif
  186. // 加载菜单项图像(不在任何标准工具栏上):
  187. CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
  188. #if __DOCKINGBAR__
  189. // 创建停靠窗口
  190. if (!CreateDockingWindows())
  191. {
  192. TRACE0("未能创建停靠窗口\n");
  193. return -1;
  194. }
  195. #if __FC_WIN__
  196. m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
  197. m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
  198. DockPane(&m_wndFileView);
  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_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
  207. DockPane(&m_wndProperties);
  208. #endif
  209. // 基于持久值设置视觉管理器和样式
  210. OnApplicationLook(theApp.m_nAppLook);
  211. // 启用增强的窗口管理对话框
  212. EnableWindowsDialog(ID_WINDOW_MANAGER, ID_WINDOW_MANAGER, TRUE);
  213. #if __TAB_BAR__
  214. // 将文档名和应用程序名称在窗口标题栏上的顺序进行交换。这
  215. // 将改进任务栏的可用性,因为显示的文档名带有缩略图。
  216. ModifyStyle(0, FWS_PREFIXTITLE);
  217. #endif
  218. return 0;
  219. }
  220. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  221. {
  222. if( !CMDIFrameWndEx::PreCreateWindow(cs) )
  223. return FALSE;
  224. // TODO: 在此处通过修改
  225. // CREATESTRUCT cs 来修改窗口类或样式
  226. return TRUE;
  227. }
  228. #if __DOCKINGBAR__
  229. BOOL CMainFrame::CreateDockingWindows()
  230. {
  231. BOOL bNameValid;
  232. #if __FC_WIN__
  233. // 创建类视图
  234. CString strClassView;
  235. bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
  236. ASSERT(bNameValid);
  237. 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))
  238. {
  239. TRACE0("未能创建“类视图”窗口\n");
  240. return FALSE; // 未能创建
  241. }
  242. // 创建文件视图
  243. CString strFileView;
  244. bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
  245. ASSERT(bNameValid);
  246. 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))
  247. {
  248. TRACE0("未能创建“文件视图”窗口\n");
  249. return FALSE; // 未能创建
  250. }
  251. #endif
  252. #if __OUT_PUT_WIN__
  253. // 创建输出窗口
  254. CString strOutputWnd;
  255. bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
  256. ASSERT(bNameValid);
  257. 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))
  258. {
  259. TRACE0("未能创建输出窗口\n");
  260. return FALSE; // 未能创建
  261. }
  262. #endif
  263. // 创建属性窗口
  264. CString strPropertiesWnd;
  265. bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
  266. ASSERT(bNameValid);
  267. if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
  268. {
  269. TRACE0("未能创建“属性”窗口\n");
  270. return FALSE; // 未能创建
  271. }
  272. SetDockingWindowIcons(theApp.m_bHiColorIcons);
  273. return TRUE;
  274. }
  275. void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
  276. {
  277. #if __FC_WIN__
  278. HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  279. m_wndFileView.SetIcon(hFileViewIcon, FALSE);
  280. HICON hClassViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_CLASS_VIEW_HC : IDI_CLASS_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  281. m_wndClassView.SetIcon(hClassViewIcon, FALSE);
  282. #endif
  283. #if __OUT_PUT_WIN__
  284. HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  285. m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
  286. #endif
  287. HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  288. m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
  289. #if __TAB_BAR__
  290. UpdateMDITabbedBarsIcons();
  291. #endif
  292. }
  293. #endif
  294. #if __OUTLOOKBAR__
  295. BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth)
  296. {
  297. bar.SetMode2003();
  298. BOOL bNameValid;
  299. CString strTemp;
  300. bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
  301. ASSERT(bNameValid);
  302. if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
  303. {
  304. return FALSE; // 未能创建
  305. }
  306. CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
  307. if (pOutlookBar == nullptr)
  308. {
  309. ASSERT(FALSE);
  310. return FALSE;
  311. }
  312. pOutlookBar->EnableInPlaceEdit(TRUE);
  313. static UINT uiPageID = 1;
  314. // 可浮动,可自动隐藏,可调整大小,但不能关闭
  315. DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
  316. CRect rectDummy(0, 0, 0, 0);
  317. const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
  318. tree.Create(dwTreeStyle, rectDummy, &bar, 1200);
  319. bNameValid = strTemp.LoadString(IDS_FOLDERS);
  320. ASSERT(bNameValid);
  321. pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle);
  322. calendar.Create(rectDummy, &bar, 1201);
  323. bNameValid = strTemp.LoadString(IDS_CALENDAR);
  324. ASSERT(bNameValid);
  325. pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle);
  326. bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  327. pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24);
  328. pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16);
  329. pOutlookBar->RecalcLayout();
  330. BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE);
  331. CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation);
  332. bar.SetButtonsFont(&afxGlobalData.fontBold);
  333. return TRUE;
  334. }
  335. #endif
  336. #if __CAPTIONBAR__
  337. BOOL CMainFrame::CreateCaptionBar()
  338. {
  339. if (!m_wndCaptionBar.Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this, ID_VIEW_CAPTION_BAR, -1, TRUE))
  340. {
  341. TRACE0("未能创建标题栏\n");
  342. return FALSE;
  343. }
  344. BOOL bNameValid;
  345. CString strTemp, strTemp2;
  346. bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON);
  347. ASSERT(bNameValid);
  348. m_wndCaptionBar.SetButton(strTemp, ID_TOOLS_OPTIONS, CMFCCaptionBar::ALIGN_LEFT, FALSE);
  349. bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON_TIP);
  350. ASSERT(bNameValid);
  351. m_wndCaptionBar.SetButtonToolTip(strTemp);
  352. bNameValid = strTemp.LoadString(IDS_CAPTION_TEXT);
  353. ASSERT(bNameValid);
  354. m_wndCaptionBar.SetText(strTemp, CMFCCaptionBar::ALIGN_LEFT);
  355. m_wndCaptionBar.SetBitmap(IDB_INFO, RGB(255, 255, 255), FALSE, CMFCCaptionBar::ALIGN_LEFT);
  356. bNameValid = strTemp.LoadString(IDS_CAPTION_IMAGE_TIP);
  357. ASSERT(bNameValid);
  358. bNameValid = strTemp2.LoadString(IDS_CAPTION_IMAGE_TEXT);
  359. ASSERT(bNameValid);
  360. m_wndCaptionBar.SetImageToolTip(strTemp, strTemp2);
  361. return TRUE;
  362. }
  363. #endif
  364. // CMainFrame 诊断
  365. #ifdef _DEBUG
  366. void CMainFrame::AssertValid() const
  367. {
  368. CMDIFrameWndEx::AssertValid();
  369. }
  370. void CMainFrame::Dump(CDumpContext& dc) const
  371. {
  372. CMDIFrameWndEx::Dump(dc);
  373. }
  374. #endif //_DEBUG
  375. // CMainFrame 消息处理程序
  376. void CMainFrame::OnWindowManager()
  377. {
  378. ShowWindowsDialog();
  379. }
  380. void CMainFrame::OnApplicationLook(UINT id)
  381. {
  382. CWaitCursor wait;
  383. theApp.m_nAppLook = id;
  384. switch (theApp.m_nAppLook)
  385. {
  386. case ID_VIEW_APPLOOK_WIN_2000:
  387. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
  388. m_wndRibbonBar.SetWindows7Look(FALSE);
  389. break;
  390. case ID_VIEW_APPLOOK_OFF_XP:
  391. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
  392. m_wndRibbonBar.SetWindows7Look(FALSE);
  393. break;
  394. case ID_VIEW_APPLOOK_WIN_XP:
  395. CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
  396. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
  397. m_wndRibbonBar.SetWindows7Look(FALSE);
  398. break;
  399. case ID_VIEW_APPLOOK_OFF_2003:
  400. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
  401. CDockingManager::SetDockingMode(DT_SMART);
  402. m_wndRibbonBar.SetWindows7Look(FALSE);
  403. break;
  404. case ID_VIEW_APPLOOK_VS_2005:
  405. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
  406. CDockingManager::SetDockingMode(DT_SMART);
  407. m_wndRibbonBar.SetWindows7Look(FALSE);
  408. break;
  409. case ID_VIEW_APPLOOK_VS_2008:
  410. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008));
  411. CDockingManager::SetDockingMode(DT_SMART);
  412. m_wndRibbonBar.SetWindows7Look(FALSE);
  413. break;
  414. case ID_VIEW_APPLOOK_WINDOWS_7:
  415. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));
  416. CDockingManager::SetDockingMode(DT_SMART);
  417. m_wndRibbonBar.SetWindows7Look(TRUE);
  418. break;
  419. default:
  420. switch (theApp.m_nAppLook)
  421. {
  422. case ID_VIEW_APPLOOK_OFF_2007_BLUE:
  423. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
  424. break;
  425. case ID_VIEW_APPLOOK_OFF_2007_BLACK:
  426. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
  427. break;
  428. case ID_VIEW_APPLOOK_OFF_2007_SILVER:
  429. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
  430. break;
  431. case ID_VIEW_APPLOOK_OFF_2007_AQUA:
  432. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
  433. break;
  434. }
  435. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
  436. CDockingManager::SetDockingMode(DT_SMART);
  437. m_wndRibbonBar.SetWindows7Look(FALSE);
  438. }
  439. #if __DOCKINGBAR__
  440. #if __OUT_PUT_WIN__
  441. m_wndOutput.UpdateFonts();
  442. #endif
  443. #endif
  444. RedrawWindow(nullptr, nullptr, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
  445. theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
  446. }
  447. void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
  448. {
  449. pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
  450. }
  451. void CMainFrame::OnViewCaptionBar()
  452. {
  453. #if __CAPTIONBAR__
  454. m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW);
  455. RecalcLayout(FALSE);
  456. #endif
  457. }
  458. void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI)
  459. {
  460. #if __CAPTIONBAR__
  461. pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
  462. #endif
  463. }
  464. void CMainFrame::OnOptions()
  465. {
  466. CMFCRibbonCustomizeDialog *pOptionsDlg = new CMFCRibbonCustomizeDialog(this, &m_wndRibbonBar);
  467. ASSERT(pOptionsDlg != nullptr);
  468. pOptionsDlg->DoModal();
  469. delete pOptionsDlg;
  470. }
  471. void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
  472. {
  473. CMDIFrameWndEx::OnSettingChange(uFlags, lpszSection);
  474. #if __DOCKINGBAR__
  475. #if __OUT_PUT_WIN__
  476. m_wndOutput.UpdateFonts();
  477. #endif
  478. #endif
  479. }