小学用6年来期盼初中,初中用三年来渴望高中,高中用三年来憧憬大学,大学用四年来回忆小学到高中,青春就这样结束了。。。
---- 网易云热评
相关类:
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);
}
运行结果:
欢迎关注公众号:顺便编点程