www.gusucode.com > 一个VC++语法分析模块程序实例源码程序 > 一个VC++语法分析模块程序实例/CompileSys/CompileSys/IDE/MainFrm.cpp
// MainFrm.cpp : implementation of the CMainFrame class // Download: http://www.codesc.net #include "stdafx.h" #include "IDE.h" #include "MainFrm.h" #include "Splash.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_WM_INITMENUPOPUP() ON_COMMAND(IDM_FULLSCREEN, OnFullscreen) ON_UPDATE_COMMAND_UI(IDM_FULLSCREEN, OnUpdateFullscreen) ON_COMMAND(ID_VIEW_OUTBAR, OnViewOutbar) ON_UPDATE_COMMAND_UI(ID_VIEW_OUTBAR, OnUpdateViewOutbar) ON_COMMAND(ID_VIEW_WORKSPACE, OnViewWorkspace) ON_UPDATE_COMMAND_UI(ID_VIEW_WORKSPACE, OnUpdateViewWorkspace) ON_COMMAND(IDM_XP, OnXp) ON_COMMAND(IDM_98, On98) ON_UPDATE_COMMAND_UI(IDM_XP, OnUpdateXp) ON_UPDATE_COMMAND_UI(IDM_98, OnUpdate98) ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_LNCOL, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { // TODO: add member initialization code here m_strOut="---------------欢迎使用陶氏PL/0语言词法及语法分析系统---------------\r\n\r\n作者:陶善文\r\n\r\n我的Email:ahei0802@126.com\r\n\r\n我的网站:http://AIfan.54sc.com"; m_bIsFullScreen=0; } CMainFrame::~CMainFrame() { } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; 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 } m_wndToolBar.SetWindowText("工具栏"); //添加热图像 CImageList img; if(!img.Create(IDR_MAINFRAME_HOT,20,0,RGB(128,128,128))) { TRACE0("Failed to load hot images\n"); return -1; } CToolBarCtrl& toolbarctl=m_wndToolBar.GetToolBarCtrl(); toolbarctl.SetHotImageList(&img); img.Detach(); //增加工具栏文本 m_wndToolBar.SetButtonText(0,"新建"); m_wndToolBar.SetButtonText(1,"打开"); m_wndToolBar.SetButtonText(2,"保存"); m_wndToolBar.SetButtonText(4,"启动"); m_wndToolBar.SetButtonText(5,"清除"); m_wndToolBar.SetButtonText(7,"全屏"); m_wndToolBar.SetButtonText(9,"关于"); m_wndToolBar.SetButtonText(11,"退出"); m_wndToolBar.SetSizes(CSize(31,40),CSize(20,19)); 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 } m_wndStatusBar.SetViewProgress(false);//隐藏状态栏上的进度条 // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); //-------------------------创建工作空间栏--------------------------- if (!m_wndWorkSpaceBar.Create("工作空间",this,CSize(150,200),TRUE,CBRS_LEFT)) { TRACE0("Failed to create mybar\n"); return -1; // fail to create } m_wndWorkSpaceBar.SetBarStyle(m_wndWorkSpaceBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_LEFT); m_wndWorkSpaceBar.EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndWorkSpaceBar, AFX_IDW_DOCKBAR_LEFT); //------------------------------------------------------------------ //--------------------创建输出结果栏-------------------- if (!m_wndOutBar.Create("输出", this, CSize(750,150),TRUE,CBRS_BOTTOM)) { TRACE0("Failed to create mybar\n"); return -1; // fail to create } m_wndOutBar.SetBarStyle(m_wndOutBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_BOTTOM); m_wndOutBar.EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndOutBar, AFX_IDW_DOCKBAR_BOTTOM); //显示输出信息 m_wndOutBar.SetColorRichEditText(m_strOut); //------------------------------------------------------ BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); // CG: The following line was added by the Splash Screen component. CSplashWnd::ShowSplashScreen(this); //加载可变栏状态 CSizingControlBar::GlobalLoadState(_T("BarState")); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CMDIFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs 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 HMENU CMainFrame::NewDefaultMenu() { m_menuDefault.LoadMenu(IDR_MAINFRAME); m_menuDefault.LoadToolbar(IDR_MAINFRAME_MENU); return m_menuDefault.Detach(); } HMENU CMainFrame::NewMenu() { // Load the menu from the resources m_menu.LoadMenu(IDR_IDETYPE); m_menu.LoadToolbar(IDR_MAINFRAME_MENU); return m_menu.Detach(); } BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class return CMDIFrameWnd::OnCreateClient(lpcs, pContext); } void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) { CMDIFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu); // TODO: Add your message handler code here if(!bSysMenu) { if(BCMenu::IsMenu(pPopupMenu)) BCMenu::UpdateMenu(pPopupMenu); } } void CMainFrame::OnFullscreen() { // TODO: Add your command handler code here RECT rectDesktop; WINDOWPLACEMENT wpNew; if(!m_bIsFullScreen) { // need to hide all status bars m_bToolBarVisible=m_wndToolBar.IsVisible(); m_bStatusBarVisible=m_wndStatusBar.IsVisible(); m_bOutBarVisible=m_wndOutBar.IsVisible(); m_bWorkSpaceBarVisible=m_wndWorkSpaceBar.IsVisible(); m_wndStatusBar.ShowWindow(SW_HIDE); m_wndToolBar.ShowWindow(SW_HIDE); ShowControlBar(&m_wndOutBar,0,1); ShowControlBar(&m_wndWorkSpaceBar,0,1); // We'll need these to restore the original state. GetWindowPlacement(&m_wpPrev); m_wpPrev.length=sizeof m_wpPrev; //Adjust RECT to new size of window ::GetWindowRect(::GetDesktopWindow(),&rectDesktop); ::AdjustWindowRectEx(&rectDesktop,GetStyle(),TRUE,GetExStyle()); // Remember this for OnGetMinMaxInfo() m_FullScreenWindowRect=rectDesktop; wpNew=m_wpPrev; wpNew.showCmd=SW_SHOWNORMAL; wpNew.rcNormalPosition=rectDesktop; m_pwndFullScrnBar=new CToolBar; if (!m_pwndFullScrnBar->Create(this,CBRS_SIZE_DYNAMIC|CBRS_FLOATING) || !m_pwndFullScrnBar->LoadToolBar(IDR_FULLSCREEN)) { TRACE0("Failed to create toolbar\n"); return; // fail to create } //don't allow the toolbar to dock m_pwndFullScrnBar->EnableDocking(0); m_pwndFullScrnBar->SetWindowPos(0,100,100,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW); m_pwndFullScrnBar->SetWindowText(_T("Full Screen")); FloatControlBar(m_pwndFullScrnBar, CPoint(100,100)); m_bIsFullScreen=TRUE; } else { m_pwndFullScrnBar->DestroyWindow(); delete m_pwndFullScrnBar; m_bIsFullScreen=FALSE; m_wndStatusBar.ShowWindow(m_bStatusBarVisible); m_wndToolBar.ShowWindow(m_bToolBarVisible); m_wndWorkSpaceBar.ShowWindow(m_bWorkSpaceBarVisible); m_wndOutBar.ShowWindow(m_bOutBarVisible); wpNew=m_wpPrev; } SetWindowPlacement(&wpNew); } void CMainFrame::OnUpdateFullscreen(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_bIsFullScreen); } void CMainFrame::OnViewOutbar() { // TODO: Add your command handler code here ShowControlBar(&m_wndOutBar,!m_wndOutBar.IsVisible(),1); } void CMainFrame::OnUpdateViewOutbar(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_wndOutBar.IsVisible()); } void CMainFrame::OnViewWorkspace() { // TODO: Add your command handler code here ShowControlBar(&m_wndWorkSpaceBar,!m_wndWorkSpaceBar.IsVisible(),1); } void CMainFrame::OnUpdateViewWorkspace(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_wndWorkSpaceBar.IsVisible()); } void CMainFrame::OnXp() { // TODO: Add your command handler code here BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); } void CMainFrame::On98() { // TODO: Add your command handler code here BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_ORIGINAL); } void CMainFrame::OnUpdateXp(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(BCMenu::GetMenuDrawMode()==BCMENU_DRAWMODE_XP); } void CMainFrame::OnUpdate98(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(BCMenu::GetMenuDrawMode()==BCMENU_DRAWMODE_ORIGINAL); } void CMainFrame::OnClose() { // TODO: Add your message handler code here and/or call default //保存可变栏状态 CSizingControlBar::GlobalSaveState(_T("BarState")); CMDIFrameWnd::OnClose(); }