菜單欄工具欄狀態欄
菜單欄
CMenu封裝了菜單句柄和相關菜單API
1.1添加資源
1.2在CMainFrame::OnCreate函數中添加菜單;CMenu::Attach——將菜單句柄附加到菜單對象中;CMenu::Detach——將菜單句柄從菜單對象中分離
1.3 命令相關 ON_COMMAND
1.4 菜單項的狀態 ON_UPDATE_COMMAND_UI CCmdUI類
工具欄
工具欄相關類CToolBarCtrl——父類是CWnd,封裝了Toolbar Control控件的相關信息,API等。CToolBar——父類CControlBar,封裝了ToolBar和CFrameWnd之間的關系。
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
實例
[cpp]
#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;
#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;
菜單欄的一些資源
[cpp]
/////////////////////////////////////////////////////////////////////////////
// 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
/////////////////////////////////////////////////////////////////////////////
// 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運行結果: