MFC工具栏和状态栏

简介: MFC工具栏和状态栏

相关类:


 CToolBarCtrl - 父类为CWnd,封装了关于各种工具按钮的操作


 CToolBar - 父类为CControlBar,封装了工具栏和框架窗口之间关系


一、添加工具栏资源


1、删除按钮时,点击按钮拖拉到其他地方


2、移动按钮位置时,轻轻往后拖拉


0a2653c851af460fa595bd959398a8f1.png


二、创建工具栏


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("吱吱吱");
}

运行结果:


0eacb84100b54626af849e6b562bf92a.png


五、工具栏的停靠


1、工具栏准备停靠的位置


toolbar.EnableDocking(CBRS_ALIGN_ANY);


2、框架窗口允许停靠的位置



this->EnableDocking(CBRS_ALIGN_ANY);


3、框架窗口设置临时停靠的位置



this>DockControlBar(&toolbar,AFX_IDW_DOCKBAR_LEFT);


运行结果:


0a2653c851af460fa595bd959398a8f1.png


六、标签显示


\n前面的内容将会在状态栏显示,后面在标签显示


0eacb84100b54626af849e6b562bf92a.png


七、工具栏的显示和隐藏


是否打钩


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


0a2653c851af460fa595bd959398a8f1.png


创建几个id,标题用空格,要不显示不来


0eacb84100b54626af849e6b562bf92a.png


定义一个全局数组


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);
}


运行结果:

0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
数据可视化 IDE 编译器
Open CASCADE之v7.4.0源码编译与可视化调试,使用VS2017+32位编译器(1)
Open CASCADE之v7.4.0源码编译与可视化调试,使用VS2017+32位编译器
1635 0
Open CASCADE之v7.4.0源码编译与可视化调试,使用VS2017+32位编译器(1)
MNN Session 之几何计算(六)
MNN Session 之几何计算(六)
95 6
|
存储 Linux 网络安全
都2023年了还不了解?使用FileZilla搭建信息文件服务器(Windows7)
都2023年了还不了解?使用FileZilla搭建信息文件服务器(Windows7)
1395 0
|
存储 安全 编译器
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
556 0
Visual Studio 2022编译错误 Error MSB8041-此项目需要MFC库解决方案
Visual Studio 2022编译错误 Error MSB8041-此项目需要MFC库解决方案
2050 0
|
XML NoSQL Java
gis利器之Gdal(一)
主要介绍gdal工具库,它的主要功能,组织结构,让大家有个简单了解。
805 0
gis利器之Gdal(一)
|
存储 人工智能 程序员
|
C++ Android开发
3.QT中QCommandLineParser和QCommandLineOption解析命令行参数
 1  新建项目 main.cpp #include <QCoreApplication> #include <QCommandLineParser> #include <QDebug> #include <stdio.h>   in
2651 0
|
18天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
下一篇
开通oss服务