一、创建普通toolbar

1.         新建一MFC程序,在Dlg头文件中添加一个CToolBar类的成员变量CToolBar m_Toolbar;

2.         然后在头文件中定义工具栏命令ID。

#define ID_BUTTON1    501
#define ID_BUTTON2    502
#define ID_BUTTON3    503

3.         在资源对话框中,新建一toolbar.然后创建3个按钮。

注意:在VS 2008中添加按钮操作是对当前按钮的ID属性赋值,系统会自动出现一个新的按钮。

4.         修改按钮的ID分别为ID_BUTTON1、ID_BUTTON2、ID_BUTTON3,也可以修改按钮的大小,用画笔工具修改按钮的样子。

5.         然后就可以初始化toolbar了:

m_Toolbar.Create(this);//创建工具栏控件
 m_Toolbar.LoadToolBar(IDR_TOOLBAR1);//装载工具栏资源
 //该函数用于显示工具栏,并根据窗口大小自动调整工具栏的位置
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

6.         添加按钮的相应事件:

首先在头文件中声明事件处理函数:

afx_msg void Button1Click();

在.cpp文件中声明COMMAND 事件的消息函数映射:ON_COMMAND(ID_BUTTON1,CToolbarNewDlg::Button1Click)

在.cpp中实现Button1Click函数即可。

二、创建真彩色toolbar

1.首先向工程中导入6张位图(格式为bmp),大小为32*32,颜色为32位。ID分别默认为IDB_BITMAP1, IDB_BITMAP2……

2.在Dlg头文件中添加两个变量:

CToolBar m_Toolbar;
                   CImageList m_ImageList;

3.在头文件中添加宏定义:

#define ID_BUTTON1    501
#define ID_BUTTON2    502
#define ID_BUTTON3    503
#define ID_BUTTON4    504
#define ID_BUTTON5    505
#define ID_BUTTON6    506

4.添加初始化代码:

m_ImageList.Create(32,32,ILC_COLOR32|ILC_MASK,1,1);

//图片大小必须一致,参数分别表示图片的像素32*32,32位真彩色。
    CBitmap bmp;
    for(int i=0;i<6;i++)
    {
                 //使用现有位图为bmp赋值

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数组的元素

//相当于完成了一中手动为按钮设置ID的工作。
        m_Toolbar.SetSizes(CSize(40,40),CSize(32,32));

//函数第一个是按钮大小,第二个是图像大小,按钮必须比图像要大,具体是按钮的要比图像的宽大7或者以上,高6
m_Toolbar.GetToolBarCtrl().SetImageList(&m_ImageList);//设置图像
 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

显示效果:

三、为toolbar添加背景位图

1. MFC提供了一个类CReBar,这是一个容器类,可以向这个类中添加工具栏,编辑框,下拉列表等等。在头文件中添加一个CReBar类的变量:CReBar m_Rebar;

2.导入一张位图,作为工具栏背景,ID为ID_TOOLBACK.

3.在上边代码中RepositionBars语句之前添加如下代码:

m_Rebar.Create(this);//创建窗口(控件)
        m_Rebar.AddBar(&m_Toolbar);//将m_Toolbar绑定到CReBar上
        m_Rebar.RedrawWindow();//重画窗口
        REBARBANDINFO info;//设置CReBar的样式
        info.cbSize=sizeof(info);
        info.fMask=RBBIM_BACKGROUND;
        m_Toolbar.ModifyStyle(0,TBSTYLE_TRANSPARENT);

//设置工具栏背景色透明,以便显示CReBar的底色
        info.hbmBack=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_TOOLBACK));

//加载位图
        m_Rebar.GetReBarCtrl().SetBandInfo(0,&info);

4.如果要为button设置文字的话,可以使用CToolBar类的SetButtonText函数,但是此函数必须放在setSize函数之前,否则无法显示文字;而且要设置toolbar的高度足够,以便显示文字。

5.运行效果如下:

6.问题:

我按上述方法进行操作后,CReBar已经创建,但是背景色不知道为何添加不上。如果有谁解决了此问题,望不吝赐教。

四、添加鼠标停留事件

1.首先在头文件中添加一字符串变量:CString str;

2.在m_Toolbar调用CreateEX函数后,添加语句:

m_Toolbar.EnableToolTips();//激活信息提醒功能

3.在头文件中添加TTN_NEEDTEXT消息处理函数:

BOOL  OnDisplay(UINT id, NMHDR *pNMHDR, LRESULT *pResult)

4.在.cpp中添加消息映射宏:

ON_NOTIFY_EX(TTN_NEEDTEXT,0,CToolbarNewDlg::OnDisplay)

5.实现OnDisplay代码:

TOOLTIPTEXT *pTTT=(TOOLTIPTEXT *)pNMHDR;
UINT nID=pNMHDR->idFrom;//获取工具栏按钮ID
UINT nIndex=m_Toolbar.CommandToIndex(nID);//根据按钮ID获取索引
switch(nID)

{

case ID_BUTTON1: str="旅行社";break;

case ID_BUTTON2: str="宾馆";break;

case ID_BUTTON3: str="招聘";break;

default : str="";

}

pTTT->lpszText=str.GetBuffer(str.GetLength());//设置按钮提示信息
pTTT->hinst=AfxGetResourceHandle();
return TRUE;

五、使用ICON构建toolbar

1.与用bmp图像构建toolbar一样,只是向m_ImageList中添加图片的方式有些不同:

for(int i=IDI_ICON1;i<=IDI_ICON6;i++)
                           m_ImageList.Add(AfxGetApp()->LoadIcon(i));//添加图标

六、设置toolbar热点图标

1.准备两套图标,一套为正常显示,一套为鼠标放上去后热点显示的图标。

2.工具栏必须具有TBSTYLE_FLAT(浮动按钮)属性,这在创建时已经默认拥有。

3.在头文件中额外定义ImageList:CmageList m_hotImageList;

4.以下语句添加在与_ImageList创建过程相应的位置即可:

m_hotImageList.Create(48,48,ILC_COLOR24|ILC_MASK,1,1);

m_hotImageList.Add(AfxGetApp()->LoadIcon(IDI_HOT1+i));

m_toolbar.GetToolBarCtrl().SetHotImageList(&m_hotImageList);

5.这样,当鼠标放上去时,就会显示另一种样子。

七、CToolBarCtrl工具栏控制类

1.用法跟CToolBar相似:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

dwStyle:工具栏控件的风格

rect:工具栏位置和区域

pParentWnd:工具栏父窗口句柄(属于哪个窗口)

nID:工具栏控件ID号

AddButtons用于往工具栏添加一组按钮:

BOOL AddButtons( int nNumButtons, LPTBBUTTON lpButtons );

nNumButtons:要添加的按钮数量 也就是函数第二个参数数组大小。

lpButtons:一个TBBUTTON结构数组的地址

TBBUTON结构定义如下:
typedef struct _TBBUTTON
{
         int iBitmap;

// 按钮显示的图片索引,没有图像为NULL,
         int idCommand;

// 与此按钮相关联的命令标识符,fsStyle具有TBSTYLE_SEP属性时,该项必须为0
         BYTE fsState; // 按钮的状态标志
         BYTE fsStyle; //按钮风格
          DWORD dwData; // 用户定义的数据

int iString; // 按钮显示的文本内容索引,无为NULL。
} TBBUTTON;

2.使用CToolBarCtrl添加一个工具条的过程:

CImageList m_ImageList;
       CToolBarCtrl m_TBarCtrl;

TBBUTTON button[4];
 m_ImageList.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);
 m_ImageList.Add(AfxGetApp()->LoadIcon(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;i<4;i++)
 {
       button[i].fsState=TBSTATE_ENABLED;
       button[i].fsStyle=TBSTYLE_BUTTON;
       button[i].iBitmap=i;
 }
 m_TBarCtrl.AddButtons(4,button);
 m_TBarCtrl.AutoSize();
 m_TBarCtrl.SetStyle(TBSTYLE_FLAT|CCS_TOP);

3.为按钮创建响应事件函数

TBBUTON结构里有一个成员idCommand,这个成员跟菜单项的ID值一样,用于标识工具栏按钮项,也就是说idCommand是工具栏项ID号,就是最前面设置工具栏资源时,选择一个按钮,然后按回车,弹出一个对话框,里面有一个ID项,跟这个是一样的。

在上边的for循环中,添加button[i].idCommand=ID_BUTTON1+i;为按钮设置ID

然后添加COMMAND事件函数即可。

Toolbar控件:32位真彩色大图标相关推荐

  1. 32位真彩色与24位真彩色区别

    真彩色是指图像中的每个像素值都分成R.G.B三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为真彩色.真彩色图像是一种用三个或更多字节描述像素的计算机图像存储方式. 真彩色-表示方法 ...

  2. 32位全彩色与24位全彩色有啥区别

    真彩色是指图像中的每个像素值都分成R.G.B三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为真彩色.真彩色图像是一种用三个或更多字节描述像素的计算机图像存储方式.        计算 ...

  3. 32位全彩色和24位全彩色有啥区别

    32位真彩其实是不准确的说法,严格的说,只有24位真彩色,颜色数为2的24次方也就是1677万色左右,由于这已经是人眼能分辨的颜色极限,所以叫做真彩色.32位色是和24位真彩色颜色数相同,只不过增加了 ...

  4. C语言创建24位真彩色位图

    /* 功能: 创建一幅24位真彩色位图 ** 作者: mayadong7349 ** 参考: MSDN(Visual Studio 2005).(百度百科:bmp) http://baike.baid ...

  5. 用PS设置宽480像素*高640像素,分辨率300dpi,24位真彩色 大小限制20K到40K之间的照片

    最近需要设置一组照片,是学生录取大学的电子照片,具体要求如下: 宽480像素*高640像素,分辨率300dpi,24位真彩色 大小限制20K到40K之间:照片底色为白色或者蓝色,其他颜色均不符合条件. ...

  6. [ASP.NET 控件实作 Day14] 继承 CompositeControl 实作 Toolbar 控件

    之前我们简单介绍过继承 CompositeControl  来实作复合控件,在本文我们将以 Toolbar 控件为例,以复合控件的作法(继承 CompositeControl )来实作 Toolbar ...

  7. android toolbar控件,Android Toolbar控件

    1. Toolbar类 Toolbar是替代ActionBar的产物,低版本可以使用v7兼容包,使用Theme.AppCompat主题,并添加配置. false true 2. Toolbar配置 主 ...

  8. ToolBar控件去除默认的左边距

    最近项目中打算使用ToolBar这个控件,用过之后发现有些问题,明明设置居中的控件,但是总是靠右边了一点点,后来在网上找了些资料才发现,原来是ToolBar控件默认有一些左边距,知道原因就好解决了,在 ...

  9. 24位真彩色图片取摸方法(用于WS2812显示)

    24位真彩色图片取摸方法 PS创建文件 填充 保存 取摸 效果 PS创建文件 我的屏幕为16X16的RGB彩灯,故创建16X16像素的图像. 填充 为每个像素格子填充不同的颜色用于显示,颜色越深,RG ...

最新文章

  1. linux的android工作室,Android工作室在启动时抛出错误,linux机器
  2. Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
  3. SpringMVC学习(六)——Spring四种方式整合MyBatis
  4. 一种基于云信sdk的互动直播的实现
  5. 计算机网络知识培训计划,计算机网络管理员教学计划和大纲
  6. file_table.c 文件分析 linux1_0\linux\fs\file_table.c
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨判断三角形【难度简单】
  8. java代码启动spring_从0开始学JAVA之《Spring框架-启动过程》
  9. nginx经过多层代理后获取真实来源ip
  10. plus webview关闭事件监听
  11. Ubuntu 10.4速配指南
  12. SYNOPSYS™光学设计软件---设计自由曲面反射系统
  13. ZigBee中协调器如何向子节点发消息?
  14. 图像预处理——对数变换
  15. 如何使用计算机网络打印机,电脑怎么连接网络打印机 网络打印机连接方法
  16. CloudSim源码分析之DatacenterBroker--processEvent()
  17. Java代码控制UI界面
  18. mock gps android,Mock GPS with joystick
  19. 国内设计师经常逛的5个素材网站
  20. Windows平台搭建Mantis服务器

热门文章

  1. 薛定谔 | 共价对接
  2. Revit二开——Revit族“连接件说明“参数的获取
  3. 求知讲堂Java基础教程 全网唯一高口碑 无废话 无尿点的就在这里
  4. 开源夏令营《基于HackRF开发GPS信号仿真模拟器》工作总结(三)
  5. mysql调优之sql调优
  6. 刷脸庞大的交易市场从而也带来新的商机
  7. 线元法输入曲线要素_机械图纸·每日一符:线轮廓度
  8. python制作连点器_python群聊工具实现(上)
  9. 基于Springboot的论坛管理系统
  10. 输入金额校验(数字非负数保留2位不四舍五入)