⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 visual c++ 实例编程
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////
//类名:CMainFrame
//功能:主框架操作类

/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ViewMode.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static HMENU hMenu = NULL;  //设置静态菜单句柄
/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_VIEW_NORMAL, OnViewNormal)
	ON_COMMAND(ID_VIEW_SIMPLE, OnViewSimple)
	ON_COMMAND(ID_VIEW_COMPACT, OnViewCompact)
	ON_UPDATE_COMMAND_UI(ID_VIEW_COMPACT, OnUpdateViewCompact)
	ON_UPDATE_COMMAND_UI(ID_VIEW_NORMAL, OnUpdateViewNormal)
	ON_UPDATE_COMMAND_UI(ID_VIEW_SIMPLE, OnUpdateViewSimple)
	ON_COMMAND(ID_EXIT, OnExit)
	ON_WM_INITMENUPOPUP()
	ON_WM_MEASUREITEM()
	ON_WM_MENUCHAR()
	//}}AFX_MSG_MAP
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()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

// ---------------------------------------------------------------------------
// 名称:  OnCreate
// 功能:  创建窗体
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::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
	}

	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
	}

	//-----------------------------------------------------------------------------
	//设置工具条显示风格为图标加下方文本方式
	CString strButton;
	CRect rectButton;
	for(int i = 0; i < m_wndToolBar.GetCount(); i++)		//为每个按钮增加文本
	{
		UINT id = m_wndToolBar.GetItemID(i);
		if(!strButton.LoadString(id)) continue;
		int j = strButton.Find(_T('\n'));
		if(j < 0) continue;
		strButton = strButton.Right(strButton.GetLength() - j - 1);
		m_wndToolBar.SetButtonText(i,strButton); 
	}
	m_wndToolBar.GetItemRect(0,&rectButton);				//调整新的工具条大小
	m_wndToolBar.SetSizes(rectButton.Size(),CSize(16,15));
	//-----------------------------------------------------------------------------


	// 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);

	//显示模式默认显示为正常
	m_nViewType = 0;

	//获取窗体、客户区及工具条大小
	GetWindowRect( &m_WindowRect);
	GetClientRect( &m_ClientRect);

	//初始化置菜单为XP风格显示,jingzhou xu
	BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP);
	m_menu.LoadMenu(IDR_MAINFRAME);
	static UINT uToolBars[] = { IDR_MAINFRAME, 
		                      };
	m_menu.LoadToolbars( uToolBars, sizeof(uToolBars)/sizeof(UINT) );
	OnUpdateFrameMenu(m_menu.m_hMenu );

	return 0;
}

// ---------------------------------------------------------
//	名称: OnInitMenuPopup
//	功能: 加此涵数,使动态新增菜单条同步以XP风格显示
//	变量: pPopupMenu -- 弹出菜单,nIndex -- 索引,bSysMenu -- 是否系统菜单
//	返回: 无
//	编写: 徐景周,2002.4.8
//  组织:未来工作室(Future Studio)
// ---------------------------------------------------------
void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
{
	CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
	
	if(!bSysMenu){
		if(BCMenu::IsMenu(pPopupMenu)) BCMenu::UpdateMenu(pPopupMenu);
	}	
}

// ---------------------------------------------------------
//	名称: OnInitMenuPopup
//	功能: 重新测量以XP风格菜单条
//	返回: 无
//	编写: 徐景周,2002.4.8
//  组织:未来工作室(Future Studio)
// ---------------------------------------------------------
void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
	BOOL setflag=FALSE;
	if(lpMeasureItemStruct->CtlType==ODT_MENU){
		if(IsMenu((HMENU)lpMeasureItemStruct->itemID)&&BCMenu::IsMenu((HMENU)lpMeasureItemStruct->itemID)){
			m_menu.MeasureItem(lpMeasureItemStruct);
			setflag=TRUE;
		}
	}
	if(!setflag)CWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);	
}

// ---------------------------------------------------------
//	名称: OnMenuChar
//	功能: 重新绘制以XP风格菜单条
//	返回: 无
//	编写: 徐景周,2002.4.8
//  组织:未来工作室(Future Studio)
// ---------------------------------------------------------
LRESULT CMainFrame::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu) 
{
	LRESULT lresult;
	if(BCMenu::IsMenu(pMenu))
		lresult=BCMenu::FindKeyboardShortcut(nChar, nFlags, pMenu);
	else
		lresult=CWnd::OnMenuChar(nChar, nFlags, pMenu);

	return(lresult);
	
}

// ---------------------------------------------------------------------------
// 名称:  PreCreateWindow
// 功能:  设置窗体显示风格
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;

	//自定义窗体显示位置
	cs.x = 100;	
	cs.y = 100;

	//自定义窗体显示风格
	cs.style &= ~FWS_ADDTOTITLE;
	cs.style &= ~WS_THICKFRAME; 
	cs.style &= ~WS_MAXIMIZEBOX;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

// ---------------------------------------------------------------------------
// 名称:  ViewMode
// 功能:  多种显示模式[其中当<nViewType> =0:正常模式,=1:简洁模式(无视图),=2:精简模式(只有工具条)]
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::ViewMode(int nViewType)
{
	CRect ClientRect;
	CRect WindowRect;
	CRect ToolbarRect;
	CRect StatusbarRect;

	//获取窗体、客户区及工具条大小
	WindowRect = m_WindowRect;
	ClientRect = m_ClientRect;
	m_wndToolBar.GetWindowRect(&ToolbarRect);

	//获取边框及标题栏大小
	int borderHeight = GetSystemMetrics(SM_CYBORDER);
	int captionHeight = GetSystemMetrics(SM_CYCAPTION);

	//获取状态条大小
	CStatusBar* pStatus = (CStatusBar*) AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);	
	pStatus->GetWindowRect(&StatusbarRect);

	//停靠工具条
	DockControlBar(&m_wndToolBar);	

	int CompactCx;							//新窗体宽
	int CompactCy;							//新窗体高

	//以多种模式显示
	switch(nViewType)
	{
	case 0:                                 //正常显示模式
		{
			//显示菜单
			if ( hMenu != NULL )	
				::SetMenu( m_hWnd, hMenu );
			
			//显示状态条
			pStatus->ShowWindow(SW_SHOW);

			//新窗体宽、高
			CompactCx=WindowRect.Width();
			CompactCy=WindowRect.Height();
		}
		break;
	case 1:									//简洁显示模式
		{
			//显示菜单
			if ( hMenu != NULL )	
				::SetMenu( m_hWnd, hMenu );
			
			//隐藏状态条
			pStatus->ShowWindow(SW_HIDE);
			
			//新窗体宽、高
			CompactCx=WindowRect.Width();
			CompactCy=WindowRect.Height() - ClientRect.Height() + ToolbarRect.Height() - borderHeight;
		}
		break;
	case 2:									//精简显示模式
		{
			//隐藏菜单
			hMenu = ::GetMenu(m_hWnd);	
				::SetMenu( m_hWnd, NULL );
			
			//隐藏状态条
			pStatus->ShowWindow(SW_HIDE);
			
			//新窗体宽、高
			CompactCx=WindowRect.Width();
			CompactCy=captionHeight + ToolbarRect.Height() + borderHeight*2;
		}
		break;
	}

	//设置新窗体显示
	SetWindowPos( &wndTop, WindowRect.left, WindowRect.top, CompactCx, CompactCy, SWP_SHOWWINDOW);  

}

// ---------------------------------------------------------------------------
// 名称:  OnViewNormal
// 功能:  正常显示模式
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::OnViewNormal() 
{
	ViewMode(0);
	m_nViewType = 0;
}

// ---------------------------------------------------------------------------
// 名称:  OnViewSimple
// 功能:  简洁显示模式(无视图)
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::OnViewSimple() 
{
	ViewMode(1);
	m_nViewType = 1;
}

// ---------------------------------------------------------------------------
// 名称:  OnViewCompact
// 功能:  精简显示模式(仅工具条)
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::OnViewCompact() 
{
	ViewMode(2);
	m_nViewType = 2;
}

// ---------------------------------------------------------------------------
// 名称:  OnUpdateViewCompact
// 功能:  更新精简模式状态
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::OnUpdateViewCompact(CCmdUI* pCmdUI) 
{
	if(m_nViewType == 2)
		pCmdUI->SetCheck(TRUE);
	else
		pCmdUI->SetCheck(FALSE);
}

// ---------------------------------------------------------------------------
// 名称: OnUpdateViewNormal
// 功能:  更新正常模式状态
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::OnUpdateViewNormal(CCmdUI* pCmdUI) 
{
	if(m_nViewType == 0)
		pCmdUI->SetCheck(TRUE);
	else
		pCmdUI->SetCheck(FALSE);
}

// ---------------------------------------------------------------------------
// 名称: OnUpdateViewSimple
// 功能:  更新简洁模式状态
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::OnUpdateViewSimple(CCmdUI* pCmdUI) 
{
	if(m_nViewType == 1)
		pCmdUI->SetCheck(TRUE);
	else
		pCmdUI->SetCheck(FALSE);
}

// ---------------------------------------------------------------------------
// 名称:  OnExit
// 功能:  退出程序
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CMainFrame::OnExit() 
{
	SendMessage(WM_CLOSE,0,0);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -