📄 mainfrm.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 + -