// MainFrm.cpp : implementation of the CMainFrame class // // This file is a part of the XTREME TOOLKIT PRO MFC class library. // (c)1998-2008 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 "GUI_VisualStudio.h" #include "MainFrm.h" #include "DynamicHelpView.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_WINDOW_AUTOHIDEALL, OnWindowAutohideall) ON_COMMAND(ID_WINDOW_MORE, OnWindowMore) ON_WM_CLOSE() //}}AFX_MSG_MAP ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify) ON_COMMAND(ID_VIEW_FULLSCREEN, OnFullScreen) ON_UPDATE_COMMAND_UI(ID_VIEW_FULLSCREEN, OnUpdateFullScreen) ON_COMMAND_RANGE(ID_VIEW_SOLUTIONEXPLORER, ID_VIEW_TOOLBOX, OnShowView) ON_COMMAND_RANGE(ID_VIEW_CLASSVIEW, ID_HELP_DYNAMICHELP, OnShowViewOther) ON_COMMAND(ID_VIEW_OTHER, OnViewOther) ON_UPDATE_COMMAND_UI(ID_VIEW_OTHER, OnUpdateViewOther) ON_COMMAND_RANGE(ID_FILE_NEW_PROJECT + 1, 200, OnEmptyCommandRange) ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize) ON_XTP_CREATECONTROL() ON_COMMAND_RANGE(ID_THEME_VC6, ID_THEME_VC9, OnTheme) ON_UPDATE_COMMAND_UI_RANGE(ID_THEME_VC6, ID_THEME_VC9, OnUpdateTheme) #ifdef _XTP_INCLUDE_SKINFRAMEWORK ON_COMMAND_RANGE(ID_SKINFRAMEWORK_VISTABLUE, ID_SKINFRAMEWORK_SYSTEM, OnSkinFramework) ON_COMMAND_RANGE(ID_THEME_SKINFRAMEWORK, ID_THEME_SKINFRAMEWORK, OnEmptyCommandRange) #endif ON_XTP_EXECUTE(ID_EDIT_STATE, OnEditState) ON_UPDATE_COMMAND_UI(ID_EDIT_STATE, OnUpdateEditState) ON_XTP_EXECUTE(ID_EDIT_PLATFORM, OnEditPlatform) ON_UPDATE_COMMAND_UI(ID_EDIT_PLATFORM, OnUpdateEditPlatform) ON_WM_ACTIVATE() 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() { m_nState = 1; m_nPlatform = 0; m_bFullScreen = FALSE; // get path of executable TCHAR szBuff[_MAX_PATH]; VERIFY(::GetModuleFileName(AfxGetInstanceHandle(), szBuff, _MAX_PATH)); LPTSTR lpszExt = _tcsrchr(szBuff, '.'); lstrcpy(lpszExt, _T(".xml")); m_strIniFileName = szBuff; m_pFullScreenLayout = NULL; m_rcMainFrame.SetRectEmpty(); m_nTheme = ID_THEME_VC9; m_nOtherView = ID_VIEW_CLASSVIEW; #ifdef _XTP_INCLUDE_SKINFRAMEWORK XTPSkinManager()->GetResourceFile()->SetModuleHandle(AfxGetInstanceHandle()); #endif } CMainFrame::~CMainFrame() { if (m_pFullScreenLayout) { delete m_pFullScreenLayout; } } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; 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 (!InitCommandBars()) return -1; CXTPPaintManager::SetTheme(xtpThemeVisualStudio2008); CXTPCommandBars* pCommandBars = GetCommandBars(); CXTPCommandBar* pMenuBar = pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME); pMenuBar->SetFlags(xtpFlagIgnoreSetMenuMessage); CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop); if (!pCommandBar || !pCommandBar->LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; } CXTPToolBar* pWebBar = (CXTPToolBar*)pCommandBars->Add(_T("Web"), xtpBarTop); if (!pWebBar || !pWebBar->LoadToolBar(IDR_TOOLBAR_WEB)) { TRACE0("Failed to create toolbar\n"); return -1; } CXTPToolBar* pThemeBar = (CXTPToolBar*)pCommandBars->Add(_T("Theme"), xtpBarTop); if (!pThemeBar || !pThemeBar->LoadToolBar(IDR_TOOLBAR_THEME)) { TRACE0("Failed to create toolbar\n"); return -1; } DockRightOf(pThemeBar, pWebBar); CXTPToolBar* pFullScreenBar = (CXTPToolBar*)pCommandBars->Add(_T("Full Screen"), xtpBarTop); if (!pFullScreenBar || !pFullScreenBar->LoadToolBar(IDR_TOOLBAR_FULLSCREEN)) { TRACE0("Failed to create toolbar\n"); return -1; } pFullScreenBar->SetVisible(FALSE); XTPPaintManager()->GetIconsInfo()->bUseDisabledIcons = TRUE; XTPImageManager()->SetIcons(IDR_TOOLBAR_EXT); pCommandBars->GetCommandBarsOptions()->ShowKeyboardCues(xtpKeyboardCuesShowWindowsDefault); pCommandBars->GetToolTipContext()->SetStyle(xtpToolTipOffice); pCommandBars->GetShortcutManager()->SetAccelerators(IDR_MAINFRAME); CreateToolBox(); m_paneManager.InstallDockingPanes(this); m_paneManager.SetTheme(xtpPaneThemeVisualStudio2005); m_paneManager.CreatePane( ID_WINDOWS_OUTPUT, CRect(0, 0, 150, 120), xtpPaneDockBottom); CXTPDockingPane* paneToolBox = m_paneManager.CreatePane( ID_VIEW_TOOLBOX, CRect(0, 0, 200, 120), xtpPaneDockRight); CXTPDockingPane* paneClassView = m_paneManager.CreatePane( ID_VIEW_CLASSVIEW, CRect(0, 0, 230, 140), xtpPaneDockLeft); CXTPDockingPane* paneSolutionExplorer = m_paneManager.CreatePane( ID_VIEW_SOLUTIONEXPLORER, CRect(0, 0, 230, 140), xtpPaneDockLeft); CXTPDockingPane* paneResourceView = m_paneManager.CreatePane( ID_VIEW_RESOURCEVIEW, CRect(0, 0, 230, 140), xtpPaneDockLeft); CXTPDockingPane* paneHelpView =m_paneManager.CreatePane( ID_HELP_DYNAMICHELP, CRect(0, 0, 210, 140), xtpPaneDockBottom, paneToolBox); paneHelpView->Close(); m_paneManager.AttachPane(paneClassView, paneSolutionExplorer); m_paneManager.AttachPane(paneResourceView, paneClassView); paneClassView->Select(); m_paneManager.CreatePane( ID_VIEW_PROPERTIESWINDOW, CRect(0, 0, 180, 140), xtpPaneDockBottom, paneClassView); m_paneManager.EnableKeyboardNavigate(); //CXTPPropExchangeIniFile px(TRUE, 0, _T("Settings")); // To serialize to ini file CXTPPropExchangeXMLNode px(TRUE, 0, _T("Settings")); // To serialize to XML file if (px.LoadFromFile(m_strIniFileName)) { CXTPPropExchangeSection pxTaskPanel(px.GetSection(_T("TaskPanel"))); m_wndTaskPanel.GetGroups()->DoPropExchange(&pxTaskPanel); CXTPPropExchangeSection pxNormalLayout(px.GetSection(_T("NormalLayout"))); ExchangeLayout(&pxNormalLayout); m_pFullScreenLayout = DYNAMIC_DOWNCAST(CXTPPropExchangeXMLNode, px.GetSection(_T("FullScreenLayout"))); ASSERT(m_pFullScreenLayout); } else { ResetToolboxItems(); } CXTPImageManager* pImageManager = pCommandBars->GetImageManager(); pImageManager->InternalAddRef(); m_paneManager.SetImageManager(pImageManager); m_paneManager.SetAlphaDockingContext(TRUE); m_paneManager.SetShowDockingContextStickers(TRUE); m_paneManager.SetShowContentsWhileDragging(TRUE); m_paneManager.SetDefaultPaneOptions(xtpPaneHasMenuButton); VERIFY(m_MTIClientWnd.Attach(this, TRUE)); m_MTIClientWnd.EnableToolTips(); m_MTIClientWnd.GetPaintManager()->m_bShowIcons = FALSE; m_MTIClientWnd.SetNewTabPosition(xtpWorkspaceNewTabLeftMost); m_MTIClientWnd.SetFlags(xtpWorkspaceHideArrowsAlways | xtpWorkspaceShowActiveFiles); 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 CXTPTaskPanelGroup* CMainFrame::CreateToolboxGroup(UINT nID) { CXTPTaskPanelGroup* pFolder = m_wndTaskPanel.AddGroup(nID); CXTPTaskPanelGroupItem* pPointer = pFolder->AddLinkItem(ID_TOOLBOXITEM_POINTER, 0); pPointer->SetItemSelected(TRUE); pPointer->AllowDrag(FALSE); pPointer->AllowDrop(FALSE); return pFolder; } void CMainFrame::ResetToolboxItems() { m_wndTaskPanel.GetGroups()->Clear(FALSE); CXTPTaskPanelGroup* pFolderPropertyPanes = CreateToolboxGroup(ID_TOOLBOXFOLDER_PROPERTYPANES); CXTPTaskPanelGroup* pFolderData = CreateToolboxGroup(ID_TOOLBOXFOLDER_DATA); pFolderData->AddLinkItem(ID_TOOLBOXITEM_DATASET ,26); pFolderData->AddLinkItem(ID_TOOLBOXITEM_OLEDBDATAADAPTER ,27); pFolderData->AddLinkItem(ID_TOOLBOXITEM_OLEDBCONNECTION ,28); pFolderData->AddLinkItem(ID_TOOLBOXITEM_OLEDBCOMMAND ,29); pFolderData->AddLinkItem(ID_TOOLBOXITEM_SQLDATAADAPTER ,30); pFolderData->AddLinkItem(ID_TOOLBOXITEM_SQLCONNECTION ,31); pFolderData->AddLinkItem(ID_TOOLBOXITEM_SQLCOMMAND ,32); pFolderData->AddLinkItem(ID_TOOLBOXITEM_DATAVIEW ,33); CXTPTaskPanelGroup* pFolderComponents = CreateToolboxGroup(ID_TOOLBOXFOLDER_COMPONENTS); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_FILESYSTEMWATCHER ,34); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_EVENTLOG ,35); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_DIRECTORYENTRY ,36); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_DIRECTORYSEARCHER ,37); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_MESSAGEQUEUE ,38); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_PERFORMANCECOUNTER ,39); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_PROCESS ,40); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_SERVICECONTROLLER ,41); pFolderComponents->AddLinkItem(ID_TOOLBOXITEM_TIMER ,42); CXTPTaskPanelGroup* pFolderWindowsForms = CreateToolboxGroup(ID_TOOLBOXFOLDER_WINDOWSFORMS); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_BUTTON, 1); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_CHECK_BOX, 2); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_EDIT_CONTROL, 3); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_COMBO_BOX, 4); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_LIST_BOX, 5); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_GROUP_BOX, 6); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_RADIO_BUTTON, 7); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_STATIC_TEXT, 8); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_PICTURE_CONTROL, 9); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_HORIZONTAL_SCROLL_BAR, 10); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_VERTICAL_SCROLL_BAR, 11); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_SLIDER_CONTROL, 12); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_SPIN_CONTROL, 13); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_PROGRESS_CONTROL, 14); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_HOT_KEY, 15); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_LIST_CONTROL, 16); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_TREE_CONTROL, 17); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_TAB_CONTROL, 18); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_ANIMATION_CONTROL, 19); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_RICH_EDIT_CONTROL, 20); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_DATE_TIME_PICKER, 21); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_MONTH_CALENDAR_CONTROL,22); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_IP_ADDRESS_CONTROL, 23); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_EXTENDED_COMBO_BOX, 24); pFolderWindowsForms->AddLinkItem(ID_TOOLBOXITEM_CUSTOM_CONTROL, 25); CreateToolboxGroup(ID_TOOLBOXFOLDER_CLIPBOARDRING); CreateToolboxGroup(ID_TOOLBOXFOLDER_GENERAL); pFolderPropertyPanes->SetExpanded(TRUE); } CWnd* CMainFrame::CreateToolBox() { if (!m_wndTaskPanel.GetSafeHwnd()) { if (!m_wndTaskPanel.Create(WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN, CRect(0, 0, 0, 0), this, 0)) return FALSE; m_wndTaskPanel.SetOwner(this); m_wndTaskPanel.GetImageManager()->SetIcons(IDB_TOOLBOXICONS, 0, 0, CSize(16, 16)); m_wndTaskPanel.SetBehaviour(xtpTaskPanelBehaviourExplorer); m_wndTaskPanel.SetTheme(xtpTaskPanelThemeToolboxWhidbey); m_wndTaskPanel.SetHotTrackStyle(xtpTaskPanelHighlightItem); m_wndTaskPanel.SetSelectItemOnFocus(TRUE); m_wndTaskPanel.SetSingleSelection(); m_wndTaskPanel.AllowDrag(TRUE); } return &m_wndTaskPanel; } void CMainFrame::ShowDockingPanePopupMenu(CXTPDockingPane* pPopupPane, CPoint pt, LPRECT lprcExclude) { CMenu menu; VERIFY(menu.LoadMenu(IDR_POPUP_PANES)); CMenu* pPopup = menu.GetSubMenu(0); if (pPopupPane->IsHidden()) { pPopup->CheckMenuItem(ID_POPUP_AUTOHIDE, MF_BYCOMMAND|MF_CHECKED); pPopup->EnableMenuItem(ID_POPUP_FLOATING, MF_BYCOMMAND|MF_DISABLED); pPopup->EnableMenuItem(ID_POPUP_DOCKABLE, MF_BYCOMMAND|MF_DISABLED); } else if (pPopupPane->GetOptions() & xtpPaneNoDockable) { pPopup->CheckMenuItem(ID_POPUP_FLOATING, MF_BYCOMMAND|MF_CHECKED); } else { pPopup->CheckMenuItem(ID_POPUP_DOCKABLE, MF_BYCOMMAND|MF_CHECKED); } TPMPARAMS tpm; tpm.cbSize = sizeof(TPMPARAMS); tpm.rcExclude = lprcExclude ? *lprcExclude : CRect(0, 0, 0, 0); int nCommand = GetCommandBars()->TrackPopupMenuEx(pPopup, TPM_RIGHTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD, pt.x, pt.y, NULL, &tpm); switch (nCommand) { case ID_POPUP_HIDE: pPopupPane->Close(); break; case ID_POPUP_AUTOHIDE: m_paneManager.ToggleAutoHide(pPopupPane); break; case ID_POPUP_DOCKABLE: if (pPopupPane->GetOptions() & xtpPaneNoDockable) { pPopupPane->SetOptions(pPopupPane->GetOptions() & ~xtpPaneNoDockable); } break; case ID_POPUP_FLOATING: if ((pPopupPane->GetOptions() & xtpPaneNoDockable) == 0) { if (!pPopupPane->IsFloating()) m_paneManager.ToggleDocking(pPopupPane); pPopupPane->SetOptions(pPopupPane->GetOptions() | xtpPaneNoDockable); } break; } } LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam) { if (wParam == XTP_DPN_SHOWWINDOW) { CXTPDockingPane* pPane = (CXTPDockingPane*)lParam; if (!pPane->IsValid()) { switch (pPane->GetID()) { case ID_VIEW_TOOLBOX: pPane->Attach(CreateToolBox()); break; case ID_VIEW_CLASSVIEW: if (!m_wndClassView.GetSafeHwnd()) { m_wndClassView.Create(_T("STATIC"), NULL, WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CXTPEmptyRect(), this, 0); } pPane->Attach(&m_wndClassView); break; case ID_VIEW_RESOURCEVIEW: if (!m_wndResourceView.GetSafeHwnd()) { m_wndResourceView.Create(_T("STATIC"), NULL, WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CXTPEmptyRect(), this, 0); } pPane->Attach(&m_wndResourceView); break; case ID_VIEW_SOLUTIONEXPLORER: if (!m_wndSolutionExplorer.GetSafeHwnd()) { m_wndSolutionExplorer.Create(_T("STATIC"), NULL, WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CXTPEmptyRect(), this, 0); } pPane->Attach(&m_wndSolutionExplorer); break; case ID_VIEW_PROPERTIESWINDOW: if (!m_wndProperties.GetSafeHwnd()) { m_wndProperties.Create(_T("STATIC"), NULL, WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CXTPEmptyRect(), this, 0); } pPane->Attach(&m_wndProperties); break; case ID_WINDOWS_OUTPUT: if (!m_wndOutput.GetSafeHwnd()) { m_wndOutput.Create(WS_HSCROLL|ES_AUTOHSCROLL|ES_MULTILINE|WS_VISIBLE, CXTPEmptyRect(), this, 0); } pPane->Attach(&m_wndOutput); break; case ID_HELP_DYNAMICHELP: { // attach the dynamic help view to the pane. CWnd* pView = pPane->AttachView(this, RUNTIME_CLASS(CDynamicHelpView)); pView; break; } } } return 1; } if (wParam == XTP_DPN_CONTEXTMENU) { XTP_DOCKINGPANE_CLICK* pClick = (XTP_DOCKINGPANE_CLICK*)lParam; CXTPDockingPane* pPopupPane = pClick->pPane; if (!pPopupPane) return FALSE; ShowDockingPanePopupMenu(pPopupPane, pClick->pt, pClick->rcExclude); return TRUE; } return 0; } void CMainFrame::OnShowView(UINT nID) { m_paneManager.ShowPane(nID); } void CMainFrame::OnShowViewOther(UINT nID) { m_nOtherView = nID; m_paneManager.ShowPane(nID); } void CMainFrame::OnViewOther() { m_paneManager.ShowPane(m_nOtherView); } void CMainFrame::OnUpdateViewOther(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); CXTPControl* pControl = CXTPControl::FromUI(pCmdUI); if (pControl && pControl->GetIconId() != m_nOtherView) { pControl->SetIconId(m_nOtherView); CString strPrompt; strPrompt.LoadString(m_nOtherView); pControl->SetPrompt(strPrompt); } } void CMainFrame::OnEmptyCommandRange(UINT) { } void CMainFrame::OnWindowAutohideall() { CXTPDockingPaneInfoList& lstPanes = m_paneManager.GetPaneList(); POSITION pos = lstPanes.GetHeadPosition(); while (pos) { CXTPDockingPane* pPane = lstPanes.GetNext(pos); if (!pPane->IsClosed() && !pPane->IsHidden()) m_paneManager.HidePane(pPane); } } void CMainFrame::OnWindowMore() { CXTWindowList dlg(this); dlg.DoModal(); } int CMainFrame::OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl) { if (lpCreateControl->bToolBar) { CXTPToolBar* pToolBar = DYNAMIC_DOWNCAST(CXTPToolBar, lpCreateControl->pCommandBar); if (!pToolBar) return FALSE; if (lpCreateControl->nID == ID_VIEW_OTHER && pToolBar->GetBarID() == IDR_MAINFRAME) { lpCreateControl->controlType = xtpControlSplitButtonPopup; return TRUE; } if (lpCreateControl->nID == ID_VIEW_FULLSCREEN) { lpCreateControl->buttonStyle = xtpButtonIconAndCaption; return TRUE; } if (lpCreateControl->nID == ID_THEME_SKINFRAMEWORK) { lpCreateControl->controlType = xtpControlPopup; return TRUE; } if (lpCreateControl->nID == ID_FILE_NEW_PROJECT && pToolBar->GetBarID() == IDR_MAINFRAME) { lpCreateControl->controlType = xtpControlSplitButtonPopup; return TRUE; } if (lpCreateControl->nID == ID_PROJECT_ADDNEWITEM && pToolBar->GetBarID() == IDR_MAINFRAME) { lpCreateControl->controlType = xtpControlSplitButtonPopup; return TRUE; } if (lpCreateControl->nID == ID_EDIT_FIND_EX && pToolBar->GetBarID() == IDR_MAINFRAME) { CXTPControlComboBox* pComboFind = (CXTPControlComboBox*)CXTPControlComboBox::CreateObject(); pComboFind->SetDropDownListStyle(); pComboFind->AddString(_T("Line1")); pComboFind->AddString(_T("Line2")); pComboFind->AddString(_T("Line3")); pComboFind->SetWidth(180); pComboFind->SetCaption(_T("Find")); pComboFind->SetStyle(xtpComboLabel); lpCreateControl->pControl = pComboFind; return TRUE; } if (lpCreateControl->nID == ID_EDIT_STATE && pToolBar->GetBarID() == IDR_MAINFRAME) { CXTPControlComboBox* pComboState = (CXTPControlComboBox*)CXTPControlComboBox::CreateObject(); pComboState->AddString(_T("Debug")); pComboState->AddString(_T("Release")); pComboState->AddString(_T("Configuration Manager")); pComboState->SetDropDownWidth(150); lpCreateControl->pControl = pComboState; return TRUE; } if (lpCreateControl->nID == ID_EDIT_PLATFORM && pToolBar->GetBarID() == IDR_MAINFRAME) { CXTPControlComboBox* pComboState = (CXTPControlComboBox*)CXTPControlComboBox::CreateObject(); pComboState->AddString(_T("Win32")); pComboState->AddString(_T("Configuration Manager")); pComboState->SetDropDownWidth(150); lpCreateControl->pControl = pComboState; return TRUE; } if (lpCreateControl->nID == ID_GOTO_URL && pToolBar->GetBarID() == IDR_TOOLBAR_WEB) { CXTPControlComboBox* pComboUrl = (CXTPControlComboBox*)CXTPControlComboBox::CreateObject(); pComboUrl->AddString(_T("http://www.codejock.com")); pComboUrl->AddString(_T("ms-help://MS.VSCC/vsccCommon/html/vsccCommon_Start_Page.htm")); pComboUrl->SetWidth(200); pComboUrl->SetDropDownWidth(300); pComboUrl->SetDropDownListStyle(); pComboUrl->SetFlags(xtpFlagManualUpdate); pComboUrl->SetEditText(_T("http://www.codejock.com")); pComboUrl->EnableShellAutoComplete(); lpCreateControl->pControl = pComboUrl; return TRUE; } } return FALSE; } void CMainFrame::OnCustomize() { CXTPCustomizeSheet cs(GetCommandBars()); CXTPCustomizeKeyboardPage pageKeyboard(&cs); cs.AddPage(&pageKeyboard); pageKeyboard.AddCategories(IDR_MAINFRAME, TRUE); CXTPCustomizeOptionsPage pageOptions(&cs); cs.AddPage(&pageOptions); CXTPCustomizeCommandsPage* pCommands = cs.GetCommandsPage(); pCommands->AddCategories(IDR_MAINFRAME, TRUE); pCommands->InsertAllCommandsCategory(); pCommands->InsertBuiltInMenus(IDR_MAINFRAME); pCommands->InsertNewMenuCategory(); cs.DoModal(); } void CMainFrame::OnEditState(NMHDR* pNMHDR, LRESULT* pResult) { NMXTPCONTROL* tagNMCONTROL = (NMXTPCONTROL*)pNMHDR; CXTPControlComboBox* pControl = (CXTPControlComboBox*)tagNMCONTROL->pControl; if (pControl->GetType() == xtpControlComboBox) { int nState = pControl->GetCurSel(); if (nState != 2) { m_nState = nState; } else { MessageBox(_T("Configuration Manager")); pControl->SetCurSel(m_nState); } *pResult = TRUE; // Handled } } void CMainFrame::OnUpdateEditState(CCmdUI* pCmdUI) { CXTPCommandBar* pToolBar = (CXTPToolBar*)pCmdUI->m_pOther; if (pToolBar && !XTPMouseManager()->IsTrackedLock()) { CXTPControlComboBox* pStateCombo = (CXTPControlComboBox*)pToolBar->GetControls()->GetAt(pCmdUI->m_nIndex); if (pStateCombo->GetType() == xtpControlComboBox) { pStateCombo->SetCurSel(m_nState); } } pCmdUI->Enable(TRUE); } void CMainFrame::OnEditPlatform(NMHDR* pNMHDR, LRESULT* pResult) { NMXTPCONTROL* tagNMCONTROL = (NMXTPCONTROL*)pNMHDR; CXTPControlComboBox* pControl = (CXTPControlComboBox*)tagNMCONTROL->pControl; if (pControl->GetType() == xtpControlComboBox) { int nState = pControl->GetCurSel(); if (nState != 1) { m_nPlatform = nState; } else { MessageBox(_T("Configuration Manager")); pControl->SetCurSel(m_nPlatform); } *pResult = TRUE; // Handled } } void CMainFrame::OnUpdateEditPlatform(CCmdUI* pCmdUI) { CXTPCommandBar* pToolBar = (CXTPToolBar*)pCmdUI->m_pOther; if (pToolBar && !XTPMouseManager()->IsTrackedLock()) { CXTPControlComboBox* pStateCombo = (CXTPControlComboBox*)pToolBar->GetControls()->GetAt(pCmdUI->m_nIndex); if (pStateCombo->GetType() == xtpControlComboBox) { pStateCombo->SetCurSel(m_nPlatform); } } pCmdUI->Enable(TRUE); } void CMainFrame::OnClose() { //CXTPPropExchangeIniFile px(FALSE, 0, _T("Settings")); // To serialize to ini file CXTPPropExchangeXMLNode px(FALSE, 0, _T("Settings")); // To serialize to XML file if (px.OnBeforeExchange()) { CXTPPropExchangeSection pxTaskPanel(px.GetSection(_T("TaskPanel"))); m_wndTaskPanel.GetGroups()->DoPropExchange(&pxTaskPanel); // Reset Full Screen Mode if (m_bFullScreen) { OnFullScreen(); } CXTPPropExchangeSection pxNormalLayout(px.GetSection(_T("NormalLayout"))); ExchangeLayout(&pxNormalLayout); px.PutSection(m_pFullScreenLayout); px.SaveToFile(m_strIniFileName); } CMDIFrameWnd::OnClose(); } 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::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { static HWND hFocus = 0; if (nState == WA_INACTIVE) { hFocus = m_paneManager.GetActivePane() != NULL ? ::GetFocus() : NULL; } CMDIFrameWnd::OnActivate(nState, pWndOther, bMinimized); if (nState != WA_INACTIVE && hFocus) { ::SetFocus(hFocus); hFocus = NULL; } } void CMainFrame::ExchangeLayout(CXTPPropExchange* pPX, BOOL bSerializeControls /*= TRUE*/) { XTP_COMMANDBARS_PROPEXCHANGE_PARAM param; param.bSerializeControls = bSerializeControls; CXTPPropExchangeSection pxCommandBars(pPX->GetSection(_T("CommandBars"))); GetCommandBars()->DoPropExchange(&pxCommandBars, ¶m); CXTPPropExchangeSection secShortcuts(pPX->GetSection(_T("Shortcuts"))); GetCommandBars()->GetShortcutManager()->DoPropExchange(&secShortcuts); CXTPPropExchangeSection secOptions(pPX->GetSection(_T("Options"))); GetCommandBars()->GetCommandBarsOptions()->DoPropExchange(&secOptions, TRUE); CXTPPropExchangeSection pxDockingPane(pPX->GetSection(_T("DockingPane"))); m_paneManager.DoPropExchange(&pxDockingPane); } void CMainFrame::OnFullScreen() { m_bFullScreen ^= 1; CXTPPropExchangeXMLNode px(FALSE, 0, _T("Settings")); CXTPPropExchangeXMLNode* pxLayoutSave = DYNAMIC_DOWNCAST(CXTPPropExchangeXMLNode, px.GetSection(_T("FullScreenLayout"))); ASSERT(pxLayoutSave); // Save current layout if (pxLayoutSave != 0) { ExchangeLayout(pxLayoutSave, FALSE); } // If Full screen layout exists if (m_pFullScreenLayout && m_pFullScreenLayout->IsSectionExists(_T("CommandBars"))) { // Set it m_pFullScreenLayout->SetLoading(TRUE); ExchangeLayout(m_pFullScreenLayout, FALSE); } // Else create new fullscreen layout. Hide all toolbars and DockingPanes. else { for (int i = 0; i < GetCommandBars()->GetCount(); i++) { CXTPToolBar* pToolBar = GetCommandBars()->GetAt(i); pToolBar->SetVisible((pToolBar->GetType() == xtpBarTypeMenuBar) || (pToolBar->GetBarID() == IDR_TOOLBAR_FULLSCREEN)); } m_paneManager.CloseAll(); } // Save old layout if (m_pFullScreenLayout) { delete m_pFullScreenLayout; } m_pFullScreenLayout = pxLayoutSave; if (m_bFullScreen) { GetWindowRect(&m_rcMainFrame); ModifyStyle(WS_CAPTION|WS_THICKFRAME, 0); // Now resize the main window CRect rcScreen = XTPMultiMonitor()->GetScreenArea(this); int cxBorder = ::GetSystemMetrics(SM_CXBORDER); int cyBorder = ::GetSystemMetrics(SM_CYBORDER); SetWindowPos(NULL, rcScreen.left - cxBorder, rcScreen.top - cyBorder, rcScreen.Width() + cxBorder * 2, rcScreen.Height() + cyBorder * 2, SWP_NOZORDER); m_wndStatusBar.ShowWindow(SW_HIDE); } else { ModifyStyle(0, WS_CAPTION|WS_THICKFRAME); MoveWindow(&m_rcMainFrame); m_wndStatusBar.ShowWindow(SW_SHOW); } RecalcLayout(TRUE); } void CMainFrame::OnUpdateFullScreen(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bFullScreen); } class CVisualStudio6Theme : public CXTPDefaultTheme { CSize DrawCommandBarGripper(CDC* pDC, CXTPCommandBar* pBar, BOOL bDraw) { if (pBar->IsDialogBar() || pBar->GetPosition() == xtpBarFloating) return CXTPDefaultTheme::DrawCommandBarGripper(pDC, pBar, bDraw); CRect rc; pBar->GetClientRect(&rc); if (pBar->GetPosition() == xtpBarRight || pBar->GetPosition() == xtpBarLeft) { if (pDC && bDraw) { Draw3dRect(pDC, CRect(3, 3, rc.right - 3, 6), COLOR_BTNHILIGHT, COLOR_3DSHADOW); Draw3dRect(pDC, CRect(3, 7, rc.right - 3, 10), COLOR_BTNHILIGHT, COLOR_3DSHADOW); } return CSize(0, 10); } else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom) { if (pDC && bDraw) { Draw3dRect(pDC, CRect(3, 3, 6, rc.bottom - 3), COLOR_BTNHILIGHT, COLOR_3DSHADOW); Draw3dRect(pDC, CRect(7, 3, 10, rc.bottom - 3), COLOR_BTNHILIGHT, COLOR_3DSHADOW); } return CSize(10, 0); } return 0; } }; void CMainFrame::OnSkinFramework(UINT nID) { #ifdef _XTP_INCLUDE_SKINFRAMEWORK switch (nID) { case ID_SKINFRAMEWORK_VISTABLUE: XTPSkinManager()->LoadSkin(NULL, _T("NORMALBLUE.INI")); break; case ID_SKINFRAMEWORK_VISTABLACK: XTPSkinManager()->LoadSkin(NULL, _T("NORMALBLACK.INI")); break; default: XTPSkinManager()->LoadSkin(NULL); break; } #endif } void CMainFrame::OnTheme(UINT nID) { m_nTheme = nID; switch (nID) { case ID_THEME_VC6: XTPPaintManager()->SetCustomTheme(new CVisualStudio6Theme); m_paneManager.SetTheme(xtpPaneThemeGrippered); m_wndTaskPanel.SetTheme(xtpTaskPanelThemeToolbox); m_wndProperties.m_wndPropertyGrid.SetTheme(xtpGridThemeDefault); break; case ID_THEME_VC7: XTPPaintManager()->SetTheme(xtpThemeOfficeXP); m_paneManager.SetTheme(xtpPaneThemeOffice); m_wndTaskPanel.SetTheme(xtpTaskPanelThemeToolbox); m_wndProperties.m_wndPropertyGrid.SetTheme(xtpGridThemeOfficeXP); break; case ID_THEME_VC8: XTPPaintManager()->SetTheme(xtpThemeWhidbey); m_paneManager.SetTheme(xtpPaneThemeVisualStudio2005); m_wndTaskPanel.SetTheme(xtpTaskPanelThemeToolboxWhidbey); m_wndProperties.m_wndPropertyGrid.SetTheme(xtpGridThemeWhidbey); break; case ID_THEME_VC9: XTPPaintManager()->SetTheme(xtpThemeVisualStudio2008); m_paneManager.SetTheme(xtpPaneThemeVisualStudio2005); m_wndTaskPanel.SetTheme(xtpTaskPanelThemeToolboxWhidbey); m_wndProperties.m_wndPropertyGrid.SetTheme(xtpGridThemeWhidbey); break; } GetCommandBars()->RedrawCommandBars(); } void CMainFrame::OnUpdateTheme(CCmdUI* pCmdUI) { pCmdUI->SetCheck(pCmdUI->m_nID == m_nTheme ? TRUE : FALSE); }