0
点赞
收藏
分享

微信扫一扫

MFC工具栏和状态栏


小学用6年来期盼初中,初中用三年来渴望高中,高中用三年来憧憬大学,大学用四年来回忆小学到高中,青春就这样结束了。。。

----  网易云热评

相关类:

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

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

 

一、添加工具栏资源

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

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

MFC工具栏和状态栏_MFC工具栏

 

二、创建工具栏

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

运行结果:

MFC工具栏和状态栏_状态栏_02

 

五、工具栏的停靠

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

 

toolbar.EnableDocking(CBRS_ALIGN_ANY);

 

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

 

this->EnableDocking(CBRS_ALIGN_ANY);

 

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

 

this>DockControlBar(&toolbar,AFX_IDW_DOCKBAR_LEFT);

 

运行结果:

MFC工具栏和状态栏_工具栏_03

六、标签显示

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

MFC工具栏和状态栏_工具栏_04

 

七、工具栏的显示和隐藏

是否打钩

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

MFC工具栏和状态栏_工具栏_05

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

MFC工具栏和状态栏_MFC状态栏_06

定义一个全局数组

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

运行结果:

MFC工具栏和状态栏_MFC状态栏_07

 

MFC工具栏和状态栏_状态栏_08


MFC工具栏和状态栏_工具栏_09

举报

相关推荐

0 条评论