MFC学习笔记(6)—— 工具栏

本文介绍了如何在MFC中创建自定义工具栏,包括设置工具栏ID,添加成员变量,实现可停靠功能。通过CToolBar类的SetButtonText方法为按钮添加文字,并解决文字不显示的问题。同时,展示了如何调整按钮大小,以及添加CComboBox控件到工具栏,并创建一个继承自CComboBox的自定义类CMyComboBox,以增强程序的扩展性。
摘要由CSDN通过智能技术生成

注:本文代码采用VS2005编写并使用Unicode字符集。


工具栏指的就是被篮圈的那部分。


创建一个工具栏:

我们可以仿照程序的工具栏,创建自己的工具栏。

首先在资源视图添加一个ToolBar资源,ID改为IDR_MYTOOLBAR

然后在框架类里添加一个CToolBar类型的成员变量m_myToolBar;

在框架的OnCreate函数实现里添加如下代码:

	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MYTOOLBAR))                         //应用程序已有一个工具栏,所以我们创建在底部
	{
		TRACE0("未能创建工具栏\n");
		return -1;      // 未能创建
	}
以上代码先创建了一个toolbar然后载入之。

如果希望工具栏可停靠,添加以下代码在相同位置

<span style="font-size:14px;">	m_myToolBar.EnableDocking(CBRS_ALIGN_ANY);   //工具栏可以停靠在任意位置
	//EnableDocking(CBRS_ALIGN_ANY);                 //让框架允许任意位置的停靠,已经有了就不必再写
	DockControlBar(&m_myToolBar);</span>

给工具栏的按钮添加文字:

CToolBar类中有一个SetButtonText方法,比如要给第一个索引添加一个“创建”;

<span style="font-size:14px;">	m_myToolBar.SetButtonText(0,_T("创建"));</span>
注意,你添加了几个按钮,就要给几个按钮都设置文字才能显示出来。

这时我们启动会发现文字根本没有显示出来,这是因为按钮的高度不够,所以需要修改。

CToolBar有一个SetHeight方法,不过此方法之前必须使用setSizes方法,此方法需要两个参数,第一个是按钮的大小,第二个是按钮贴图的大小。

先获取按钮的大小:

<span style="font-size:14px;">    CRect reButton;
    m_myToolBar.GetItemRect(0,&reButton);
    SIZE szButton = {reButton.Width(),reButton.Height()};    // 设置按钮大小只接受SIZE结构体
</span>
按钮贴图的大小在资源视图里可以看到,通常为16*15;

	RECT reImage = {16,15};
设置按钮的大小:

	m_myToolBar.SetSizes(szButton,szImage);
	m_myToolBar.SetHeight(reButton.Height());
至此,给按钮添加文字就写完啦。


给工具栏按钮添加消息:

同样,声明,实现,消息映射,例子如下:

声明:

public:
	void onMyToolBar(UINT ID);
消息映射:

ON_COMMAND_RANGE(ID_BUTTON32771,ID_BUTTON32772,&CMainFrame::onMyToolBar)

实现:

void CMainFrame::onMyToolBar(UINT ID)
{
	switch (ID)
	{
	case ID_BUTTON32771:
		MessageBox(_T("he"));
		break;
	case ID_BUTTON32772:
		MessageBox(_T("ha"));
	}
}


在工具栏的按钮位置添加其他的控件:

比如我要在第一个按钮的位置添加一个CCombobox控件:

为了程序的扩展性,我们再添加一个类,继承于CComboBox,起名为CMyComboBox;别忘了包含头文件哦

在框架类中定义个combobox,用我们的类,

	CMyComboBox	m_myComboBox;

加入combox以后,我们需要修改toolbar的样式,否则控件会显示不完全。

	m_myToolBar.SetButtonInfo(0,ID_BUTTON32772,TBBS_SEPARATOR,100);   //toolbar的按钮索引(第二个位置),ID号可以不变,变为分隔符样式,宽度设置为50(按需要设定)
设置完大小以后,需要获得修改后按钮的大小,用上面定义的reButton接一下

m_myToolBar.GetItemRect(0,&reButton);
修改矩形结构体底部坐标,是的combox拉下来以后能显示出来。

	reButton.bottom += 100;
创建一个combobox并显示在工具栏上面:

m_myComboBox.Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,reButoon,&m_myToolBar,ID_COMBOBOX);  //ID需要自己添加

让ComboBox响应事件:

我们已经有了自己的Combobox类,只要添加一个消息就可以了,很简单。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值