VCMFC中使用工具栏控件详解.doc_第1页
VCMFC中使用工具栏控件详解.doc_第2页
VCMFC中使用工具栏控件详解.doc_第3页
VCMFC中使用工具栏控件详解.doc_第4页
VCMFC中使用工具栏控件详解.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VC MFC工具栏(CToolBar)控件 VC MFC工具栏(CToolBar)控件工具栏工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建,如CButton按钮类,现举一个用代码创建按钮控件并显示在窗口里的例子。CButton类的Create成员函数可以创建一个按钮控件,这个函数的格式如下:BOOL CButton:Create(LPCTSTR lpszCaption,/按钮显示的文本DWORD dwStyle,/按钮样式const RECT& rect,/按钮控件显示的区域(大小)相对于父窗口CWnd* pParentWnd,/按钮的父窗口(按钮属于哪个窗口)UINT nID/指明按钮控件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号,如果要改变“天”字按钮,选中该按钮,然后回车键,就会弹出一个对话框,在ID项填入ID_BUTTON1,就可以了。接着依次把两个ID号改为ID_BUTTON2,ID_BUTOON3。在这个对话框里也可以改变工具栏按钮的大小。接下来我们样在对话框类的OnInitDialog函数里的所有代码之后,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色,如果我想在工具栏按钮显示真彩位图,上面的方法显示是无法实现的,那这个功能是如何实现呢?SetImageList函数可以做到,既然要显示真彩位图,那就不能使用上面的工具栏资源(256色),所以一切都得到用代码实现首先向工程引入六张位图(用于工具栏按钮显示的图片),假设ID号分别为IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3,IDB_BITMAP4,IDB_BITMAP5,IDB_BITMAP6,大小为50X38第一步:在对话框里添加两个成员变量分别是:CToolBar m_Toolbar;CImageList m_ImageList;第二步:在对话类文件添加以下宏定义:#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_ImageList.Create(50,38,ILC_COLOR24|ILC_MASK,1,1);/图片大小必须一致 CBitmap bmp; for(int i=0;i6;i+) bmp.LoadBitmap(IDB_BITMAP1+i); m_ImageList.Add(&bmp,RGB(255,255,255); bmp.DeleteObject(); UINT nArray6; for(i=0;iidFrom;/获取工具栏按钮IDUINT nIndex=m_Toolbar.CommandToIndex(nID);/根据按钮ID获取索引str.Format(工具栏按钮%d,nIndex);pTTT-lpszText=str.GetBuffer(str.GetLength();/设置按钮提示信息pTTT-hinst=AfxGetResourceHandle();return TRUE;工具栏按钮上显示图标在按钮上显示图标,方法跟显示位图差不到哪去,只要让CImageList里添加的是图标就行了,首先向工程引入六个图标,假设ID号分别为IDI_ICON1、IDI_ICON2.IDI_ICON6以上面的工程为例:在OnInitDialog函数最后添加如下代码:m_ImageList.Create(48,48,ILC_COLOR24|ILC_MASK,1,1);/图片大小必须一致for(int i=IDI_ICON1;iLoadIcon(i);/添加图标 UINT nArray6; for(i=0;i6;i+) nArrayi=ID_BUTTON1+i; m_Toolbar.CreateEx(this);/创建工具栏控件 m_Toolbar.EnableToolTips();/激活信息提示功能 m_Toolbar.SetButtons(nArray,6); m_Toolbar.SetSizes(CSize(60,56),CSize(48,48); m_Toolbar.GetToolBarCtrl().SetImageList(&m_ImageList); m_Rebar.Create(this); m_Rebar.AddBar(&m_Toolbar); m_Rebar.RedrawWindow(); REBARBANDINFO info; info.cbSize=sizeof(info); info.fMask=RBBIM_BACKGROUND; m_Toolbar.ModifyStyle(0,TBSTYLE_TRANSPARENT);/设置工具栏背景色透明 info.hbmBack=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_TOOLBACK); m_Rebar.GetReBarCtrl().SetBandInfo(0,&info); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);运行效果如下:设置工具栏按钮热点图片像前面的SetImageList函数设置工具栏按钮正常显示时的图片,而SetHotImageList函数是设置工具热点按钮图片,也就是当鼠标停留在按钮上所显示的图片,用法跟SetImageList函数一样,只是CImageList类关联的图片不一样。为了显示热点按钮图片,我们得准备两组图片,一组用于正常显示,一组用于热点显示。这里我的图片格式是图标。还有一点要说明的是,工具栏必须具有TBSTYLE_FLAT(浮动按钮)属性,这一点在用CreateEx函数创建工具栏的时候,已经默认包含了。两组图片:正常显示:热点显示:工具栏背景位图:首先向工程引入这十二个图标:假设正常显示的图标ID号依次为:IDI_NORMAL1、IDI_NORMAL2、。IDI_NORMAL6热点图标ID依次为:IDI_HOT1、IDI_HOT2、。IDI_HOT6然后引入背景位图,ID号为IDB_TOOLBACK做完了这些,我们就向对话类里添加四个成员变量:CToolBar m_Toolbar;CImageList m_ImageList;CImageList m_hotImageList;CReBar m_Rebar;然后增加五个宏定义:#define ID_BUTTON1 501#define ID_BUTTON2 502#define ID_BUTTON3 503#define ID_BUTTON4 504#define ID_BUTTON5 505接着在OnInitDialog函数添加如下代码:m_ImageList.Create(48,48,ILC_COLOR24|ILC_MASK,1,1);/图片大小必须一致m_hotImageList.Create(48,48,ILC_COLOR24|ILC_MASK,1,1);for(int i=0;iLoadIcon(IDI_NORMAL1+i); m_hotImageList.Add(AfxGetApp()-LoadIcon(IDI_HOT1+i); UINT nArray5; for(i=0;iLoadIcon(IDI_ICON1);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON2);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON3);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON4); m_TBarCtrl.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,1200);m_TBarCtrl.SetImageList(&m_ImageList);for(int i=0;i4;i+)buttoni.fsState=TBSTATE_ENABLED;buttoni.fsStyle=TBSTYLE_BUTTON;buttoni.iBitmap=i; m_TBarCtrl.AddButtons(4,button);m_TBarCtrl.AutoSize();m_TBarCtrl.SetStyle(TBSTYLE_FLAT|CCS_TOP);运行效果:为CToolBarCtrl类创建的工具栏添加按钮单击处理消息上面的TBBUTON结构里有一个成员idCommand,这个成员跟菜单项的ID值一样,用于标识工具栏按钮项,也就是说idCommand是工具栏项ID号,就是最前面设置工具栏资源时,选择一个按钮,然后按回车,弹出一个对话框,里面有一个ID项,跟这个是一样的。所以呢,我们只要把上面的给TBBUTTON结构成员赋值的语句改成下面这样就行了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论