VC 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菜单、工具栏和状态栏 - 副本
实验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(工具栏:工具栏的创建、停靠与使用)
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的用法自从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 常用控件使用方法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(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工具栏(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基础,图标,光标,标题,工具栏,状态栏等(最细致的讲解改变窗口大小和标题修改:在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。
MFC菜单、工具栏和状态栏
MFC菜单、⼯具栏和状态栏菜单:CMenu类CMenu类的主要成员函数BOOL LoadMenu(UINT nIDResource);加载菜单资源,并将其附加到CMenu对象上。
参数nIDResource指定了要加载的菜单资源的ID。
如果菜单加载成功则返回TRUE,否则返回FALSE。
BOOL DeleteMenu(UINT nPosition,UINT nFlags);在菜单中删除⼀个菜单项。
参数nPosition指定要删除的菜单项。
参数nFlags就⽤来解释nPosition的意义,为MF_BYCOMMAND时说明nPosition表⽰菜单项的ID,为MF_BYPOSITION时说明nPosition表⽰菜单项的 BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = 0);⽤来在指定位置显⽰⼀个浮动的弹出式菜单。
参数nFlags指定屏幕坐标和⿏标位置的标志,可以是以下取值:TPM_CENTERALIGN:菜单在⽔平⽅向上相对于参数x指定的坐标值居中显⽰TPM_LEFTALIGN:菜单的左侧与参数x指定的坐标值对齐TPM_RIGHTALIGN:菜单的右侧与参数x指定的坐标值对齐TPM_BOTTOMALIGN:菜单的底部与参数y指定的坐标值对齐TPM_TOPALIGN:菜单项的顶部与参数y指定的坐标值对齐TPM_VCENTERALIGN:菜单在垂直⽅向上相对于参数y指定的坐标值居中显⽰这⾥先介绍这⼏个⽐较常⽤的,其他可参见MSDN。
参数x指定弹出式菜单的⽔平⽅向的屏幕坐标,参数y指定菜单顶部垂直⽅向上的屏幕坐标,参数pWnd指明哪个窗⼝拥有此弹出式菜单,不能为NULL,参数lpR UINT CheckMenuItem(UINT nIDCheckItem,UINT nCheck);在弹出菜单中为菜单项增加选中标记或移除选中标记。
MFC实验五 菜单、工具栏和状态栏解读
菜单、工具栏和状态栏实验步骤:01.利用MFC AppWizard[exe]创建SDI应用程序,项目名为wx203_1。
02.单击项目工作区窗口下的ResourseView标签,打开资源列表。
展开Menu,双击Menu下的IDR_MAINFRAME即可打开菜单编辑器,如图所示。
03.为程序添加顶层菜单项。
双击菜单编辑器中具有虚线的空白框,打开菜单属性对话框,如图所示。
在Caption中输入菜单项标题“画图[&D]”。
04.为顶层菜单添加下拉菜单。
在菜单编辑器中单击“画图[&D]”,双击下方的新菜单项框,弹出菜单属性对话框。
在ID框中输入ID_DRAW_ELLIPSE,在Caption框中输入菜单项标题“椭圆[&E]\tCtrl+E”。
在Prompt框中输入次菜单的提示信息“在视图窗口画一个椭圆\n 画椭圆”。
05.重复第03、04步,设计的菜单如图所示。
各菜单项的ID值如表所示:06.添加消息处理函数。
在视图类CWx203_1View的定义中添加如下的数据成员:在视图类CWx203_1View的构造函数中对数据成员进行初始化:按下Ctrl+W打开ClassWizard对话框,选中Message Maps标签,在Class name中选择类名CWx203_1View,在Objects Ids下选择ID_DRAW_ELLIPSE,在Messages框中选择COMMAND,单击Add Function为椭圆菜单添加消息处理函数,单击Edit Code按钮打开代码编辑窗口,编辑消息处理函数:同样为其它菜单添加WM_COMMAND消息处理函数如下:编辑视图类OnDraw函数,在其中添加如下代码:编译、链接和运行程序,如下图所示:07.为“画图”下拉菜单添加用户界面更新处理函数。
在Messages列表框中选择UPDATE_COMMAND_UI。
用户界面更新处理函数如下:08.单击项目工作窗口下的ResourceView标签,打开资源列表。
mfc toolbar用法
mfc toolbar用法MFC(Microsoft Foundation Classes)是一个微软公司提供的应用程序框架,用于在Windows 操作系统上开发应用程序。
在 MFC 中,Toolbar 工具栏是一个常用的控件,它可以包含多个按钮,并且可以自定义每个按钮的图像、文本和功能。
以下是一个简单的 MFC Toolbar 用法示例:1. 在 VS2019 中新建一个 MFC 项目。
2. 右键资源文件,选择 ToolBar,点击新建。
3. 自定义三个按钮,可以设置图案、颜色、样式。
4. 因为资源不能像控件一样通过自动生成工具自动添加变量,所以需要手动添加成员变量,在主对话框的 h 文件中添加 CToolBar 类型的变量,并引入 afxext.h 头文件。
5. 在主窗口 cpp 中重写父类继承下来的虚函数 OnInitDialog(),并添加以下代码。
以下是详细步骤:1. 在 VS2019 中新建一个 MFC 项目。
2. 右键资源文件,选择 ToolBar,点击新建。
3. 自定义三个按钮,可以设置图案、颜色、样式。
4. 因为资源不能像控件一样通过自动生成工具自动添加变量,所以需要手动添加成员变量,在主对话框的 h 文件中添加 CToolBar 类型的变量,并引入 afxext.h 头文件。
5. 在主窗口 cpp 中重写父类继承下来的虚函数 OnInitDialog(),并添加以下代码。
上述代码将在 MFC 应用程序中创建一个包含三个按钮的 Toolbar 工具栏,并在主窗口中显示。
每个按钮的图像和功能可以根据需要进行自定义。
请注意,上述示例仅涵盖了Toolbar 工具栏的基本用法,你可以根据实际需求进一步扩展和定制其功能。
MFC添加菜单、工具条和状态栏
为<对话框>添加工具条和状态栏前,先说说添加目录菜单栏;1,在Insert下拉菜单中选择Resorce,新建一个MENU,2,在CDialog::OnInitDialog();后面添加代码:CMenu menu;menu.LoadMenu(IDR_MENU1); // 红色部分为你新建MENU的ID索引SetMenu(&menu);为对话框程序添加工具条和状态栏摘要:本文介绍了在对话框程序基础上通过程序控制来动态添加工具条和状态条的实现过程和方法。
一、引言对于不需要文档/视图结构支持的程序一般都采用对话框做为程序的基础框架。
虽然在对话框程序上可以通过修改其属性来添加系统菜单,但对比SDI和MDI程序的工具条和状态栏未免使界面显得简单、单调。
虽然在V isual Basic 中提供有独立的工具条和状态栏标准控件可以直接在对话框上使用,但V isual C++ 6.0所提供的26种基本Windows标准控件却没有将它们包含其中。
因此要在对话框程序中实现工具条和状态栏只能通过编程来动态实现。
二、工具条的实现过程MFC对于工具条和状态栏分别提供了CToolBar和CStatusBar两个基本类库,但由于在实现时MFC 对其做了过多的封装,以至无法了解内部的一些核心技术。
因此本文在实现过程中放弃了相对比较方便的CToolBar和CStatusBar类的使用,而是通过SDK(Software Developers Kit,软件开发工具箱)式的WinAPI 应用程序接口来实现的。
在API函数中经常需要用到对话框的窗口句柄和当前的实例句柄,在SDK程序设计中以上两个句柄可以直接从入口函数WinMain()中引出,而在MFC下也对其做了封装,不能直接获取。
但MFC也为其留有接口:CWnd窗口类提供的GetSafeHwnd()可以返回对话框的窗口句柄;函数AfxGetInstanceHandle()则可以获取当前应用程序的实例句柄。
MFC控件使用详细教程
使用Windows标准控件我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。
在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。
所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。
Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。
表6.1 Windows标准控件续表6.1前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。
Windows标准控件在以下环境下提供:•Windows 95•Windows NT 3.51及以后版本•Win32s 1.3•注意:•Visual C++ 4.2及以后版本不再支持Win32s。
(2) ActiveX控件ActiveX控件可用于对话框中,也可用于HTML文档中。
这种控件过去被称为OLE 控件。
本书将在专门的章节中来讲述关于ActiveX控件的知识。
这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。
(3) 其它MFC控件类除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX 控件以外,MFC还提供了另外三种控件,它们由下面的三个类进行封装:•类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。
•类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。
•类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。
在本章我们仅讲述第一类控件,即Windows标准控件。
所涉及的内容包括各个控件的使用及相应的技巧。
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()函数。
VS2010和MFC编程入门之36(工具栏:工具栏资源及CToolBar类)
VS2010MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)菜单及CMenu类的使用,这里讲与菜单有密切联系的工具栏。
工具栏简介工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成。
当用户用鼠标单击工具栏上某个按钮时,程序会执行相应的操作,如果鼠标没有点击,只是停留在某个按钮上一会后,会弹出一个小窗口显示提示信息。
一般工具栏中的按钮在菜单栏中都有对应的菜单项中,即点击工具栏按钮与点击菜单项的效果相同。
但工具栏中的按钮都显式的排列出来,操作很方便,而且按钮上的图片描述功能更直观,所以工具栏作为用户操作接口来说比菜单更加便捷。
VS2010工具栏资源详解鸡啄米仍然以VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)中创建的单文档工程Example34为基础,讲解工具栏资源。
在Example34工程中,打开Resource View资源视图,展开Example->Example34.rc->Toolbar,我们可以看到有一个ID为IDR_MAINFRAME的工具栏资源,双击打开,工具栏资源显示如下:以IDR_MAINFRAME工具栏的第一个按钮为例说明工具栏按钮的各项属性。
用鼠标单击工具栏资源上的第一个按钮,属性页中就会显示其属性。
下面分别讲解各项属性。
ID属性:ID_。
不知大家是否还记得,菜单IDR_MAINFRAME的菜单项File->New的ID也是ID_,两者ID相同,正是如此才使得工具栏第一个按钮与菜单项File->New能实现相同的功能。
所以大家一定要记住,如果想让工具栏某个按钮与菜单栏某个菜单项点击后执行的操作相同,就要为两者设置相同的ID。
Prompt属性:Create a new document\nNew。
此属性为工具栏按钮的提示文本。
在鼠标指向此按钮时,状态栏中会显示“Create a new document”,当弹出提示信息窗口时会显示包含“New”的提示信息。
mfc列表框控件的使用
MFC列表框控件的使用1. 介绍MFC(Microsoft Foundation Classes)是微软公司提供的一套用于开发Windows 桌面应用程序的C++类库。
MFC列表框控件是其中的一种常用控件,它可以用来显示和编辑列表中的项。
在本文中,我们将学习如何使用MFC列表框控件来创建、显示和操作列表中的数据项。
2. 创建列表框控件首先,我们需要在对话框资源中添加一个列表框控件。
打开Visual Studio,创建一个新的MFC应用程序项目,并选择对话框作为应用程序类型。
然后,在资源视图中双击IDD_DIALOG1以打开对话框编辑器。
在工具箱中找到列表框控件(List Box),并将其拖放到对话框上。
3. 设置属性选中刚刚添加的列表框控件,在属性窗口中可以设置其各种属性。
3.1 样式(Style)样式属性定义了列表框的外观和行为。
常见的样式包括:•单选(Single):只能选择一个项。
•多选(Multiple):可以选择多个项。
•排列(Sort):自动按字母顺序排序。
•水平滚动条(Horizontal Scrollbar):显示水平滚动条。
•垂直滚动条(Vertical Scrollbar):显示垂直滚动条。
3.2 数据源(Data)数据源属性定义了列表框中显示的数据项。
可以通过以下几种方式设置数据源:•字符串数组(String Array):将一个字符串数组赋给列表框。
•整数数组(Integer Array):将一个整数数组赋给列表框,每个整数对应一个数据项。
•数据库记录集(Database Recordset):将数据库查询结果赋给列表框。
3.3 绑定变量(Bound Variable)绑定变量属性定义了与列表框关联的变量。
当用户选择某个项时,该变量会被更新。
可以使用以下几种类型的变量:•字符串变量(String Variable):保存选中项的文本。
•整数变量(Integer Variable):保存选中项的索引。
vc的菜单,工具栏
vc的菜单,⼯具栏⾸先,MFC会⾃动⽣成⼀些菜单,我们也可以在resource view中添加菜单。
点击菜单栏属性--〉左上⾓校园最图形,可以将属性页显⽰。
不会随着菜单项变动丢失。
ID号变灰的栏是不可以编辑的。
是弹出的POPUP菜单。
它不能被⽤来做响应。
⼤写字母标⽰资源。
IDI IDC IDM分别表⽰不同的类型资源。
⼀个菜单项可以由CMAINFRAM CXXXVIEW CXXApp CXXDOC view类先对其响应,接着doc类对其进⾏响应,MAINFRAM第三个对其进⾏响应,第四个响应的APP类对其进⾏响应。
Afxmessagebox框架函数,可以响应⾮WND派⽣类的弹出的提⽰,⽽wnd派⽣的可以直接⽤MessageBox函数。
消息包括三类:WM_XXX标准消息,从cwnd派⽣的类可以接收也可以接受命令消息,WM_COMMANed命令消息(通过ID号标识识别,由cmdtarget派⽣的类可以接受,⽐如说⽂档类,CEIDTview类),第三类通知消息,有cmdtarget派⽣的类可以接收。
APP和Doc类从CMDTARGET派⽣,所以不能接收标准消息。
命令消息,头⽂件消息影射中添加原形,原⽂件中添加ON_COMMND宏完成影射,还有命令函数实现。
命令函数由ONCOMMAND来处理,通知消息由ONNOTIFY来实现。
命令消息到来时⾸先到达CMAINFRAM然后到送达CVIEW 来处理,根据命令消息影射来处理,如果没有处理函数,交给DOC类,如果还没有处理函数,交还给VIEW类,------〉交还CMAINFRAM 类,如果他也没有处理函数,交给APP类来处理。
标记菜单(打对购得):在CMAINFRAM中ONCREATE中创建。
菜单属于框架窗⼝,获取菜单栏指针的⽅法为GetMenu,它返回⼀个返回CMenu的指针。
但是其指向的对象是不⼀样的,⼀个为菜单,⼀个为⼦菜单。
CMenu中的checkmenuitem⽅法可以设置标记。
VC++的菜单与工具栏使用方法解析
m_rectangle = TRUE; m_ellipse =FALSE; dc.SelectObject(pOldBrush); dc.SelectObject(oldpen); delete pNewBrush;
}
对应的更新命令UI控制函数OnUpdateGraphEllipse , 根据变量m_ellipse的值来控制菜单的有效性状态, 决定菜单项“ellipse”什么时候有效
CWnd*pWnd, LPCRECT lpRct=NULL); 其中参数nFlags为弹出式菜单的标志,例如若其值为 TPM_RIGHTALIGN,表示创建的弹出式浮动菜单,其右边 界位于X处;若其值为TPM_LEFTALIGN,表示其左边界位 于X处,参数X与Y表示屏幕坐标。
(1)浮动菜单的创建
对应的更新命令UI控制函数 OnUpdateGraphRec根据变量m_rectangle的值 来控制菜单的有效性状态,决定菜单项 “rectangle ”什么时候有效。
void CMenuitemView::OnUpdateGraphRec(CCmdUI*pCmdUI)
{ pCmdUI->Enable(m_rectangle);
CBrush* pNewBrush, * pOldBrush; pNewBrush=new CBrush; pNewBrush->CreateSolidBrush(m_crbk); pOldBrush=dc.SelectObject(pNewBrush); dc.Ellipse(230,70,310,150);
如果菜单项有更新处理函数,那么它被调用进行 更新;如果没有,那么框架检查命令处理函数是否 存在,若不存在,则使菜单变灰。
必须提供一个菜单处理函数或更新函数。
VC++在MFC程序中使用XML文件配置工具栏,带图
VC++在MFC程序中使用XML文件配置工具栏,带图现在我发现使用Visual Studio的资源编辑器进行编辑资源有着诸多的不便:首先是任何资源的变动一般变动代码,不利于系统维护,其次Visual Studio的资源编辑器的本身的功能有限,也不利于界面美化,三是不利于人员分工,开发人员既要忙实现功能,又要忙准备好的界面素材。
对界面实现文件配置化正是解决上面问题的好方法。
这次我实现了使用XML文件配置工具栏。
这里所谓配置就是工具栏的界面信息如工具栏标题、按钮图片、是否为分隔符都在XML文件保存,程序通过解析XML文件来获取工具栏信息来创建工具栏。
这样一旦发现界面不合适可以随时修改配置文件,同时利于人员分工。
具体的做法如下:1. 在工程的输出目录下有一个SysConfig.xml,作为系统配置文件。
其中关于工具栏的配置部分如下:<AppToolbar valid="1" caption="基础工具"><ToolButton file="Add.bmp" /><ToolButton separator="true" /><ToolButton file="Benchmark.bmp" /><ToolButton file="Comment.bmp" /><ToolButton file="Convert.bmp" /><ToolButton file="Delete.bmp" /><ToolButton file="Exit.bmp" /></AppToolbar>简单解释一下上面的节点意义:valid表示工具栏是否有效,caption表示工具栏标题,file 节点为工具栏按钮所贴图片,separator表示按钮是分隔符。
VC2008在CMFCToolBar工具栏中加入组合框
VC2008在CMFCToolBar工具栏中加入组合框如何在CMFCToolBar工具栏中加入组合框等控件,且先看在线MSDN上怎么说的:To add a combo box button to a toolbar, follow these steps:1. Reserve a dummy resource ID for the button in the parent toolbar resource.2. Construct a CMFCToolBarComboBoxButton object.3. In the message handler that processes the AFX_WM_RESETTOOLBAR message, replace the dummy button with the new combo box button by using CMFCToolBar::ReplaceButton.具体过程如下:1.在工具栏资源编辑器中加入id为IDR_COM的空白工具栏,2.在头文件中定义组合框CMFCToolBarComboBoxButton* m_ComboButton;3.BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)中添加消息响应ON_REGISTERED_MESSAGE(AFX_WM_RESETTOOLBAR, OnToolbarReset)在头文件中声明消息函数:afx_msg LRESULT OnToolbarReset(WPARAM,LPARAM);在CMainFram中定义处理函数:LRESULT CMainFrame::OnToolbarReset(WPARAM wp,LPARAM lp){m_ComboButton = new CMFCToolBarComboBoxButton(IDR_COM,GetCmdMgr()->GetCmdImage (IDR_COM, FALSE));m_ComboButton->EnableWindow(true);m_ComboButton->SetCenterVert();m_ComboButton->SetDropDownHeight(25);m_ComboButton->SetFlatMode();m_ComboButton->AddItem(_T("OPTION1"));m_ComboButton->AddItem(_T("OPTION2"));m_ComboButton->SelectItem(0);m_wndT oolBar.ReplaceButton (IDR_COM, *m_ComboButton);return 0;}2、添加组合框的事件消息响应函数消息映射:ON_COMMAND(IDR_COM,&CMainFrame::OnClickComboBox)ON_CBN_SELCHANGE(IDR_COM,&CMainFrame::OnSelChan geClick)//别忘了在TOOLBAR中添加IDR_COM资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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类关联的图片不一样。