MainFrm.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579
  1. 
  2. // MainFrm.cpp: CMainFrame 类的实现
  3. //
  4. #include "pch.h"
  5. #include "framework.h"
  6. #include "CTSManager.h"
  7. #include "CFormViewBrand.h"
  8. #include "CFormViewQuater.h"
  9. #include "CFormViewQBrand.h"
  10. #include "MainFrm.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #endif
  14. // CMainFrame
  15. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWndEx)
  16. const int iMaxUserToolbars = 10;
  17. const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
  18. const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
  19. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
  20. ON_WM_CREATE()
  21. ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
  22. ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
  23. ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
  24. ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
  25. ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
  26. ON_WM_SETTINGCHANGE()
  27. END_MESSAGE_MAP()
  28. static UINT indicators[] =
  29. {
  30. ID_SEPARATOR, // 状态行指示器
  31. ID_INDICATOR_CAPS,
  32. ID_INDICATOR_NUM,
  33. ID_INDICATOR_SCRL,
  34. };
  35. static void DelAllMenu(HMENU hMenu)
  36. {
  37. // 首先删除多余的菜单项
  38. int Menucount = GetMenuItemCount(hMenu);
  39. for (int i = Menucount - 1;i > -1;i--)
  40. {
  41. ::DeleteMenu(hMenu, i, MF_BYPOSITION);
  42. }
  43. }
  44. // CMainFrame 构造/析构
  45. CMainFrame::CMainFrame() noexcept
  46. {
  47. // TODO: 在此添加成员初始化代码
  48. theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2008);
  49. }
  50. CMainFrame::~CMainFrame()
  51. {
  52. }
  53. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  54. {
  55. if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
  56. return -1;
  57. BOOL bNameValid;
  58. #if 0 // 禁用这块代码:不显示视图Tab标签(或者设置EnableMDITabbedGroups参数1FASE)
  59. CMDITabInfo mdiTabParams;
  60. mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
  61. mdiTabParams.m_bActiveTabCloseButton = TRUE; // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
  62. mdiTabParams.m_bTabIcons = FALSE; // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
  63. mdiTabParams.m_bAutoColor = TRUE; // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
  64. mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
  65. EnableMDITabbedGroups(TRUE, mdiTabParams);
  66. #endif
  67. if (!m_wndMenuBar.Create(this))
  68. {
  69. TRACE0("未能创建菜单栏\n");
  70. return -1; // 未能创建
  71. }
  72. m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);
  73. // 防止菜单栏在激活时获得焦点
  74. CMFCPopupMenu::SetForceMenuFocus(FALSE);
  75. #if !HIDE_TOOLBAR
  76. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  77. !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
  78. {
  79. TRACE0("未能创建工具栏\n");
  80. return -1; // 未能创建
  81. }
  82. CString strToolBarName;
  83. bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD);
  84. ASSERT(bNameValid);
  85. m_wndToolBar.SetWindowText(strToolBarName);
  86. CString strCustomize;
  87. bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
  88. ASSERT(bNameValid);
  89. m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
  90. #endif
  91. // 允许用户定义的工具栏操作:
  92. InitUserToolbars(nullptr, uiFirstUserToolBarId, uiLastUserToolBarId);
  93. if (!m_wndStatusBar.Create(this))
  94. {
  95. TRACE0("未能创建状态栏\n");
  96. return -1; // 未能创建
  97. }
  98. m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
  99. // TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行
  100. m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
  101. #if !HIDE_TOOLBAR
  102. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  103. #endif
  104. EnableDocking(CBRS_ALIGN_ANY);
  105. DockPane(&m_wndMenuBar);
  106. #if !HIDE_TOOLBAR
  107. DockPane(&m_wndToolBar);
  108. #endif
  109. // 隐藏掉菜单条;
  110. #if HIDE_MENU_BAR
  111. m_wndMenuBar.ShowPane(FALSE, FALSE, FALSE);
  112. #endif
  113. // 启用 Visual Studio 2005 样式停靠窗口行为
  114. CDockingManager::SetDockingMode(DT_SMART);
  115. // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
  116. EnableAutoHidePanes(CBRS_ALIGN_ANY);
  117. // 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
  118. EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
  119. #if ENABLE_OUTBAR
  120. // 创建并设置“Outlook”导航栏:
  121. if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
  122. {
  123. TRACE0("未能创建导航窗格\n");
  124. return -1; // 未能创建
  125. }
  126. // 已创建 Outlook 栏,应允许在左侧停靠。
  127. EnableDocking(CBRS_ALIGN_LEFT);
  128. EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
  129. #endif
  130. // 加载菜单项图像(不在任何标准工具栏上):
  131. CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
  132. // 创建停靠窗口
  133. if (!CreateDockingWindows())
  134. {
  135. TRACE0("未能创建停靠窗口\n");
  136. return -1;
  137. }
  138. #if ENABLE_FILE_CLASS
  139. m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
  140. m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
  141. DockPane(&m_wndFileView);
  142. CDockablePane* pTabbedBar = nullptr;
  143. m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
  144. #endif
  145. #if ENABLE_TITILBAR
  146. m_wndTitleBar.EnableDocking(CBRS_ALIGN_TOP);
  147. DockPane(&m_wndTitleBar);
  148. #endif
  149. m_wndNavBar.EnableDocking(CBRS_ALIGN_LEFT);
  150. DockPane(&m_wndNavBar);
  151. #if ENABLE_OUTPUT
  152. m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
  153. DockPane(&m_wndOutput);
  154. #endif
  155. m_wndProperties.EnableDocking(CBRS_RIGHT);
  156. DockPane(&m_wndProperties);
  157. // 基于持久值设置视觉管理器和样式
  158. OnApplicationLook(theApp.m_nAppLook);
  159. // 启用增强的窗口管理对话框
  160. EnableWindowsDialog(ID_WINDOW_MANAGER, ID_WINDOW_MANAGER, TRUE);
  161. #if !HIDE_TOOLBAR
  162. // 启用工具栏和停靠窗口菜单替换
  163. EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);
  164. #endif
  165. // 启用快速(按住 Alt 拖动)工具栏自定义
  166. CMFCToolBar::EnableQuickCustomization();
  167. if (CMFCToolBar::GetUserImages() == nullptr)
  168. {
  169. // 加载用户定义的工具栏图像
  170. if (m_UserImages.Load(_T(".\\UserImages.bmp")))
  171. {
  172. CMFCToolBar::SetUserImages(&m_UserImages);
  173. }
  174. }
  175. // 启用菜单个性化(最近使用的命令)
  176. // TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。
  177. CList<UINT, UINT> lstBasicCommands;
  178. lstBasicCommands.AddTail(ID_FILE_NEW);
  179. lstBasicCommands.AddTail(ID_FILE_OPEN);
  180. lstBasicCommands.AddTail(ID_FILE_SAVE);
  181. lstBasicCommands.AddTail(ID_FILE_PRINT);
  182. lstBasicCommands.AddTail(ID_APP_EXIT);
  183. lstBasicCommands.AddTail(ID_EDIT_CUT);
  184. lstBasicCommands.AddTail(ID_EDIT_PASTE);
  185. lstBasicCommands.AddTail(ID_EDIT_UNDO);
  186. lstBasicCommands.AddTail(ID_APP_ABOUT);
  187. lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR);
  188. lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);
  189. lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003);
  190. lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005);
  191. lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE);
  192. lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER);
  193. lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK);
  194. lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA);
  195. lstBasicCommands.AddTail(ID_VIEW_APPLOOK_WINDOWS_7);
  196. lstBasicCommands.AddTail(ID_SORTING_SORTALPHABETIC);
  197. lstBasicCommands.AddTail(ID_SORTING_SORTBYTYPE);
  198. lstBasicCommands.AddTail(ID_SORTING_SORTBYACCESS);
  199. lstBasicCommands.AddTail(ID_SORTING_GROUPBYTYPE);
  200. CMFCToolBar::SetBasicCommands(lstBasicCommands);
  201. // 将文档名和应用程序名称在窗口标题栏上的顺序进行交换。这
  202. // 将改进任务栏的可用性,因为显示的文档名带有缩略图。
  203. ModifyStyle(0, FWS_PREFIXTITLE);
  204. #if 1
  205. CChildFrameList::Init(this, m_pDoc);
  206. CChildFrameList::AppendView(_T("品牌"), RUNTIME_CLASS(CFormViewBrand), IDR_MAINFRAME, IDD_FORMVIEW_BRAND);
  207. CChildFrameList::AppendView(_T("季度"), RUNTIME_CLASS(CFormViewQuater), IDR_MAINFRAME, IDD_FORMVIEW_QUATER);
  208. CChildFrameList::AppendView(_T("季度品牌"), RUNTIME_CLASS(CFormViewQBrand), IDR_MAINFRAME, IDD_FORMVIEW_QUATER);
  209. #endif
  210. return 0;
  211. }
  212. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  213. {
  214. if( !CMDIFrameWndEx::PreCreateWindow(cs) )
  215. return FALSE;
  216. // TODO: 在此处通过修改
  217. // CREATESTRUCT cs 来修改窗口类或样式
  218. return TRUE;
  219. }
  220. BOOL CMainFrame::CreateDockingWindows()
  221. {
  222. BOOL bNameValid;
  223. #if ENABLE_FILE_CLASS
  224. // 创建类视图
  225. CString strClassView;
  226. bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
  227. ASSERT(bNameValid);
  228. 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))
  229. {
  230. TRACE0("未能创建“类视图”窗口\n");
  231. return FALSE; // 未能创建
  232. }
  233. // 创建文件视图
  234. CString strFileView;
  235. bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
  236. ASSERT(bNameValid);
  237. 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))
  238. {
  239. TRACE0("未能创建“文件视图”窗口\n");
  240. return FALSE; // 未能创建
  241. }
  242. #endif
  243. #if ENABLE_TITILBAR
  244. // 标题栏
  245. CString strFileView;
  246. bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
  247. ASSERT(bNameValid);
  248. // 如何禁止改变大小:将最后2个默认参数全改为,将且删除注册表“应用程序向导生成的本地应用程序”才会生效;
  249. if (!m_wndTitleBar.Create(strFileView, this, CRect(0, 0, 200, 100), FALSE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_TOP , 0, 0))
  250. {
  251. TRACE0("未能创建“文件视图”窗口\n");
  252. return FALSE; // 未能创建
  253. }
  254. #endif
  255. // 左导航栏
  256. CString strClassView;
  257. bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
  258. ASSERT(bNameValid);
  259. // 如何禁止改变大小:将最后2个默认参数全改为,将且删除注册表“应用程序向导生成的本地应用程序”才会生效;
  260. if (!m_wndNavBar.Create(strClassView, this, CRect(0, 0, 215, 200), FALSE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT, 0, 0))
  261. {
  262. TRACE0("未能创建“文件视图”窗口\n");
  263. return FALSE; // 未能创建
  264. }
  265. #if ENABLE_OUTPUT
  266. // 创建输出窗口
  267. CString strOutputWnd;
  268. bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
  269. ASSERT(bNameValid);
  270. 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))
  271. {
  272. TRACE0("未能创建输出窗口\n");
  273. return FALSE; // 未能创建
  274. }
  275. #endif
  276. // 创建属性窗口
  277. CString strPropertiesWnd;
  278. bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
  279. ASSERT(bNameValid);
  280. // 将参数4改为FALSE,就不会有Gripper;
  281. if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), FALSE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))
  282. {
  283. TRACE0("未能创建“属性”窗口\n");
  284. return FALSE; // 未能创建
  285. }
  286. SetDockingWindowIcons(theApp.m_bHiColorIcons);
  287. return TRUE;
  288. }
  289. void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
  290. {
  291. #if ENABLE_FILE_CLASS
  292. HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  293. m_wndFileView.SetIcon(hFileViewIcon, FALSE);
  294. HICON hClassViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_CLASS_VIEW_HC : IDI_CLASS_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  295. m_wndClassView.SetIcon(hClassViewIcon, FALSE);
  296. #endif
  297. #if ENABLE_OUTPUT
  298. HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  299. m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
  300. #endif
  301. HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
  302. m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
  303. UpdateMDITabbedBarsIcons();
  304. }
  305. BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth)
  306. {
  307. bar.SetMode2003();
  308. BOOL bNameValid;
  309. CString strTemp;
  310. bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
  311. ASSERT(bNameValid);
  312. if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
  313. {
  314. return FALSE; // 未能创建
  315. }
  316. CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
  317. if (pOutlookBar == nullptr)
  318. {
  319. ASSERT(FALSE);
  320. return FALSE;
  321. }
  322. //pOutlookBar->EnableInPlaceEdit(TRUE);
  323. static UINT uiPageID = 1;
  324. // 可浮动,可自动隐藏,可调整大小,但不能关闭
  325. DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
  326. CRect rectDummy(0, 0, 0, 0);
  327. const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
  328. /*tree.Create(dwTreeStyle, rectDummy, &bar, 1200);
  329. bNameValid = strTemp.LoadString(IDS_FOLDERS);
  330. ASSERT(bNameValid);
  331. pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle);*/
  332. calendar.Create(rectDummy, &bar, 1201);
  333. bNameValid = strTemp.LoadString(IDS_CALENDAR);
  334. ASSERT(bNameValid);
  335. pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle);
  336. //bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  337. //pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24);
  338. //pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16);
  339. pOutlookBar->RecalcLayout();
  340. BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE);
  341. //CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation);
  342. bar.SetButtonsFont(&afxGlobalData.fontBold);
  343. return TRUE;
  344. }
  345. // CMainFrame 诊断
  346. #ifdef _DEBUG
  347. void CMainFrame::AssertValid() const
  348. {
  349. CMDIFrameWndEx::AssertValid();
  350. }
  351. void CMainFrame::Dump(CDumpContext& dc) const
  352. {
  353. CMDIFrameWndEx::Dump(dc);
  354. }
  355. #endif //_DEBUG
  356. // CMainFrame 消息处理程序
  357. void CMainFrame::OnWindowManager()
  358. {
  359. ShowWindowsDialog();
  360. }
  361. void CMainFrame::OnViewCustomize()
  362. {
  363. CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog(this, TRUE /* 扫描菜单*/);
  364. pDlgCust->EnableUserDefinedToolbars();
  365. pDlgCust->Create();
  366. }
  367. LRESULT CMainFrame::OnToolbarCreateNew(WPARAM wp,LPARAM lp)
  368. {
  369. LRESULT lres = CMDIFrameWndEx::OnToolbarCreateNew(wp,lp);
  370. if (lres == 0)
  371. {
  372. return 0;
  373. }
  374. CMFCToolBar* pUserToolbar = (CMFCToolBar*)lres;
  375. ASSERT_VALID(pUserToolbar);
  376. BOOL bNameValid;
  377. CString strCustomize;
  378. bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
  379. ASSERT(bNameValid);
  380. pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
  381. return lres;
  382. }
  383. void CMainFrame::OnApplicationLook(UINT id)
  384. {
  385. CWaitCursor wait;
  386. theApp.m_nAppLook = id;
  387. switch (theApp.m_nAppLook)
  388. {
  389. case ID_VIEW_APPLOOK_WIN_2000:
  390. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
  391. break;
  392. case ID_VIEW_APPLOOK_OFF_XP:
  393. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
  394. break;
  395. case ID_VIEW_APPLOOK_WIN_XP:
  396. CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
  397. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
  398. break;
  399. case ID_VIEW_APPLOOK_OFF_2003:
  400. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
  401. CDockingManager::SetDockingMode(DT_SMART);
  402. break;
  403. case ID_VIEW_APPLOOK_VS_2005:
  404. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
  405. CDockingManager::SetDockingMode(DT_SMART);
  406. break;
  407. case ID_VIEW_APPLOOK_VS_2008:
  408. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008));
  409. CDockingManager::SetDockingMode(DT_SMART);
  410. break;
  411. case ID_VIEW_APPLOOK_WINDOWS_7:
  412. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));
  413. CDockingManager::SetDockingMode(DT_SMART);
  414. break;
  415. default:
  416. switch (theApp.m_nAppLook)
  417. {
  418. case ID_VIEW_APPLOOK_OFF_2007_BLUE:
  419. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
  420. break;
  421. case ID_VIEW_APPLOOK_OFF_2007_BLACK:
  422. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
  423. break;
  424. case ID_VIEW_APPLOOK_OFF_2007_SILVER:
  425. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
  426. break;
  427. case ID_VIEW_APPLOOK_OFF_2007_AQUA:
  428. CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
  429. break;
  430. }
  431. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
  432. CDockingManager::SetDockingMode(DT_SMART);
  433. }
  434. #if ENABLE_OUTPUT
  435. m_wndOutput.UpdateFonts();
  436. #endif
  437. RedrawWindow(nullptr, nullptr, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
  438. theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
  439. }
  440. void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
  441. {
  442. pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
  443. }
  444. BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
  445. {
  446. // 基类将执行真正的工作
  447. if (!CMDIFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
  448. {
  449. return FALSE;
  450. }
  451. // 为所有用户工具栏启用自定义按钮
  452. BOOL bNameValid;
  453. CString strCustomize;
  454. bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
  455. ASSERT(bNameValid);
  456. for (int i = 0; i < iMaxUserToolbars; i ++)
  457. {
  458. CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i);
  459. if (pUserToolbar != nullptr)
  460. {
  461. pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
  462. }
  463. }
  464. return TRUE;
  465. }
  466. void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
  467. {
  468. CMDIFrameWndEx::OnSettingChange(uFlags, lpszSection);
  469. #if ENABLE_OUTPUT
  470. m_wndOutput.UpdateFonts();
  471. #endif
  472. }