int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // enable Office XP look: CBCGVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGVisualManagerXP)); // Load toolbar user images: if (!m_UserImages.Load (_T(".\\UserImages.bmp"))) { TRACE(_T("Failed to load user images\n")); ASSERT (FALSE); } else { CBCGToolBar::SetUserImages (&m_UserImages); } CBCGToolBar::EnableQuickCustomization (); EnableMDITabs (); if (!m_wndMenuBar.Create (this)) { TRACE0("Failed to create menubar\n"); return -1; // fail to create } m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_SIZE_DYNAMIC); if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } if (!m_wndWorkSpace.Create (_T("Sprite"), this, CSize (228, 150), TRUE /* Has gripper */, ID_VIEW_WORKSPACE, WS_CHILD | WS_VISIBLE | CBRS_LEFT)) { TRACE0("Failed to create workspace bar\n"); return -1; // fail to create } if (!m_wndProperty.Create (_T("Properties"), this, CSize (228, 200), TRUE /* Has gripper */, ID_VIEW_PROPERTY, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM)) { TRACE0("Failed to create property bar\n"); return -1; // fail to create } if (!m_wndOutput.Create (_T("Output"), this, CSize (150, 150), TRUE /* Has gripper */, ID_VIEW_OUTPUT, WS_CHILD | CBRS_BOTTOM)) { TRACE0("Failed to create output bar\n"); return -1; // fail to create } CString strMainToolbarTitle; strMainToolbarTitle.LoadString (IDS_MAIN_TOOLBAR); m_wndToolBar.SetWindowText (strMainToolbarTitle); // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndWorkSpace.EnableDocking(CBRS_ALIGN_ANY); m_wndProperty.EnableDocking(CBRS_ALIGN_ANY); m_wndOutput.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndMenuBar); DockControlBar(&m_wndToolBar); DockControlBar(&m_wndWorkSpace); DockControlBarLeftOf(&m_wndProperty, &m_wndWorkSpace); DockControlBar(&m_wndOutput); // Allow user-defined toolbars operations: InitUserToobars (NULL, uiFirstUserToolBarId, uiLastUserToolBarId); // Enable windows manager: EnableWindowsDialog (ID_WINDOW_MANAGER, IDS_WINDOWS_MANAGER, TRUE); return 0; }
void CMainFrame::UpdateMDITabs (BOOL bResetMDIChild) { TRACE("CMainFrame::UpdateMDITabs"); CMDITabInfo params; HWND hwndActive = NULL; switch (theApp.m_Options.m_nMDITabsType) { case CMDITabOptions::None: { BOOL bCascadeMDIChild = FALSE; if (IsMDITabbedGroup ()) { EnableMDITabbedGroups (FALSE, params); bCascadeMDIChild = TRUE; } else if (AreMDITabs ()) { EnableMDITabs (FALSE); bCascadeMDIChild = TRUE; } if (bCascadeMDIChild) { hwndActive = (HWND) m_wndClientArea.SendMessage (WM_MDIGETACTIVE); m_wndClientArea.PostMessage (WM_MDICASCADE); ::BringWindowToTop (hwndActive); } } break; case CMDITabOptions::MDITabsStandard: hwndActive = (HWND) m_wndClientArea.SendMessage (WM_MDIGETACTIVE); m_wndClientArea.PostMessage (WM_MDIMAXIMIZE, LPARAM(hwndActive), 0L); ::BringWindowToTop (hwndActive); EnableMDITabs (TRUE,theApp.m_Options.m_bMDITabsIcons, theApp.m_Options.m_bTabsOnTop ? CMFCTabCtrl::LOCATION_TOP : CMFCTabCtrl::LOCATION_BOTTOM, theApp.m_Options.m_nTabsStyle); GetMDITabs().EnableAutoColor (theApp.m_Options.m_bTabsAutoColor); GetMDITabs().EnableTabDocumentsMenu (theApp.m_Options.m_bMDITabsDocMenu); GetMDITabs().EnableTabSwap (theApp.m_Options.m_bDragMDITabs); GetMDITabs().SetTabBorderSize (theApp.m_Options.m_nMDITabsBorderSize); GetMDITabs().SetFlatFrame (theApp.m_Options.m_bFlatFrame); GetMDITabs().EnableCustomToolTips (theApp.m_Options.m_bCustomTooltips); GetMDITabs().EnableCustomToolTips (theApp.m_Options.m_bCustomTooltips); GetMDITabs().EnableActiveTabCloseButton (theApp.m_Options.m_bActiveTabCloseButton); break; case CMDITabOptions::MDITabbedGroups: hwndActive = (HWND) m_wndClientArea.SendMessage (WM_MDIGETACTIVE); m_wndClientArea.PostMessage (WM_MDIMAXIMIZE, LPARAM(hwndActive), 0L); ::BringWindowToTop (hwndActive); params.m_tabLocation = theApp.m_Options.m_bTabsOnTop ? CMFCTabCtrl::LOCATION_TOP : CMFCTabCtrl::LOCATION_BOTTOM; params.m_style = theApp.m_Options.m_nTabsStyle; params.m_bTabCloseButton = !theApp.m_Options.m_bActiveTabCloseButton; params.m_bActiveTabCloseButton = theApp.m_Options.m_bActiveTabCloseButton; params.m_bAutoColor = theApp.m_Options.m_bTabsAutoColor; params.m_bDocumentMenu = theApp.m_Options.m_bMDITabsDocMenu; params.m_bEnableTabSwap = theApp.m_Options.m_bDragMDITabs; params.m_nTabBorderSize = theApp.m_Options.m_nMDITabsBorderSize; params.m_bTabIcons = theApp.m_Options.m_bMDITabsIcons; params.m_bFlatFrame = theApp.m_Options.m_bFlatFrame; params.m_bTabCustomTooltips = theApp.m_Options.m_bCustomTooltips; EnableMDITabbedGroups (TRUE, params); break; } // Some "Windows..." commands are non-relevant when all MDI child windows are always maximized: CList<UINT, UINT> lstCommands; if (theApp.m_Options.IsMDITabsDisabled()) { lstCommands.AddTail (ID_WINDOW_CASCADE); lstCommands.AddTail (ID_WINDOW_TILE_HORZ); lstCommands.AddTail (ID_WINDOW_ARRANGE); } CMFCToolBar::SetNonPermittedCommands (lstCommands); if (bResetMDIChild) { // Adjust MDI child windows: BOOL bMaximize = !theApp.m_Options.IsMDITabsDisabled(); HWND hwndT = ::GetWindow(m_hWndMDIClient, GW_CHILD); while (hwndT != NULL) { CMDIChildWndEx* pFrame = DYNAMIC_DOWNCAST(CMDIChildWndEx, CWnd::FromHandle(hwndT)); if (pFrame != NULL) { ASSERT_VALID (pFrame); if (bMaximize) { pFrame->ModifyStyle(WS_SYSMENU, 0); } else { pFrame->ModifyStyle(0, WS_SYSMENU); pFrame->ShowWindow(SW_RESTORE); // Force a resize to happen on all the "restored" MDI child windows CRect rectFrame; pFrame->GetWindowRect(rectFrame); pFrame->SetWindowPos(NULL, -1, -1, rectFrame.Width() + 1, rectFrame.Height(), SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE); pFrame->SetWindowPos(NULL, -1, -1, rectFrame.Width(), rectFrame.Height(), SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE); } } hwndT = ::GetWindow(hwndT, GW_HWNDNEXT); } if (bMaximize) { m_wndMenuBar.SetMaximizeMode (FALSE); } } if (m_wndWorkSpace.IsAutoHideMode ()) { m_wndWorkSpace.BringWindowToTop (); CPaneDivider* pSlider = m_wndWorkSpace.GetDefaultPaneDivider (); if (pSlider != NULL) { pSlider->BringWindowToTop (); } } if (m_wndWorkSpace2.IsAutoHideMode ()) { m_wndWorkSpace2.BringWindowToTop (); CPaneDivider* pSlider = m_wndWorkSpace2.GetDefaultPaneDivider (); if (pSlider != NULL) { pSlider->BringWindowToTop (); } } CMDIFrameWndEx::m_bDisableSetRedraw = theApp.m_Options.m_bDisableMDIChildRedraw; RecalcLayout (); RedrawWindow (NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE); }