天天看點

MFC工具欄和狀态欄

國小用6年來期盼國中,國中用三年來渴望高中,高中用三年來憧憬大學,大學用四年來回憶國小到高中,青春就這樣結束了。。。

----  網易雲熱評

相關類:

  CToolBarCtrl - 父類為CWnd,封裝了關于各種工具按鈕的操作

  CToolBar - 父類為CControlBar,封裝了工具欄和架構視窗之間關系

一、添加工具欄資源

1、删除按鈕時,點選按鈕拖拉到其他地方

2、移動按鈕位置時,輕輕往後拖拉

MFC工具欄和狀态欄

二、建立工具欄

CToolBar::Create / CToolBar::CreateEx  成員函數

createex(父視窗位址也就是架構視窗位址,工具欄按鈕風格,工具欄風格)

1、架構實作消息機制

DECLARE_MESSAGE_MAP()
           

2、類外面的宏

BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)              ON_WM_CREATE()              END_MESSAGE_MAP()
           

3、架構聲明OnCreate方法

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
           

4、重寫OnCreate方法

CBRS_GRIPPER:把手風格              CBRS_TOOLTIPS:顯示标簽              |CBRS_FLYBY:滑鼠移動到工具欄然後狀态欄就顯示              int CMyFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)              {              //CToolBar toolbar;              //建立工具欄              toolbar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS);              //加載工具欄              toolbar.LoadToolBar(IDR_TOOLBAR1);                  return CFrameWnd::OnCreate(lpCreateStruct);              }
           

三、加載工具欄資源

CToolBar::LoadToolBar

四、指令消息處理(WM_COMMAND)

ON_COMMAND(工具按鈕的ID,處理消息的函數名)

1、添加宏

ON_COMMAND(ID_XJ, xinjian)              ON_COMMAND(ID_zhi, zhizhizhi)
           

2、聲明函數

afx_msg void xinjian();              afx_msg void zhizhizhi();
           

3、實作函數

void CMyFrameWnd::xinjian()              {              AfxMessageBox("哎呦不錯哦");              }              void CMyFrameWnd::zhizhizhi()              {              AfxMessageBox("吱吱吱");              }
           

運作結果:

MFC工具欄和狀态欄

五、工具欄的停靠

1、工具欄準備停靠的位置

toolbar.EnableDocking(CBRS_ALIGN_ANY);
           

2、架構視窗允許停靠的位置

this->EnableDocking(CBRS_ALIGN_ANY);
           

3、架構視窗設定臨時停靠的位置

this>DockControlBar(&toolbar,AFX_IDW_DOCKBAR_LEFT);
           

運作結果:

MFC工具欄和狀态欄

六、标簽顯示

\n前面的内容将會在狀态欄顯示,後面在标簽顯示

MFC工具欄和狀态欄

七、工具欄的顯示和隐藏

是否打鈎

1、添加宏

ON_WM_INITMENUPOPUP( )
           

2、聲明函數

afx_msg void OnInitMenuPopup(CMenu*pPopup, UINT nPos, BOOL i);
           

3、重寫函數

void CMyFrameWnd::OnInitMenuPopup(CMenu*pPopup, UINT nPos, BOOL i)              {              if( toolbar.IsWindowVisible() ){              pPopup->CheckMenuItem(ID_TOOL, MF_CHECKED);              }else{              pPopup->CheckMenuItem(ID_TOOL, MF_UNCHECKED);              }              }
           

點選工具欄,打鈎顯示,去了不顯示

1、添加宏

ON_COMMAND(ID_gjl, gjlxs)
           

2、聲明函數

afx_msg void gjlxs();
           

3、重寫函數

void CMyFrameWnd::gjlxs()              {              if (toolbar.IsWindowVisible()) {              this->ShowControlBar(&toolbar, FALSE, FALSE);              }              else {              this->ShowControlBar(&toolbar, TRUE, FALSE);              }              }
           

八、狀态欄相關類

CStatusBar - 父類為CControlBar,封裝了關于狀态欄的各種操作

九、使用方法

1、定義一個狀态欄對象

CStatusBar statusbar;

2、在Oncreate裡面建立

statusbar.CreateEx( this );

3、設定狀态欄訓示器

由于上面在工具欄設定過狀态欄資訊,是以可以在資源裡自動生成string table

MFC工具欄和狀态欄

建立幾個id,标題用空格,要不顯示不來

MFC工具欄和狀态欄

定義一個全局數組

UINT g_hIndicator[] = {              0,              IDS_TIME,              IDS_POS              };
           

statusbar.SetIndicators(g_hIndicator, 3);

4、設定訓示器的風格和寬度

 CStatusBar::SetPaneInfo(索引,id,風格,寬度)

5、設定定時器

::SetTimer(句柄, 1, 間隔, 設定為空及預設處理);

6、添加處理宏

ON_WM_TIMER()

7、聲明函數

afx_msg void OnTimer(UINT timeid);

8、重寫函數

void CMyFrameWnd::OnTimer(UINT timeid)              {              SYSTEMTIME st;              ::GetLocalTime(&st);              CString str;              str.Format("%d-%d-%d %d:%d:%d", st.wYear, st.wMonth, st.wDay,              st.wHour, st.wMinute, st.wSecond);              statusbar.SetPaneText(1, str);              }
           

運作結果:

MFC工具欄和狀态欄

歡迎關注公衆号:順便編點程

MFC工具欄和狀态欄

MFC工具欄和狀态欄