相关类:
CToolBarCtrl - 父类为CWnd,封装了关于各种工具按钮的操作
CToolBar - 父类为CControlBar,封装了工具栏和框架窗口之间关系
一、添加工具栏资源
1、删除按钮时,点击按钮拖拉到其他地方
2、移动按钮位置时,轻轻往后拖拉
二、创建工具栏
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("吱吱吱"); }
运行结果:
五、工具栏的停靠
1、工具栏准备停靠的位置
toolbar.EnableDocking(CBRS_ALIGN_ANY);
2、框架窗口允许停靠的位置
this->EnableDocking(CBRS_ALIGN_ANY);
3、框架窗口设置临时停靠的位置
this>DockControlBar(&toolbar,AFX_IDW_DOCKBAR_LEFT);
运行结果:
六、标签显示
\n前面的内容将会在状态栏显示,后面在标签显示
七、工具栏的显示和隐藏
是否打钩
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
创建几个id,标题用空格,要不显示不来
定义一个全局数组
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); }
运行结果: