MainFrm.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. // 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
  2. // ("Fluent UI"),该示例仅作为参考资料提供,
  3. // 用以补充《Microsoft 基础类参考》和
  4. // MFC C++ 库软件随附的相关电子文档。
  5. // 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
  6. // 若要了解有关 Fluent UI 许可计划的详细信息,请访问
  7. // http://msdn.microsoft.com/officeui。
  8. //
  9. // 版权所有 (C) Microsoft Corporation
  10. // 保留所有权利。
  11. // MainFrm.cpp : CMainFrame 类的实现
  12. //
  13. #include "stdafx.h"
  14. #include "IDE.h"
  15. #include "MainFrm.h"
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #endif
  19. // CMainFrame
  20. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWndEx)
  21. const int iMaxUserToolbars = 10;
  22. const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
  23. const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
  24. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
  25. ON_WM_CREATE()
  26. ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
  27. ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
  28. ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
  29. ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
  30. ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
  31. END_MESSAGE_MAP()
  32. // CMainFrame 构造/析构
  33. CMainFrame::CMainFrame()
  34. {
  35. // TODO: 在此添加成员初始化代码
  36. theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_OFF_2007_BLUE);
  37. }
  38. CMainFrame::~CMainFrame()
  39. {
  40. }
  41. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  42. {
  43. if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
  44. return -1;
  45. BOOL bNameValid;
  46. // 基于持久值设置视觉管理器和样式
  47. OnApplicationLook(theApp.m_nAppLook);
  48. CMDITabInfo mdiTabParams;
  49. mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
  50. mdiTabParams.m_bActiveTabCloseButton = TRUE; // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
  51. mdiTabParams.m_bTabIcons = FALSE; // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
  52. mdiTabParams.m_bAutoColor = TRUE; // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
  53. mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
  54. EnableMDITabbedGroups(TRUE, mdiTabParams);
  55. m_wndRibbonBar.Create(this);
  56. InitializeRibbon();
  57. if (!m_wndStatusBar.Create(this))
  58. {
  59. TRACE0("未能创建状态栏\n");
  60. return -1; // 未能创建
  61. }
  62. CString strTitlePane1;
  63. CString strTitlePane2;
  64. bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
  65. ASSERT(bNameValid);
  66. bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
  67. ASSERT(bNameValid);
  68. m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
  69. m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);
  70. // 启用 Visual Studio 2005 样式停靠窗口行为
  71. CDockingManager::SetDockingMode(DT_SMART);
  72. // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
  73. EnableAutoHidePanes(CBRS_ALIGN_ANY);
  74. // 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
  75. EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
  76. #if __OUTLOOKBAR__
  77. // 创建并设置“Outlook”导航栏:
  78. if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
  79. {
  80. TRACE0("未能创建导航窗格\n");
  81. return -1; // 未能创建
  82. }
  83. #endif
  84. // 创建标题栏:
  85. if (!CreateCaptionBar())
  86. {
  87. TRACE0("未能创建标题栏\n");
  88. return -1; // 未能创建
  89. }
  90. // 已创建 Outlook 栏,应允许在左侧停靠。
  91. EnableDocking(CBRS_ALIGN_LEFT);
  92. EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
  93. // 加载菜单项图像(不在任何标准工具栏上):
  94. CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
  95. // 创建停靠窗口
  96. if (!CreateDockingWindows())
  97. {
  98. TRACE0("未能创建停靠窗口\n");
  99. return -1;
  100. }
  101. m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
  102. m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
  103. DockPane(&m_wndFileView);
  104. CDockablePane* pTabbedBar = NULL;
  105. m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
  106. m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
  107. DockPane(&m_wndOutput);
  108. m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
  109. DockPane(&m_wndProperties);
  110. // 启用增强的窗口管理对话框
  111. EnableWindowsDialog(ID_WINDOW_MANAGER, IDS_WINDOWS_MANAGER, TRUE);
  112. return 0;
  113. }
  114. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  115. {
  116. if( !CMDIFrameWndEx::PreCreateWindow(cs) )
  117. return FALSE;
  118. // TODO: 在此处通过修改
  119. // CREATESTRUCT cs 来修改窗口类或样式
  120. return TRUE;
  121. }
  122. void CMainFrame::InitializeRibbon()
  123. {
  124. BOOL bNameValid;
  125. CString strTemp;
  126. bNameValid = strTemp.LoadString(IDS_RIBBON_FILE);
  127. ASSERT(bNameValid);
  128. // 加载面板图像:
  129. m_PanelImages.SetImageSize(CSize(16, 16));
  130. m_PanelImages.Load(IDB_BUTTONS);
  131. // 初始主按钮:
  132. m_MainButton.SetImage(IDB_MAIN);
  133. m_MainButton.SetText(_T("\nf"));
  134. m_MainButton.SetToolTipText(strTemp);
  135. m_wndRibbonBar.SetApplicationButton(&m_MainButton, CSize (45, 45));
  136. CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);
  137. bNameValid = strTemp.LoadString(IDS_RIBBON_NEW);
  138. ASSERT(bNameValid);
  139. pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW, strTemp, 0, 0));
  140. bNameValid = strTemp.LoadString(IDS_RIBBON_OPEN);
  141. ASSERT(bNameValid);
  142. pMainPanel->Add(new CMFCRibbonButton(ID_FILE_OPEN, strTemp, 1, 1));
  143. bNameValid = strTemp.LoadString(IDS_RIBBON_SAVE);
  144. ASSERT(bNameValid);
  145. pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE, strTemp, 2, 2));
  146. bNameValid = strTemp.LoadString(IDS_RIBBON_SAVEAS);
  147. ASSERT(bNameValid);
  148. pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE_AS, strTemp, 3, 3));
  149. bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT);
  150. ASSERT(bNameValid);
  151. CMFCRibbonButton* pBtnPrint = new CMFCRibbonButton(ID_FILE_PRINT, strTemp, 6, 6);
  152. pBtnPrint->SetKeys(_T("p"), _T("w"));
  153. bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_LABEL);
  154. ASSERT(bNameValid);
  155. pBtnPrint->AddSubItem(new CMFCRibbonLabel(strTemp));
  156. bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_QUICK);
  157. ASSERT(bNameValid);
  158. pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_DIRECT, strTemp, 7, 7, TRUE));
  159. bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_PREVIEW);
  160. ASSERT(bNameValid);
  161. pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_PREVIEW, strTemp, 8, 8, TRUE));
  162. bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_SETUP);
  163. ASSERT(bNameValid);
  164. pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_SETUP, strTemp, 11, 11, TRUE));
  165. pMainPanel->Add(pBtnPrint);
  166. pMainPanel->Add(new CMFCRibbonSeparator(TRUE));
  167. bNameValid = strTemp.LoadString(IDS_RIBBON_CLOSE);
  168. ASSERT(bNameValid);
  169. pMainPanel->Add(new CMFCRibbonButton(ID_FILE_CLOSE, strTemp, 9, 9));
  170. bNameValid = strTemp.LoadString(IDS_RIBBON_RECENT_DOCS);
  171. ASSERT(bNameValid);
  172. pMainPanel->AddRecentFilesList(strTemp);
  173. bNameValid = strTemp.LoadString(IDS_RIBBON_EXIT);
  174. ASSERT(bNameValid);
  175. pMainPanel->AddToBottom(new CMFCRibbonMainPanelButton(ID_APP_EXIT, strTemp, 15));
  176. // 为“剪贴板”面板添加“主”类别:
  177. bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
  178. ASSERT(bNameValid);
  179. CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
  180. // 创建“剪贴板”面板:
  181. bNameValid = strTemp.LoadString(IDS_RIBBON_CLIPBOARD);
  182. ASSERT(bNameValid);
  183. CMFCRibbonPanel* pPanelClipboard = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(27));
  184. bNameValid = strTemp.LoadString(IDS_RIBBON_PASTE);
  185. ASSERT(bNameValid);
  186. CMFCRibbonButton* pBtnPaste = new CMFCRibbonButton(ID_EDIT_PASTE, strTemp, 0, 0);
  187. pPanelClipboard->Add(pBtnPaste);
  188. bNameValid = strTemp.LoadString(IDS_RIBBON_CUT);
  189. ASSERT(bNameValid);
  190. pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_CUT, strTemp, 1));
  191. bNameValid = strTemp.LoadString(IDS_RIBBON_COPY);
  192. ASSERT(bNameValid);
  193. pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_COPY, strTemp, 2));
  194. bNameValid = strTemp.LoadString(IDS_RIBBON_SELECTALL);
  195. ASSERT(bNameValid);
  196. pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_SELECT_ALL, strTemp, -1));
  197. // 创建和添加“视图”面板:
  198. bNameValid = strTemp.LoadString(IDS_RIBBON_VIEW);
  199. ASSERT(bNameValid);
  200. CMFCRibbonPanel* pPanelView = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon (7));
  201. bNameValid = strTemp.LoadString(IDS_RIBBON_STATUSBAR);
  202. ASSERT(bNameValid);
  203. CMFCRibbonButton* pBtnStatusBar = new CMFCRibbonCheckBox(ID_VIEW_STATUS_BAR, strTemp);
  204. pPanelView->Add(pBtnStatusBar);
  205. bNameValid = strTemp.LoadString(IDS_RIBBON_CAPTIONBAR);
  206. ASSERT(bNameValid);
  207. CMFCRibbonButton* pBtnCaptionBar = new CMFCRibbonCheckBox(ID_VIEW_CAPTION_BAR, strTemp);
  208. pPanelView->Add(pBtnCaptionBar);
  209. // 创建和添加“窗口”面板:
  210. bNameValid = strTemp.LoadString(IDS_RIBBON_WINDOW);
  211. ASSERT(bNameValid);
  212. CMFCRibbonPanel* pPanelWindow = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon (7));
  213. bNameValid = strTemp.LoadString(IDS_RIBBON_WINDOWS);
  214. ASSERT(bNameValid);
  215. CMFCRibbonButton* pBtnWindows = new CMFCRibbonButton(ID_WINDOW_MANAGER, strTemp, -1, 1);
  216. pBtnWindows->SetMenu(IDR_WINDOWS_MENU, TRUE);
  217. pPanelWindow->Add(pBtnWindows);
  218. // 将元素添加到选项卡右侧:
  219. bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE);
  220. ASSERT(bNameValid);
  221. CMFCRibbonButton* pVisualStyleButton = new CMFCRibbonButton(-1, strTemp, -1, -1);
  222. pVisualStyleButton->SetMenu(IDR_THEME_MENU, FALSE /* 无默认命令*/, TRUE /* 右对齐*/);
  223. bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_TIP);
  224. ASSERT(bNameValid);
  225. pVisualStyleButton->SetToolTipText(strTemp);
  226. bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_DESC);
  227. ASSERT(bNameValid);
  228. pVisualStyleButton->SetDescription(strTemp);
  229. m_wndRibbonBar.AddToTabs(pVisualStyleButton);
  230. // 添加快速访问工具栏命令:
  231. CList<UINT, UINT> lstQATCmds;
  232. lstQATCmds.AddTail(ID_FILE_NEW);
  233. lstQATCmds.AddTail(ID_FILE_OPEN);
  234. lstQATCmds.AddTail(ID_FILE_SAVE);
  235. lstQATCmds.AddTail(ID_FILE_PRINT_DIRECT);
  236. m_wndRibbonBar.SetQuickAccessCommands(lstQATCmds);
  237. m_wndRibbonBar.AddToTabs(new CMFCRibbonButton(ID_APP_ABOUT, _T("\na"), m_PanelImages.ExtractIcon (0)));
  238. }
  239. BOOL CMainFrame::CreateDockingWindows()
  240. {
  241. BOOL bNameValid;
  242. // 创建类视图
  243. CString strClassView;
  244. bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
  245. ASSERT(bNameValid);
  246. 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))
  247. {
  248. TRACE0("未能创建“类视图”窗口\n");
  249. return FALSE; // 未能创建
  250. }
  251. // 创建文件视图
  252. CString strFileView;
  253. bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
  254. ASSERT(bNameValid);
  255. 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))
  256. {
  257. TRACE0("未能创建“文件视图”窗口\n");
  258. return FALSE; // 未能创建
  259. }
  260. // 创建输出窗口
  261. CString strOutputWnd;
  262. bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
  263. ASSERT(bNameValid);
  264. 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))
  265. {
  266. TRACE0("未能创建输出窗口\n");
  267. return FALSE; // 未能创建
  268. }
  269. // 创建属性窗口
  270. CString strPropertiesWnd;
  271. bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
  272. ASSERT(bNameValid);
  273. 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))
  274. {
  275. TRACE0("未能创建“属性”窗口\n");
  276. return FALSE; // 未能创建
  277. }
  278. SetDockingWindowIcons(theApp.m_bHiColorIcons);
  279. return TRUE;
  280. }
  281. void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
  282. {
  283. HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  284. m_wndFileView.SetIcon(hFileViewIcon, FALSE);
  285. HICON hClassViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_CLASS_VIEW_HC : IDI_CLASS_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  286. m_wndClassView.SetIcon(hClassViewIcon, FALSE);
  287. HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  288. m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
  289. HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  290. m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
  291. UpdateMDITabbedBarsIcons();
  292. }
  293. BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth)
  294. {
  295. CWindowDC dc(NULL);
  296. bar.SetMode2003();
  297. BOOL bNameValid;
  298. CString strTemp;
  299. bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
  300. ASSERT(bNameValid);
  301. if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
  302. {
  303. return FALSE; // 未能创建
  304. }
  305. CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
  306. if (pOutlookBar == NULL)
  307. {
  308. ASSERT(FALSE);
  309. return FALSE;
  310. }
  311. pOutlookBar->EnableInPlaceEdit(TRUE);
  312. static UINT uiPageID = 1;
  313. DWORD dwPaneStyle = AFX_DEFAULT_TOOLBAR_STYLE | CBRS_FLOAT_MULTI;
  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. 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. // CMainFrame 诊断
  362. #ifdef _DEBUG
  363. void CMainFrame::AssertValid() const
  364. {
  365. CMDIFrameWndEx::AssertValid();
  366. }
  367. void CMainFrame::Dump(CDumpContext& dc) const
  368. {
  369. CMDIFrameWndEx::Dump(dc);
  370. }
  371. #endif //_DEBUG
  372. // CMainFrame 消息处理程序
  373. void CMainFrame::OnWindowManager()
  374. {
  375. ShowWindowsDialog();
  376. }
  377. void CMainFrame::OnApplicationLook(UINT id)
  378. {
  379. CWaitCursor wait;
  380. theApp.m_nAppLook = id;
  381. switch (theApp.m_nAppLook)
  382. {
  383. case ID_VIEW_APPLOOK_WIN_2000:
  384. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
  385. break;
  386. case ID_VIEW_APPLOOK_OFF_XP:
  387. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
  388. break;
  389. case ID_VIEW_APPLOOK_WIN_XP:
  390. CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
  391. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
  392. break;
  393. case ID_VIEW_APPLOOK_OFF_2003:
  394. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
  395. CDockingManager::SetDockingMode(DT_SMART);
  396. break;
  397. case ID_VIEW_APPLOOK_VS_2005:
  398. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
  399. CDockingManager::SetDockingMode(DT_SMART);
  400. break;
  401. default:
  402. switch (theApp.m_nAppLook)
  403. {
  404. case ID_VIEW_APPLOOK_OFF_2007_BLUE:
  405. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
  406. break;
  407. case ID_VIEW_APPLOOK_OFF_2007_BLACK:
  408. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
  409. break;
  410. case ID_VIEW_APPLOOK_OFF_2007_SILVER:
  411. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
  412. break;
  413. case ID_VIEW_APPLOOK_OFF_2007_AQUA:
  414. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
  415. break;
  416. }
  417. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
  418. CDockingManager::SetDockingMode(DT_SMART);
  419. }
  420. RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
  421. theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
  422. }
  423. void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
  424. {
  425. pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
  426. }
  427. void CMainFrame::OnViewCaptionBar()
  428. {
  429. m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW);
  430. RecalcLayout(FALSE);
  431. }
  432. void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI)
  433. {
  434. pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
  435. }