VC MFC中使用工具栏控件详解

合集下载

MFC教程 MFC工具条和状态栏

MFC教程 MFC工具条和状态栏

13. MFC工具条和状态栏1. Windows控制窗口Windows (Windows95或者以上版本) 提供了系列通用控制窗口,其中包括工具条(ToolBar)、状态栏(StatusBar)、工具条提示窗口(ToolTip)。

Windows在一个DLL加载时注册个控制窗口的“窗口类”。

例如,工具条的“窗口类”是“ToolbarWindow32”,状态栏的“窗口类”是“msctls_statusbar32”,工具条提示窗口的“窗口类”是“tooltips_class32”。

为了保证该DLL被加载,使用控制“窗口类”前,应该首先调用函数InitCommonControl。

MFC在窗口注册函数AfxDeferRegisterClass中实现了这一点。

见2.2.1节MFC下窗口的注册。

创建通用控制窗口,可以使用专门的创建函数,如创建工具条的函数::CreateToolBarEx,创建状态栏的函数::CreateStatusBarEx。

也可以调用窗口创建函数::CreateWindowEx,但是需要指定预定义的“窗口类”,必要的话还要其他步骤,如使用“ToolbarWindow32”“窗口类”创建工具栏后,还需要在工具栏中添加或者插入按钮。

一般,通用控制可以指定控制窗口风格(Style)。

例如,具备风格CCS_TOP,表示该控制窗口放到父窗口客户区的顶部,具备CCS_BOTTOM,表示该控制窗口在客户区的底部。

具体的控制窗口类可以有特别的适合于自己的风格,例如,TTS_ALWAYSTIP表示只要光标落在工具栏的按钮上,ToolTip窗口不论激活与否都会显示出来。

每一控制窗口类都有自己的窗口过程来处理自己的窗口消息,实现特定的功能。

控制窗口类的窗口过程由Windows提供。

● 工具条工具条的窗口过程处理了必要的消息,提供了标准工具条的功能,例如,工具条对客户化特征提供内在的支持,用户可以通过一个客户化对话框来添加、修改、删除或者重新安排工具条按钮。

MFC实验3菜单、工具栏和状态栏 - 副本

MFC实验3菜单、工具栏和状态栏 - 副本

实验3 菜单、工具栏和状态栏一、实验目的通过本实验,掌握菜单、工具栏和状态栏的使用二、实验内容制作一个含有菜单、工具栏和状态栏的单文档应用程序,要求如下:(1)其中菜单栏中添加一个菜单项:“我的菜单(M)”,内容如图3-1所示。

其中,Position Set中的各项分别让工作区的文本向下(Move Down10)、向左(Move Left10)、向上(Move Up10)、向右(Move Right10)移动10个坐标位置。

(a)Text Set菜单项(b)Position Set菜单项(c)Message Set菜单项图3-1“我的菜单(M)”的内容(2)工具栏中添加六个按钮,如图3-2(a)中所示,且工具栏中按钮的功能与对应菜单项功能一致。

(3)状态栏中添加两个信息用来显示鼠标的坐标位置,当鼠标移动时状态中的指针坐标位置会发生变化。

(4)运行结果如图3-2所示。

(a)初始运行结果(b)Text1菜单项的运行结果(c)Text2菜单项的运行结果(d)Position Set菜单项中各菜单项组合运行的结果(e)Hello菜单项的运行结果(f)Visual C++菜单项的运行结果提示:(1)新建一个名称为Menu的单文档使用程序,自动生成CMenuView、CMenuApp、CMenuDoc和CMainFrame四个类。

(2)打开“资源视图”标签,依次展开Menu、Menu.rc、Menu节点,单击IDR_MAINFRAME,打开菜单资源编辑器,进行“我的菜单”的添加,其中热键设置为M,因此菜单项的Caption 属性设置为“我的菜单(&M)”,其子菜单设置如下:添加加速键的方法:资源视图→“Acceleratora”项→双击“IDR_MAINFRAME”→进入加速键设置窗口。

(3)对CMenuView类进行Public类成员变量添加:int m_x;int m_y;CString m_Text;变量添加的方法:方法一:在类视图中选中CMenuView类点击右键,在弹出的快捷菜单中选择“类向导”→“成员变量”选项卡→“添加自定义…”按钮→“添加成员变量”在对话,然后在其中进行变量添加。

VS2010和MFC编程入门之37(工具栏:工具栏的创建、停靠与使用)

VS2010和MFC编程入门之37(工具栏:工具栏的创建、停靠与使用)

VS2010MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)工具栏资源及CToolBar类,这里继续讲解工具栏的相关知识,主要内容包括工具栏的创建、停靠与使用。

工具栏的使用前面曾提到过,一般情况下工具栏中的按钮在菜单栏中都有对应的菜单项,两者实现的功能相同,要想实现这种效果,只需要将工具栏按钮的ID与对应的菜单栏中菜单项的ID设置为相同值即可。

在实际使用工具栏时,除了前面讲的资源编辑外,其他使用与菜单类似。

例如,对COMMAND消息和UPDATE_COMMAND_UI消息,可以像VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)中的菜单应用实例那样为工具栏按钮添加消息处理函数。

如果工具栏按钮对应的菜单项已经添加了消息处理函数,那么就不必再为它添加了,因为它的ID与菜单项相同,所以会调用同样的消息处理函数。

这样点击工具栏按钮与点击相应菜单项执行相同的功能,在菜单项为选中、激活或禁用等状态时,工具栏按钮会有一样的状态。

工具栏的创建大家在第三十四讲创建的Example34工程的CMainFrame类中看到,它创建工具栏所使用的类并不是常用的CToolBar类,而是CMFCToolBar类。

CMFCToolBar类是自VS2008以来MFC提供的类,它与CToolBar类有些类似,但功能更丰富。

这里要注意,CMFCToolBar类与CToolBar类并没有任何派生关系。

鸡啄米这里就以CMFCToolBar类来讲讲工具栏的创建步骤:1. 创建工具栏资源。

2. 构造CMFCToolBar类的对象。

3. 调用CMFCToolBar类的Create或CreateEx成员函数创建工具栏。

4. 调用LoadToolBar成员函数加载工具栏资源。

大家可以对应着看看Example34的CMainFrame类自动生成的代码中创建工具栏的过程。

工具栏IDR_MAINFRAME的资源已经自动创建好。

VS2010中CMFCToolBar的用法

VS2010中CMFCToolBar的用法

VS2010中CMFCToolBar的用法自从VS2008中增加了一些特性的菜单,但这些特性在帮助中说明的很少,给使用者造成了很多麻烦。

笔者经过搜索以及自己的摸索,对其的用法有了初步了解,形成本文,如果能够为后来者解决一些问题,笔者将会感到欣慰。

一、向导自动生成的CMFCToolBar由于应用了系统风格,向导生成的菜单确实很漂亮。

如下图:但在某些情况下(至于哪些情况,笔者还不能确定),向导自动生成的菜单会没有名字,在“工具栏和停靠窗口”的子菜单下会显示空。

如下图:出现这种情况的解决办法就是自己给工具栏命个名称。

在CMainFrame::OnCreate()事件中给工具栏命名:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){……// TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);m_wndToolBar.SetWi ndowText(_T(“工具栏”)); //这是自己添加的……return 0;}二、自己添加一条工具栏自己添加的工具栏如果按照向导生成的样子去做,在菜单中是不会显示出来的,虽然工具栏已经生成了。

如下图:要想让菜单在“工具栏和停靠窗口”中显示,是不能完全按照向导生成的样子做的。

需要模仿向导生成的样子做但仍有点变化。

(1)创建自已的工具栏在头文件中定义一个工具栏变量。

CMFCToolBar m_wndToolBar2;在CMainFrame::OnCreate()事件中创建并加载工具栏: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(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 :IDR_MAINFRAME)){TRACE0("未能创建工具栏\n");return -1; // 未能创建}//自己创建的工具栏if (!m_wndToolBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |CBRS_SIZE_DYNAMIC,CRect(1,1,1,1),theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 +1:IDR_MAINFRAME+1) ||!m_wndToolBar2.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 :IDR_MAINFRAME)){TRACE0("未能创建工具栏\n");return -1; // 未能创建}(2)自己的工具栏浮动或停靠窗口// TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);//自己创建的工具栏EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);DockPane(&m_wndToolBar2);//自己创建的工具栏这时候再运行程序会显示如下图:(3)给自己的工具栏命名m_wndToolBar2.SetWindowText(_T("我的工具栏"));此时程序运行如下图:三、浮动我的工具栏在以前CToolBar的时候,浮动工具栏可以使用FloatControlBar()函数。

VC++MFC 常用控件使用方法

VC++MFC 常用控件使用方法

VC++MFC 常用控件使用方法4.1 Button按钮窗口(控件)在MFC中使用CButton表示,CButton包含了三种样式的按钮,Push Button,Check Box,Radio Box。

所以在利用CButton对象生成按钮窗口时需要指明按钮的风格。

创建按钮:BOOL CButton::Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );其中lpszCaption是按钮上显示的文字,dwStyle为按钮风格,除了Windows风格可以使用外(如WS_CHILD|WS_VISUBLE|WS_BORDER)还有按钮专用的一些风格。

BS_AUTOCHECKBOX 检查框,按钮的状态会自动改变 Same as a check box, except thata check mark appears in the check box when the user selects the box; the checkmark disappears the next time the user selects the box.BS_AUTORADIOBUTTON 圆形选择按钮,按钮的状态会自动改变 Same as a radio button, except that when the user selects it, the button automatically highlights itself andremoves the selection from any other radio buttons with the same style in the same group.BS_AUTO3STATE 允许按钮有三种状态即:选中,未选中,未定 Same as a three-state check box, except that the box changes its state when the user selects it.BS_CHECKBOX 检查框 Creates a small square that has text displayed to its right (unless this style is combined with the BS_LEFTTEXT style).BS_DEFPUSHBUTTON 默认普通按钮 Creates a button that has a heavy black border.The user can select this button by pressing the ENTER key. This style enables theuser to quickly select the most likely option (the default option).BS_LEFTTEXT 左对齐文字 When combined with a radio-button or check-box style, the text appears on the left side of the radio button or check box.BS_OWNERDRAW 自绘按钮 Creates an owner-drawn button. The framework calls the DrawItem member function when a visual aspect of the button has changed. Thisstyle must be set when using the CBitmapButton class.BS_PUSHBUTTON 普通按钮 Creates a pushbutton that posts a WM_COMMAND message to the owner window when the user selects the button.BS_RADIOBUTTON 圆形选择按钮 Creates a small circle that has text displayed to its right (unless this style is combined with the BS_LEFTTEXT style). Radio buttons are usually used in groups of related but mutually exclusive choices.BS_3STATE 允许按钮有三种状态即:选中,未选中,未定 Same as a check box, except that the box can be dimmed as well as checked. The dimmed state typically is used toshow that a check box has been disabled.rect为窗口所占据的矩形区域,pParentWnd为父窗口指针,nID为该窗口的ID值。

MFC_基本控件使用

MFC_基本控件使用

MFC_基本控件使用MFC(Microsoft Foundation Class)是一种用于开发Windows应用程序的编程框架,它提供了一系列的类和函数,方便开发者快速地创建Windows界面和处理事件。

在MFC中,基本控件是开发应用程序的重要组成部分,它们用于显示和交互用户界面。

本文将介绍MFC中几种常用的基本控件以及它们的使用方法。

1. 按钮控件(CButton):按钮控件用于接收用户的点击操作,通常用于触发相应的事件处理函数。

创建按钮控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“按钮”并将其拖动到对话框上;3)设置按钮的属性,如ID、文本、尺寸等。

1)在资源视图中右击对应的对话框,选择“添加控件”;组合框控件允许用户从预定义的选项中进行选择,类似于下拉列表。

创建组合框控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“组合框”并将其拖动到对话框上;3)设置组合框的属性,如ID、选项列表、尺寸等。

4. 列表框控件(CListBox):列表框控件用于显示一个选项列表,并且可以支持多选。

创建列表框控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“列表框”并将其拖动到对话框上;3)设置列表框的属性,如ID、选项列表、尺寸等。

5. 树形视图控件(CTreeCtrl):树形视图控件用于显示一个层级结构的数据,类似于文件夹结构或者程序的菜单栏。

创建树形视图控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“树形视图”并将其拖动到对话框上;3)设置树形视图的属性,如ID、尺寸等;4)使用CTreeCtrl的成员函数添加、删除、修改树节点。

6. List控件(CListCtrl):1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“List控件”并将其拖动到对话框上;3)设置List控件的属性,如ID、列数、尺寸等;以上是几种常用的MFC基本控件的使用方法,通过使用这些控件,可以轻松地创建出一个功能完善、交互友好的Windows应用程序。

VC MFC中使用工具栏控件详解

VC MFC中使用工具栏控件详解

VC MFC工具栏(CToolBar)控件工具栏工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建,如CButton按钮类,现举一个用代码创建按钮控件并显示在窗口里的例子。

CButton类的Create成员函数可以创建一个按钮控件,这个函数的格式如下:BOOL CButton::Create(LPCTSTR lpszCaption,//按钮显示的文本DWORD dwStyle,//按钮样式const RECT& rect,//按钮控件显示的区域(大小)相对于父窗口CWnd* pParentWnd,//按钮的父窗口(按钮属于哪个窗口)UINT nID//指明按钮控件ID号);这个函数的第二个参数dwStyle是按钮控件的样式,也就是在可视化添加按钮控件时,右击按钮控件,选择属性,之后会弹出一个对话框,这个对话框有一个样式的选项,该参数即对应这个样式。

好了,了解了上面这些我们就来动态创建一个按钮吧,首先在对应话类里添加一个按钮类成员变量CButtonm_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);//显示按钮控件知道了怎样动态创建按钮控件,我们就来创建工具栏控件。

MFC基础,图标,光标,标题,工具栏,状态栏等(最细致的讲解

MFC基础,图标,光标,标题,工具栏,状态栏等(最细致的讲解

MFC基础,图标,光标,标题,工具栏,状态栏等(最细致的讲解改变窗口大小和标题修改:在Cmainframe中的precreatewindow中cs.cx=600;cs.cy=600;cs.style=cs.style&~FWS_ADDTOTITLE;cs.lpszName="jiaotong";光标,背景在CMyview中的precreatewindow中cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,LoadCursor(NULL,IDC_HELP),(HBRUSH)GetStockObject(BLACK_BRUSH),0);动态图标修改:首先在resources中的Icon中插入两个图标然后按照以下步骤1.在mainframe类里的m_wndStatusBar中添加HICON的一个数组,大小为2public:HICON m_hIcons[2];2.在CMainFrame::OnCreate里加载图标m_hIcons[1]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));m_hIcons[2]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON2)); SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[1]);//将开始的图标设置为第一个图标SetTimer(1,1000,NULL);3.自定义一个定时器(点击右键选择add windows Message。

在里面选择VM_TIMER)void CMainFrame::OnTimer(UINT nIDEvent){static int i=1;SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[i+1]);i=++i%2;CFrameWnd::OnTimer(nIDEvent);}工具栏添加属性:1。

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

VC MFC工具栏(CToolBar)控件工具栏工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建,如CButton按钮类,现举一个用代码创建按钮控件并显示在窗口里的例子。

CButton类的Create成员函数可以创建一个按钮控件,这个函数的格式如下:BOOL CButton::Create(LPCTSTR lpszCaption,//按钮显示的文本DWORD dwStyle,//按钮样式const RECT& rect,//按钮控件显示的区域(大小)相对于父窗口CWnd* pParentWnd,//按钮的父窗口(按钮属于哪个窗口)UINT nID//指明按钮控件ID号);这个函数的第二个参数dwStyle是按钮控件的样式,也就是在可视化添加按钮控件时,右击按钮控件,选择属性,之后会弹出一个对话框,这个对话框有一个样式的选项,该参数即对应这个样式。

好了,了解了上面这些我们就来动态创建一个按钮吧,首先在对应话类里添加一个按钮类成员变量CButtonm_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;i<6;i++){bmp.LoadBitmap(IDB_BITMAP1+i);m_ImageList.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));//函数第一个是按钮大小,第二个是图像大小,按钮必须比图像要大,具体是按钮的要//比图像的宽大7或者以上,高6m_Toolbar.GetToolBarCtrl().SetImageList(&m_ImageList);//设置图像RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);运行效果如下图:如果要响应工具栏按钮单击消息的话,必须手动添加消息映射:如ON_COMMAND(ID_BUTTON1,Button1) //button1为消息处理函数如果要设置按钮显示文本的话,就是CToolBar类的 SetButtonText函数。

设置工具栏背景位图用CReBar类可以实现在工具栏背景里显示位图,可以把工具栏设置成CReBar类对应的子窗口,以上面的工程为例子,再在对话类里添加一个成员变量: CReBar m_Rebar;接着导入一张位图,用做工具栏的背景,ID号为ID_TOOLBACK,然后在OnInitDialog函数的RepositionBar(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);语句前面添加如下语句:m_Rebar.Create(this);//创建窗口(控件)m_Rebar.AddBar(&m_Toolbar);//添加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);编译,运行效果如下:为工具栏按钮添加鼠标停留提示信息以上面的工程为例子,在对话类里添加一个成员变量CString str;接着在m_Toolbar调用CreateEx函数后,调用这个语句:m_Toolbar.EnableToolTips();//激活信息提示功能然后在对话类里添加一个成员函数(用于TTN_NEEDTEXT消息处理函数),格式如下:BOOL OnDisplay(UINT id, NMHDR *pNMHDR, LRESULT *pResult)然后添加TTN_NEEDTEXT消息映射宏ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnDisplay)OnDisplay函数代码如下:TOOLTIPTEXT *pTTT=(TOOLTIPTEXT *)pNMHDR;UINT nID=pNMHDR->idFrom;//获取工具栏按钮IDUINT nIndex=m_mandToIndex(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;i<=IDI_ICON6;i++)m_ImageList.Add(AfxGetApp()->LoadIcon(i));//添加图标UINT nArray[6];for(i=0;i<6;i++){nArray[i]=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类关联的图片不一样。

相关文档
最新文档