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;
}
Example #2
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);
}