如何在对话框中加入工具条

MFC中使用CToolBar类管理工具条,以下是MSDN中的说明。

类CToolBar的对象是带有一行位图按钮和可选分隔线的控件条。这些按钮可以像普通按钮、核选按钮或单选按钮那样动作。CToolBar对象通常是由CFrameWnd或CMDIFrameWnd派生的框架窗口对象的嵌入成员。

  CToolBar::GetToolBarCtrl是MFC4.0后新增加的成员函数,它允许你利用Windows通用控件对工具条的定制及其它性能的支持。CToolBar的成员函数为你提供了Windows通用控件的大多数性能;但是,当你调用GetToolBarCtrl时,你可以使你的工具条具有更多Windows 95工具条的特征。参见CToolBarCtrl可以获得更多有关如何使用Windows通用控件来设计工具条的信息。更多有关通用控件的一般信息,参见“Windows 95 SDK程序员参考”中的“通用控件”。

  Visual C++提供了两种创建一个工具条的方法。要使用资源编辑器(ResourceEditor)创建一个工具条,应遵循下面的步骤:

1.创建一个工具条资源。
2.构造CToolBar对象。
3.调用Create(或CreateEx)函数来创建Windows工具条并将它与该CToolBar对象连接。
4.调用LoadToolBar来装入工具条资源。

  另外,也可以依据下面的步骤:

1.构造CToolBar对象。
2.调用Create(或CreateEx)函数来创建Windows工具条并将它与CToolBar对象连接。
3.调用LoadBitmap来装入包含工具条按钮图像的位图。
4.调用SetButtons来设置按钮风格并使每一个按钮与位图中的一幅图像关联。

  此工具条中的所有按钮图像都位于同一个位图,该位图必须为每一个按钮包含一个图像。所有的图像都必须是同样大小的。缺省的尺寸是16个像素宽和15个像素高。这些图像必须一幅接一幅的放在位图中。

  SetButton函数以指向一个控制ID数组的指针和一个指定数组中元素数目的整数作为参数。该函数将每个按钮的ID值设置为对应的数组元素的值,并赋予每个按钮一个图像索引值,每个索引值指定对应按钮图像在位图中的位置。如果某一数组元素的值为ID_SEPARATOR,则不为其赋图像索引值。

  按钮图像在位图中的次序通常就是图像在屏幕上的绘制次序,但你也可以使用SetButtonInfo函数来修改图像次序和绘制次序的关系。

  一个工具条中的所有按钮都具有相同的尺寸。按照“Windows界面软件设计指南”中所说,缺省尺寸为24×22个像素。图像和按钮之间的任何空白尺寸都可用来在图像周围形成一个边界。

  每个按钮具有一幅图像。按钮的各种状态和风格(被压住,弹起,按下,无效,无效按下,以及不定)都可以由这幅图像产生。虽然位图可以是任何颜色,但是使用灰色加黑色文字及阴影可实现最好的效果。

  缺省情况下,工具条按钮模拟普通按钮。但是,工具条按钮也可以模拟复选框按钮和单选按钮。复选框按钮具有三种状态:核选,清除和不定。单选按钮值具有两种状态:核选和清除。

  要设置单个按钮或不指向一个数组的分隔线风格,可以调用GetButtonStyle来获取这个风格,然后调用SetButtonStyle(而不是调用SetButton)。当你要在运行时改变按钮的风格时,SetButtonStyle是最有用的。

  要分配显示在一个按钮上的文本,可以调用GetButtonText来获取要显示在该按钮上的文本,然后调用SetButtonText来设置这些文本。

  要创建一个复选框按钮,给它赋予TBBS_CHECKBOX风格或在一个ON_UPDATE_ COMMAND_UI处理程序中使用某个CCmdUI对象的SetCheck成员函数。调用SetCheck将一个普通按钮变成一个复选框按钮。传递给SetCheck函数的参数为0,则按钮是未核选的,传递1则按钮被核选,传递2则按钮为不定状态。

  要创建一个单选按钮,在一个ON_UPDATE_COMMAND_UI处理程序中调用某个CCmdUI对象的SetRadio成员函数。给SetRadio传递参数0,则按钮为未核选的,传递非零值,则按钮是被核选的。为了提供一个单选按钮组的互不相容性,则组中的每个按钮都必须具有ON_UPDAT_COMMAND_UI处理程序。

  有关使用CToolBar的更多信息,参见“Visual C++程序员指南”中的文章“工具条”和“Visual C++联机文件”中的技术注释31,控制条。

  #include <afxext.h>

  请参阅:

  CToolBarCtrl,CControlBar, CToolBar::Create, CToolBar::LoadBitmap, CToolBar::SetButtons, CCmdUI::SetCheck, CCmdUI::SetRadio

  CToolBar类成员

  构造

CToolBar创建一个CtoolBar对象
Create创建Windows工具条并将它与该CToolBar连接
CreateEx为嵌入的CtoolBarCtrl对象创建一个具有附加风格的CToolBar对象
SetSizes设置按钮及其位图的尺寸
SetHeight设置工具条的高度
LoadToolBar装入一个用资源编辑器创建的工具条资源
LoadBitmap装入包含位图-按钮图像的位图
SetBitmap设置一个位图中的图像
SetButtons设置按钮风格和按钮图像在位图中的索引

  属性

CommandToIndex返回具有给定的命令ID的按钮的索引
GetItemID返回具有给定索引值的按钮或分隔线的命令ID
GetItemRect获取具有给定索引值的项的显示矩形
GetButtonStyle获取一个按钮的风格
SetButtonStyle设置一个按钮的风格
GetButtonInfo获取一个按钮的ID,风格和图像号
SetButtonInfo设置一个按钮的ID,风格和图像号
GetButtonText获取要显示在一个按钮上的文本
SetButtonText设置要显示在一个按钮上的文本
GetToolBarCtrl允许直接访问基本的通用控件

如何在对话框中加入工具条, 示例代码如下:

BOOL CYourDlg::OnInitDialog() { CDialog::OnInitDialog(); // Create the toolbar. To understand the meaning of the styles used, you // can take a look at the MSDN for the Create function of the CToolBar class. ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM); // I have assumed that you have named your toolbar''s resource as IDR_TOOLBAR1. // If you have given it a different name, change the line below to accomodate // that by changing the parameter for the LoadToolBar function. ToolBar.LoadToolBar(IDR_TOOLBAR1); CRect rcClientStart; CRect rcClientNow; GetClientRect(rcClientStart); // To reposition and resize the control bar RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,0, reposQuery, rcClientNow); CPoint ptOffset(rcClientNow.left - rcClientStart.left,rcClientNow.top-rcClientStart.top); CRect rcChild; CWnd* pwndChild = GetWindow(GW_CHILD); while (pwndChild) { pwndChild->GetWindowRect(rcChild); ScreenToClient(rcChild); rcChild.OffsetRect(ptOffset); pwndChild->MoveWindow(rcChild, FALSE); pwndChild = pwndChild->GetNextWindow(); } CRect rcWindow; GetWindowRect(rcWindow); rcWindow.right += rcClientStart.Width() - rcClientNow.Width(); rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height(); MoveWindow(rcWindow, FALSE); // And position the control bars RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); return TRUE; // return TRUE unless you set the focus to a control }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值