// MainFrm.cpp // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "TabManager.h" #include "MainFrm.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_COMMAND(ID_VIEW_THEME_OFFICE2000, OnViewThemeOffice2000) ON_COMMAND(ID_VIEW_THEME_OFFICEXP, OnViewThemeOfficeXP) ON_COMMAND(ID_VIEW_THEME_OFFICE2003, OnViewThemeOffice2003) ON_COMMAND(ID_VIEW_THEME_NATIVEXP, OnViewThemeNativeXP) ON_COMMAND(ID_VIEW_THEME_VISUALSTUDIO2005, OnViewThemeVisualStudio2005) ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICE2000, OnUpdateViewThemeOffice2000) ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICEXP, OnUpdateViewThemeOfficeXP) ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICE2003, OnUpdateViewThemeOffice2003) ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_NATIVEXP, OnUpdateViewThemeNativeXP) ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_VISUALSTUDIO2005, OnUpdateViewThemeVisualStudio2005) ON_WM_CLOSE() ON_COMMAND(ID_VIEW_SWITCH_THEME, OnSwitchTheme) ON_COMMAND(ID_VIEW_PROPERTIES, OnViewProperties) //}}AFX_MSG_MAP ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize) ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify) ON_XTP_CREATECONTROL() END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { } CMainFrame::~CMainFrame() { } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // Create Status bar. // Important: All control bars including the Status Bar // must be created before CommandBars.... 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 } // Initialize the command bars if (!InitCommandBars()) return -1; // Get a pointer to the command bars object. CXTPCommandBars* pCommandBars = GetCommandBars(); if (pCommandBars == NULL) { TRACE0("Failed to create command bars object.\n"); return -1; // fail to create } // Add the menu bar CXTPCommandBar* pMenuBar = pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME); if (pMenuBar == NULL) { TRACE0("Failed to create menu bar.\n"); return -1; // fail to create } // Create ToolBar CXTPToolBar* pToolBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop); if (!pToolBar || !pToolBar->LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; } m_MTIClientWnd.Attach(this, TRUE); m_paneManager.InstallDockingPanes(this); m_paneManager.SetTheme(xtpPaneThemeDefault); // Create docking panes. CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane(IDR_PANE1, CRect(0, 0, 200, 120), xtpPaneDockLeft); CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane(IDR_PANE2, CRect(0, 0, 200, 120), xtpPaneDockTop, pwndPane1); CXTPDockingPane* pwndPane3 = m_paneManager.CreatePane(IDR_PANE3, CRect(0, 0, 200, 120), xtpPaneDockLeft, pwndPane2); m_paneManager.AttachPane(pwndPane2, pwndPane1); m_paneManager.AttachPane(pwndPane3, pwndPane1); CXTPDockingPane* pwndPane4 = m_paneManager.CreatePane(IDR_PANE4, CRect(0, 0, 200, 120), xtpPaneDockRight); CXTPDockingPane* pwndPane5 = m_paneManager.CreatePane(IDR_PANE5, CRect(0, 0, 200, 120), xtpPaneDockBottom, pwndPane4); CXTPDockingPane* pwndPane6 = m_paneManager.CreatePane(IDR_PANE6, CRect(0, 0, 200, 120), xtpPaneDockBottom, pwndPane5); pwndPane6->SetIconID(IDR_PANE1); m_paneManager.AttachPane(pwndPane5, pwndPane4); m_paneManager.AttachPane(pwndPane6, pwndPane4); m_paneManager.HidePane(pwndPane6); // Set the icons for the docking pane tabs. int nIDs1[] = { IDR_PANE1, IDR_PANE2, IDR_PANE3, IDR_PANE4, IDR_PANE5 }; m_paneManager.SetIcons(IDB_BITMAP1, nIDs1, 5, RGB(0, 255, 0)); m_wndProperties.Create(this); m_wndProperties.CenterWindow(this); m_wndProperties.ShowWindow(SW_SHOW); pCommandBars->GetCommandBarsOptions()->ShowKeyboardCues(xtpKeyboardCuesShowWindowsDefault); pCommandBars->GetPaintManager()->m_bAutoResizeIcons = TRUE; // Load the previous state for command bars. LoadCommandBars(_T("CommandBars")); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if (!CMDIFrameWnd::PreCreateWindow(cs)) return FALSE; cs.lpszClass = _T("XTPMainFrame"); CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME)); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CMDIFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CMDIFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam) { if (wParam == XTP_DPN_SHOWWINDOW) { // get a pointer to the docking pane being shown. CXTPDockingPane* pPane = (CXTPDockingPane*)lParam; if (!pPane->IsValid()) { int nIndex = pPane->GetID() - IDR_PANE1; _ASSERTE(nIndex >= 0 && nIndex < sizeof(m_wndPanes) / sizeof(m_wndPanes[0])); // create and attach the edit control for this pane. if (!::IsWindow(m_wndPanes[nIndex].m_hWnd)) { if (!m_wndPanes[nIndex].CreateEx(WS_EX_CLIENTEDGE, _T("EDIT"), _T(""), WS_CHILD | ES_AUTOVSCROLL | ES_MULTILINE, CRect(0, 0, 200, 120), this, 0)) { TRACE0("Error creating pane edit control.\n"); } // AdjustStyle(GetDockingPaneManager()->GetCurrentTheme()); } pPane->Attach(&m_wndPanes[nIndex]); } return TRUE; // handled } return FALSE; } void CMainFrame::OnThemeChanged() { GetCommandBars()->GetPaintManager()->m_bAutoResizeIcons = TRUE; GetCommandBars()->RedrawCommandBars(); m_paneManager.RedrawPanes(); m_MTIClientWnd.UpdateContents(); m_wndProperties.UpdateAll(); } void CMainFrame::OnSwitchTheme() { switch (XTPPaintManager()->GetCurrentTheme()) { case xtpThemeOffice2000: OnViewThemeOfficeXP(); break; case xtpThemeOfficeXP: OnViewThemeOffice2003(); break; case xtpThemeOffice2003: OnViewThemeNativeXP(); break; case xtpThemeNativeWinXP: OnViewThemeVisualStudio2005(); break; case xtpThemeVisualStudio2005: OnViewThemeOffice2000(); break; } } void CMainFrame::OnViewThemeOffice2000() { CXTPPaintManager::SetTheme(xtpThemeOffice2000); m_paneManager.SetTheme(xtpPaneThemeDefault); OnThemeChanged(); } void CMainFrame::OnViewThemeOfficeXP() { CXTPPaintManager::SetTheme(xtpThemeOfficeXP); m_paneManager.SetTheme(xtpPaneThemeVisualStudio2003); OnThemeChanged(); } void CMainFrame::OnViewThemeOffice2003() { CXTPPaintManager::SetTheme(xtpThemeOffice2003); m_paneManager.SetTheme(xtpPaneThemeOffice2003); OnThemeChanged(); } void CMainFrame::OnViewThemeNativeXP() { CXTPPaintManager::SetTheme(xtpThemeNativeWinXP); m_paneManager.SetTheme(xtpPaneThemeWinNative); OnThemeChanged(); } void CMainFrame::OnViewThemeVisualStudio2005() { CXTPPaintManager::SetTheme(xtpThemeVisualStudio2005); m_paneManager.SetTheme(xtpPaneThemeVisualStudio2005); OnThemeChanged(); } void CMainFrame::OnUpdateViewThemeOffice2000(CCmdUI* pCmdUI) { pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeOffice2000); } void CMainFrame::OnUpdateViewThemeOfficeXP(CCmdUI* pCmdUI) { pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeOfficeXP); } void CMainFrame::OnUpdateViewThemeOffice2003(CCmdUI* pCmdUI) { pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeOffice2003); } void CMainFrame::OnUpdateViewThemeNativeXP(CCmdUI* pCmdUI) { pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeNativeWinXP); } void CMainFrame::OnUpdateViewThemeVisualStudio2005(CCmdUI* pCmdUI) { pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeVisualStudio2005); } int CMainFrame::OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl) { if (lpCreateControl->bToolBar) { CXTPToolBar* pToolBar = DYNAMIC_DOWNCAST(CXTPToolBar, lpCreateControl->pCommandBar); if (!pToolBar) return FALSE; if (lpCreateControl->nID == ID_VIEW_SWITCH_THEME) { lpCreateControl->controlType = xtpControlSplitButtonPopup; lpCreateControl->buttonStyle = xtpButtonIconAndCaption; return TRUE; } if (lpCreateControl->nID == ID_VIEW_PROPERTIES) { lpCreateControl->buttonStyle = xtpButtonIconAndCaption; return TRUE; } } return FALSE; } void CMainFrame::OnClose() { // Save the current state for command bars. SaveCommandBars(_T("CommandBars")); // TODO: Add your message handler code here and/or call default CMDIFrameWnd::OnClose(); } void CMainFrame::OnCustomize() { // get a pointer to the command bars object. CXTPCommandBars* pCommandBars = GetCommandBars(); if (pCommandBars == NULL) return; // instanciate the customize dialog CXTPCustomizeSheet dlg(pCommandBars); // add the options page to the customize dialog. CXTPCustomizeOptionsPage pageOptions(&dlg); dlg.AddPage(&pageOptions); // add the commands page to the customize dialog. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage(); pPageCommands->AddCategories(IDR_TABMANTYPE); // initialize the commands page page. pPageCommands->InsertAllCommandsCategory(); pPageCommands->InsertBuiltInMenus(IDR_TABMANTYPE); pPageCommands->InsertNewMenuCategory(); // display the customize dialog. dlg.DoModal(); } void CMainFrame::OnSetPreviewMode(BOOL bPreview, CPrintPreviewState* pState) { // Toggle CommandBars GetCommandBars()->OnSetPreviewMode(bPreview); // Toggle Tab Client m_MTIClientWnd.ShowWorkspace(!bPreview); // Toggle Docking Panes. m_paneManager.OnSetPreviewMode(bPreview); CMDIFrameWnd::OnSetPreviewMode(bPreview, pState); } void CMainFrame::OnViewProperties() { if (!m_wndProperties.IsWindowVisible()) { m_wndProperties.ShowWindow(SW_SHOW); } }