VCMFC中使用工具栏控件详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC MFC工具栏(CToolBar)控件

工具栏

工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个

工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建,如CButton按钮类,现举一个用代码创建按钮控件并显示在窗口里的例子。

CButton类的Create成员函数可以创建一个按钮控件,这个函数的格式如下:

BOOL CButton::Create(

LPCTSTR IpszCaption,// 按钮显示的文本

DWORD dwStyle,// 按钮样式

const RECT & rect,// 按钮控件显示的区域(大小)相对于父窗口

CWnd* pParentWnd,// 按钮的父窗口(按钮属于哪个窗口)

UINT nlD〃指明按钮控件ID号

);

这个函数的第二个参数dwStyle是按钮控件的样式,也就是在可视化添加按钮控件时,右击按钮控件,选择属性,之后会弹出一个对话框,这个对话框有一个样式的选项,该参数即对应这个样式。

好了,了解了上面这些我们就来动态创建一个按钮吧,首先在对应话类里添加一个按钮类成员变量CButton

m_Button;

然后在对话框编辑区里给对话框添加一个按钮控件(单击这个按钮创建按钮控件),然后添加这个按钮控件单击消息处理函数,并在函数添加以下语句:

RECT ButtonRect;//按钮控件显示的区域(大小)相对于父窗口

ButtonRect.left=10;

ButtonRect.top=10;

ButtonRect.right=80;

ButtonRect.bottom=30;

m_Button.Create(" 动态创建”,WS_CHILD,ButtonRect,this,1115);

m_Button.ShowWindow(SW_SHOW);// 显示按钮控件

知道了怎样动态创建按钮控件,我们就来创建工具栏控件。

首先在对话类中添加一个CToolBar类成员变量CToolBar m_Toolbar;

然后在对话类文件中定义工具栏命令ID

#define ID_BUTTON1 501

#define ID_BUTTON2 502

#define ID_BUTTON3 503

接着我们就要创建工具栏资源了,用于工具栏按钮的显示图片

方法是进入ResourceView(资源视图选项卡),再随便选中一个选项,右击选择插入,在弹出的对话框里选中

Toolbar,点新建。

接着创建三个按钮。如下图所示:

会弹出一个对话框,

在ID项填入ID_BUTT0N1 ,就可以了。接着依次把两个ID号改为ID_BUTT0N2 , ID_BUT00N3。在这个对话框里也可以改变工具栏按钮的大小。

接下来我们样在对话框类的OnlnitDialog函数里的所有代码之后,return TRUE;之间添加以下语句:m_Toolbar.Create(this);〃创建工具栏控件

m_Toolbar.LoadToolBar(IDR_TOOLBAR1);〃装载工具栏资源

CRect rect(100,100,200,200);〃

m_Toolbar.MoveWindow(rect);〃移动工具栏在父窗口的位置

m_Toolbar.ShowWindow(SW_SHOW);〃显示工具栏

但这样显示工具栏不是很方便,特别是当窗口大小改变后,还要计算工具栏在窗口中的位置,有没有什么方法,

可以根据窗口大小自动调整工具栏到合适的位置呢?答案是肯定的,RepositionBars函数可以做到。实现方法如下,把上面的语句换成下面的:

m_Toolbar.Create(this);〃创建工具栏控件

m_Toolbar.LoadToolBar(IDR_TOOLBAR1);〃装载工具栏资源

//该函数用于显示工具栏,并根据窗口大小自动调整工具栏的位置

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

而响应工具栏按钮单击消息,跟前面介绍的添加按钮单击消息差不多,进入类向导,找到要添加的工具栏按钮

ID,添加COMMAND消息响应函数,如下图:

工具栏按钮上显示真彩位图

上面的例子有一个缺陷, 那就是工具栏按钮显示的图形, 不能超过256色,如果我想在工具栏按钮显示真彩位图,

上面的方法显示是无法实现的,那这个功能是如何实现呢?

SetlmageList 函数可以做到,既然要显示真彩位图,那就不能使用上面的工具栏资源( 256色),所以一切都得

到用代码实现

首先向工程引入六张位图(用于工具栏按钮显示的图片),假设 IDB_BITMAP3,IDB_BITMAP4,IDB_BITMAP5,IDB_BITMAP6 第一步:在对话框里添加两个成员变量分别是: CToolBar m_Toolbar; CImageList m 」mageList;

第二步:在对话类文件添加以下宏定义:

像要大,具体是按钮的要

//比图像的宽大7或者以上,高6

m_Toolbar.GetToolBarCtrl().SetImageList(&m_I mageList);//

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

ID 号分别为 IDB_BITMAP1 ,IDB_BITMAP2,

,大小为50X38

#define ID BUTTON1 501 #define ID BUTTON2 502 #define ID BUTTON3 503 #define ID BUTTON4 504 #define ID BUTTON5 505 #define ID BUTTON6 506

接下来在对话框初始化函数

OnInitDialog 后面添加如下语句:

m_I mageList.Create(50,38,ILC_COLOR24|ILC_MASK,1,1);〃 图片大小必须一致

CBitmap bmp; for(int i=0;i<6;i++)

bmp.LoadBitmap(IDB_BITMAP1+i);

m 」mageList.Add(&bmp,RGB(255,255,255)); bmp.DeleteObject();

UINT nArray[6]; for(i=0;i<6;i++)

nArray[i]=ID_BUTTON1+i;

m_Toolbar.CreateEx(this);〃 创建工具栏控件,CreateEx 函数创建的工具栏,默认有浮动按钮属性

m_Toolbar.SetButtons (nArray,6);〃 创建六个工具按钮,并依次设置 ID 号,对应nArray 数组的元素

m_Toolbar.SetSizes(CSize(60,56),CSize(50,38));〃

函数第一个是按钮大小,第二个是图像大小,按钮必须比图

设置图像

相关文档
最新文档