【MFC】工具条(16)

创建工具条的基本步骤是:

1.创建工具条资源。

2.构建一个CToolBar对象。

3.调用CToolBar::Create函数创建工具条窗口。

4.调用CToolBar::LoadToolBar载入工具条资源。

使用工具条 

打开资源视图,可视化创建或者修改工具条:

 其中ID项一般与菜单中某项命令相同,工具栏中图标对应菜单命令,如果没有挂上消息响应改图标则自动为灰色(不可用)。

新建工具条的操作一样:

 在主框架类中,照加载主工具条一样加载新建的工具条:

 注意挂上消息(挂在视图类中)

 对话框工具条

CDialogBar可以提供类似对话框的工具条,适用于创建比较复杂的工具条:

首先,创建一个对话框资源:

 修改属性:

双击创建类,选择父类为CDialog,手动修改代码:

头文件:

#pragma once


// CDialogBarTest 对话框

class CDialogBarTest : public CDialogBar
{
	DECLARE_DYNAMIC(CDialogBarTest)

public:
	CDialogBarTest(CWnd* pParent = NULL);   // 标准构造函数
	virtual ~CDialogBarTest();

// 对话框数据
	enum { IDD = IDD_TEST_DIALOGBAR };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedStop();
};

源文件:

// DialogBarTest.cpp : 实现文件
//

#include "stdafx.h"
#include "MFC08.h"
#include "DialogBarTest.h"
#include "afxdialogex.h"


// CDialogBarTest 对话框

IMPLEMENT_DYNAMIC(CDialogBarTest, CDialogBar)

CDialogBarTest::CDialogBarTest(CWnd* pParent /*=NULL*/)	
{

}

CDialogBarTest::~CDialogBarTest()
{
}

void CDialogBarTest::DoDataExchange(CDataExchange* pDX)
{
	CDialogBar::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CDialogBarTest, CDialogBar)
	ON_BN_CLICKED(ID_STOP, &CDialogBarTest::OnBnClickedStop)
END_MESSAGE_MAP()


// CDialogBarTest 消息处理程序


void CDialogBarTest::OnBnClickedStop()
{
	// TODO: 在此添加控件通知处理程序代码
}

在主框架类的OnCreate 函数中添加代码:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("未能创建工具栏\n");
		return -1;      // 未能创建
	}
	if (!m_wndTestBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE |  CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndTestBar.LoadToolBar(IDR_TEST))
	{
		TRACE0("未能创建工具栏\n");
		return -1;      // 未能创建
	}
	if (!m_wndStatusBar.Create(this))
	{
		TRACE0("未能创建状态栏\n");
		return -1;      // 未能创建
	}
	m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
	// TODO: 如果不需要可停靠工具栏,则删除这三行
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	

	m_wndTestBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndTestBar);

	
   m_wndTestDialogBar.Create(this, IDD_TEST_DIALOGBAR, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, IDD_TEST_DIALOGBAR);

	m_wndTestDialogBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndTestDialogBar);
	return 0;
}

注意:新增的两个工具栏类的定义都放在主框架类的头文件中(包含相关头文件)

运行结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值