郁闷阳光的专栏

欢迎朋友们经常来逛逛,一起交流

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

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
  }

阅读更多
个人分类: WINDOWS C++/SDK C++/MFC
想对作者说点什么? 我来说一句

vc下如何对话框加入菜单

2011年01月24日 26KB 下载

QT中如何添加工具条教程

2011年08月28日 14KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭