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

目录
相关文章
14 MFC - 普通按钮 CButton
14 MFC - 普通按钮 CButton
49 0
|
7月前
[MFC] 对话框自带滚动条的使用
[MFC] 对话框自带滚动条的使用
179 0
|
7月前
[Qt5] 右键窗体弹出菜单,实现图像适应窗体大小
[Qt5] 右键窗体弹出菜单,实现图像适应窗体大小
126 0
|
索引
MFC工具栏和状态栏
MFC工具栏和状态栏
152 0
MFC工具栏和状态栏
|
C++
基于MFC实现选项卡控件练习
基于MFC实现选项卡控件练习
74 0
基于MFC实现选项卡控件练习
从零开始学Pyqt5之【控件介绍】(17):菜单栏QMenuBar、QToolBar工具栏、QStatusBar状态栏
从零开始学Pyqt5之【控件介绍】(17):菜单栏QMenuBar、QToolBar工具栏、QStatusBar状态栏
从零开始学Pyqt5之【控件介绍】(17):菜单栏QMenuBar、QToolBar工具栏、QStatusBar状态栏
CDialog中使用工具栏和状态栏
CDialog中使用工具栏和状态栏
115 0
MFC窗口右下角弹窗
MFC窗口右下角弹窗
122 0
|
区块链
MFC为应用程序添加托盘(右键托盘,弹出菜单)
源代码:http://download.csdn.net/detail/nuptboyzhb/4137784 1.       导入一个托盘图标的资源(.ico)格式;资源ID为IDI_ICON1 2.
1312 0
【QT】QT菜单栏、状态栏、工具栏
【QT】QT菜单栏、状态栏、工具栏