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();
}