程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MFC框體添加菜單欄工具欄狀態欄

MFC框體添加菜單欄工具欄狀態欄

編輯:C++入門知識

菜單欄工具欄狀態欄
菜單欄
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運行結果:

 

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved