天天看点

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工具栏和状态栏