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位编译器
1601 0
Open CASCADE之v7.4.0源码编译与可视化调试,使用VS2017+32位编译器(1)
|
JavaScript
jq样式、元素操作,效果,筛选方法与转换,事件对象
jq样式、元素操作,效果,筛选方法与转换,事件对象
MNN Session 之几何计算(六)
MNN Session 之几何计算(六)
90 6
|
存储 Linux 网络安全
都2023年了还不了解?使用FileZilla搭建信息文件服务器(Windows7)
都2023年了还不了解?使用FileZilla搭建信息文件服务器(Windows7)
1186 0
|
存储 安全 编译器
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
522 0
Visual Studio 2022编译错误 Error MSB8041-此项目需要MFC库解决方案
Visual Studio 2022编译错误 Error MSB8041-此项目需要MFC库解决方案
1890 0
|
XML NoSQL Java
gis利器之Gdal(一)
主要介绍gdal工具库,它的主要功能,组织结构,让大家有个简单了解。
787 0
gis利器之Gdal(一)
|
缓存 JavaScript 前端开发
工作中常用的javascript常识(二)
工作中常用的javascript常识
149 0
|
存储 移动开发
命名规则及格式化输出
命名规则及格式化输出
129 0
命名规则及格式化输出
|
SQL NoSQL Java
SpringBoot2.x系列教程27--使用SQL数据库
前言 在前面的章节中,壹哥 给大家讲解了SpringBoot对Web模块的支持,但是我们开发时还有另一个重头戏,那就是进行数据库的操作。所以从本章开始,我会带大家学习在Spring Boot中实现数据库的操作。 我这里说的数据库,不仅仅有关系型数据库,比如MySQL,还包括非关系型数据库,比如Redis等。 我们现在进行关系型数据库操作时,可以选择的技术框架其实有很多,比如原生的Jdbc,还有Mybatis、JPA等开源框架,接下来我会分别针对这几个技术进行讲解,今天我先讲解在SpringBoot中利用JdbcTemplate实现数据库的CRUD操作。 一. JdbcTemplate 在开
377 0