MFC框体添加菜单栏工具栏状态栏

菜单栏工具栏状态栏

  • 菜单栏

CMenu封装了菜单句柄和相关菜单API

1.1添加资源

1.2CMainFrame::OnCreate函数中添加菜单;CMenu::Attach——将菜单句柄附加到菜单对象中;CMenu::Detach——将菜单句柄从菜单对象中分离

1.3 命令相关 ON_COMMAND

1.4 菜单项的状态  ON_UPDATE_COMMAND_UI    CCmdUI

  • 工具栏

工具栏相关类CToolBarCtrl——父类是CWnd,封装了Toolbar Control控件的相关信息,API等。CToolBar——父类CControlBar,封装了ToolBarCFrameWnd之间的关系。

2.1创建工具栏   CToolBar::Create/Ex

2.2 加载工具栏

2.3工具栏的停靠   CToolBar::EnableDocking设置工具栏允许停靠;CFrameWnd::EnableDocking设置窗口允许被停靠;CFrameWnd::DockControlBar设置停靠位置。

2.4命令处理

2.5工具栏的显示与隐藏  CFrameWnd::ShowControlBar

2.6信息提示  增加风格 CBRS_TOOLTIPS;设置提示信息。

  • 状态栏

状态栏相关类CStatusBarCtrl——父类是CWnd,封装了StatusBars的相关信息,API等。CStatusBar——父类CControlBar,封装了状态栏和窗口之间的关系。

3.1创建状态栏  CStatusBar::Create/Ex

3.2设置状态栏指示器 CStatusBar::SetIndicators

3.3设置或获取状态栏信息CStatusBar::SetPaneText,CStatusBar::GetPaneText

实例

#include "stdafx.h" 
#include "Resource.h"
UINT g_nIndicators[]=
{
	0,
	IDS_TIME,
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL
};
class CMainFrame:public CFrameWnd
{
public:
	DECLARE_MESSAGE_MAP()
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);//菜单栏,工具栏,状态栏创建与加载
	//菜单栏消息处理函数
	afx_msg void OnExit();
	afx_msg void OnOpen();
	afx_msg void OnUpdateUIOpen(CCmdUI* pCmdUI);
	//工具栏消息处理函数
	afx_msg void OnViewStandard();
	afx_msg void OnUpdateUIStandard(CCmdUI* pCmdUI);
	//状态栏消息处理函数
	afx_msg void OnTimer(UINT nIDEvent); 
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
private:
	CToolBar mWndToolBar;
	CStatusBar mWndStatusBar;
};
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_OPEN,OnOpen)
ON_COMMAND(ID_EXIT,OnExit)
ON_UPDATE_COMMAND_UI(ID_OPEN,OnUpdateUIOpen)
ON_COMMAND(ID_VIEW_STANDARD,OnViewStandard)
ON_UPDATE_COMMAND_UI(ID_VIEW_STANDARD,OnUpdateUIStandard)
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ 
	//添加菜单
	CMenu menu;
	menu.LoadMenuW(IDR_MAINFRAME);//加载菜单资源
	SetMenu(&menu);//将菜单设置到窗口
	menu.Detach();//将菜单句柄与菜单对象分离

	//添加工具栏
	mWndToolBar.CreateEx(this,TBSTATE_CHECKED,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_ANY|CBRS_TOOLTIPS);
 	mWndToolBar.LoadToolBar(IDR_MAINFRAME);//加载工具栏
	//停靠工具栏
	mWndToolBar.EnableDocking(CBRS_ALIGN_ANY);//1.设置工具栏允许停靠
	EnableDocking(CBRS_ALIGN_ANY);//设置框架窗口允许被停靠
	DockControlBar(&mWndToolBar,AFX_IDW_DOCKBAR_TOP);//停靠工具栏操作
	mWndToolBar.SetWindowTextW(L"标准工具栏");//设置工具栏的标题

	//创建状态栏
	mWndStatusBar.CreateEx(this);
	mWndStatusBar.SetIndicators(g_nIndicators,sizeof(g_nIndicators)/sizeof(UINT));//设置指示灯
	SetTimer(100,1000,NULL);//启动定时器
	return 0;
}
void CMainFrame::OnOpen()
{
	MessageBox(L"OnOpen");
}
void CMainFrame::OnExit()
{
	MessageBox(L"OnExit");
	//PostQuitMessage(0);
}
void CMainFrame::OnUpdateUIOpen(CCmdUI* pCmdUI)
{
	pCmdUI->SetCheck();
	pCmdUI->SetRadio();
	pCmdUI->SetText(L"Open");
}
void CMainFrame::OnViewStandard()
{
	if (mWndToolBar.IsWindowVisible())
	{
		ShowControlBar(&mWndToolBar,FALSE,FALSE);
	}
	else
	{
		ShowControlBar(&mWndToolBar,TRUE,FALSE);
	}
}
void CMainFrame::OnUpdateUIStandard(CCmdUI* pCmdUI)
{
	pCmdUI->SetCheck(mWndToolBar.IsVisible());
}	
void CMainFrame::OnTimer(UINT nIDEvent)
{
	CTime t=CTime::GetCurrentTime();
	CString strTime=t.Format("%Y-%m-%d %H:%M:%S");
	mWndStatusBar.SetPaneText(1,strTime);
}
void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)
{
	CString strPt;
	strPt.Format(L"坐标:X=%d,Y=%d",point.x,point.y);
	mWndStatusBar.SetPaneText(0,strPt);
}
class MFCMenu:public CWinApp
{
public:
	virtual BOOL InitInstance();  
};
BOOL MFCMenu::InitInstance()
{
	CMainFrame *pFrame=new CMainFrame;
	pFrame->Create(NULL,L"MFCMenue");
	//pFrame->Create(NULL,L"MFCToolbar",WS_OVERLAPPEDWINDOW,CFrameWnd::rectDefault,NULL,MAKEINTRESOURCE(IDR_MAINFRAME));
	m_pMainWnd=pFrame;
	pFrame->ShowWindow(SW_SHOW);
	pFrame->UpdateWindow();
	return TRUE;
}
MFCMenu theApp;

 

菜单栏的一些资源

///////////////////////////////////////////////////////////////////////////// 
// Bitmap 
IDR_MAINFRAME           BITMAP                  "res\\toolbar1.bmp"

///////////////////////////////////////////////////////////////////////////// 
// Toolbar 

IDR_MAINFRAME TOOLBAR 16, 15
BEGIN
    BUTTON      ID_OPEN
    BUTTON      ID_EXIT
    SEPARATOR
    BUTTON      ID_EDIT_COPY
    BUTTON      ID_EDIT_PASTE
    SEPARATOR
    BUTTON      ID_APP_ABOUT
END
///////////////////////////////////////////////////////////////////////////// 
// Menu 
IDR_MAINFRAME MENU
BEGIN
    POPUP "文件(&F)"
    BEGIN
        MENUITEM "打开(&O)",                      ID_OPEN
        MENUITEM "退出(&X)",                      ID_EXIT
    END
    POPUP "视图(&V)"
    BEGIN
        POPUP "工具栏(&T)"
        BEGIN
            MENUITEM "标准(&S)",                      ID_VIEW_STANDARD
        END
    END
END
/////////////////////////////////////////////////////////////////////////////
STRINGTABLE
BEGIN
    IDS_TIME                "                             "
END

运行结果:MFC框体添加菜单栏工具栏状态栏_第1张图片

 

你可能感兴趣的:(MFC框体添加菜单栏工具栏状态栏)