创建一个自己的工具栏 CreateToolbarEx

window程序中常使用的一个组件,就是工具栏了,基本上工具栏都是和菜单的选择是对应的。

在win32 api中有一个专门创建工具栏的函数(尽管msdn上说不建议使用)

CreateToolbarEx。

自定义的工具栏,除了使用默认系统提供的图像之外,就是使用自己的图片资源了,不知道是不是win32程序兼容的关系,工具栏的图片资源要是bmp并且是8位256色的,网上有其他很多使用真彩图片的办法。这里使用默认的函数创建,图片就需要是8位256色。

  1. hWndToolBar=CreateToolbarEx(  
  2.     hwnd,   //窗口句柄   
  3.     WS_VISIBLE|WS_CHILD|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS,//样式  
  4.     IDR_TOOL,22,//IDR_TOOL工具栏资源ID,第二个参数是图片资源上的按钮数量  
  5.         hInst,          //模块实例句柄  
  6.     IDR_TOOLBAR1,       //自定义图片的资源ID   
  7.     tbButtons,      //按钮结构数组地址  
  8.     22,         //显示的按钮数量  

  1. 0,0,16,16,      //图片大小   
  2. sizeof(TBBUTTON));      //按钮结构size  

返回的是一个工具栏句柄。

 

如果不是使用自定义图片资源,使用系统预定义位图的话,用模块句柄HINST_COMMCTRL(上面的模块实例句柄)和位图句柄IDB_STD_SMALL _COLOR(位图句柄就是上面的图片资源ID)来指定使用Comctl32.dll中的预定义位图。使用自定义图片资源的时候,图片大小是必须要指定的,如:0,0,16,16.表示16X16的图片。系统图片可以直接写0,0,0,0。

 

TBBUTTON结构

  1. typedef struct _TBBUTTON {   
  2.   int iBitmap;  //按钮在图片资源中的索引,以0开始  
  3.   int idCommand;    //按钮对应命令ID,一般和菜单命令对应  
  4.   BYTE fsState;     //按钮类型  
  5.   BYTE fsStyle;     //按钮样式  
  6.   DWORD dwData;     //自定义数据  
  7.   int iString;  //按钮字符串索引  
  8. } TBBUTTON,  

按钮的类型有:

TBSTATE_CHECKED——按钮的类型是复选框按钮,并且按钮初始化为选中状态(即保持按下状态)。

TBSTATE_ENABLED——按钮被允许,如果不指定这个标志,按钮将显示为灰色,并且不会接收用户的动作。

TBSTATE_HIDDEN——隐藏状态,按钮不显示在工具栏上。

TBSTATE_INDETERMINATE——按钮处于灰化状态,但可以接收用户的动作。

TBSTATE_PRESSED——按钮处于按下状态。

TBSTATE_WRAP——在包含TBSTYLE_WRAPABLE风格的多行工具栏中,从此按钮开始换行。

按钮的样式:

TBSTYLE_BUTTON——标准按钮。

TBSTYLE_CHECK——复选框按钮(按钮状态在按下和凸起之间切换)。

TBSTYLE_GROUP——指定复选框按钮的分组边界。

TBSTYLE_CHECKGROUP——TBSTYLE_CHECK风格和TBSTYLE_GROUP风格的组合。

TBSTYLE_SEP——按钮之间的分隔线。


可以使用一个数组来表示多个按钮。

TBBUTTON tbButtons[]={
        {BNEW, IDM_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON},

        .....

       }


ToolBar的Button上使用ToolTip的方法(SDK)  


(参考自MSDN)

方法一:

概述:

当您在创建Toolbar时指定了TBSTYLE_TOOLTIPS风格,那么您所创建的工具条将自动创建和管理一个ToolTip控件。这个ToolTip控件是一个小型的弹出(POP-UP)窗口,它包含了一行描述Toolbar上的按钮的文字。当鼠标移动到ToolbarButton上并停留一秒钟左右时,ToolTip就会出现在靠近鼠标位置附近,反之,当鼠标离开此按钮时,ToolTip隐藏。

 

ToolBar接收到WM_MOUSEMOVE消息时,它会发送一个WM_NOTIFY 消息给所对应的ToolTip 控件。这时ToolTip设置一个定时器(timer),在大约一秒钟之后,检查鼠标是否还在同一个按钮的同一个位置上,如果是,ToolTip发送一个WM_NOTIFY消息(内含TTN_GETDISPINFO标志)给父窗口,父窗口在处理此消息时,应设置对应按钮的描述文字。然后ToolTip控件创建一个弹出窗口来显示对应按钮的描述文字。当用户单击按钮或鼠标离开按钮时,ToolTip控件会销毁这个弹出窗口。

 

我们可以利用SendMessage函数发送TB_GETTOOLTIPS 消息获取ToolTip控件的句柄(handle)。如果你想替换当前Toolbar中的ToolTip控件,则可以利用SendMessage函数发送TB_SETTOOLTIPS消息给Toolbar.

 

具体实现:

如果应用程序要想在Toolbar不同Button上显示自定义的文字,那么这时就必须在父窗口中对TTN_GETDISPINFO消息作出响应,但是,请不要在Toolbar的内部进行处理,或者截取ToolTip发给Toolbar的WM_NOTIFY消息进行处理。

1.工具条在创建的时候要指定 TBSTYLE_TOOLTIPS风格,以便同时创建相应的ToolTip控件。

  hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL,

        WS_CHILD

        |TBSTYLE_FLAT

        |WS_BORDER |CCS_NOMOVEY |TBSTYLE_TOOLTIPS

        , 0, 0, 0, 0, hwndParent,

        (HMENU)IDR_TOOLBAR1,g_hInst, NULL);

2.当Toolbar上的Button需要显示相应的描述文字时,父窗口接收到WM_NOTIFY(内含TTN_GETDISPINFO标志)消息。这时lparam参数包含一个指向需要显示文字的Button上的NMTTDISPINFO结构的指针。我们可以通过设置该结构中的lpszText成员来设定该Button上的描述文字。

case WM_NOTIFY:

    switch (((LPNMHDR) lParam)->code)

    {

        case TTN_GETDISPINFO:

            {

            LPTOOLTIPTEXT lpttt;

 

            lpttt = (LPTOOLTIPTEXT) lParam;

            lpttt->hinst = g_hinst;

 

            // Specify the resource identifier of the descriptive

            // text for the given button.

            idButton = lpttt->hdr.idFrom;

            switch (idButton)

            {

                case IDM_CUT:

                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TIPS_CUT);

                    break;

                case IDM_COPY:

                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TIPS_COPY);

                    break;

                case IDM_PASTE:

                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TIPS_PASTE);

                    break;

            }

            break;

            }

        .

        . // Process other notifications here.

        .

        default:

            break;

}

 

方法二:

概述:

如果在添加按钮的过程中,我们指定TBBUTTON结构中的成员iString的值,那么Toolbar控件会自动将这个值作为该按钮的ToolTip说明文字。

具体实现:

1.工具条在创建的时候要指定 TBSTYLE_TOOLTIPS风格,以便同时创建相应的ToolTip控件。

  hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL,

        WS_CHILD

        |TBSTYLE_FLAT

        |WS_BORDER |CCS_NOMOVEY |TBSTYLE_TOOLTIPS

        , 0, 0, 0, 0, hwndParent,

        (HMENU)IDR_TOOLBAR1,g_hInst, NULL);

2.设定TBBUTTON中的iString的值。

 

TBBUTTON tbb[8];。。。。。。

。。。。。

Tbb[1].iString = F;

。。。。。。。

3.在添加了Toolbar上的Button的函数之后,发送一个TB_SETMAXTEXTROWS消息

SendMessage(hWndToolbar,

             TB_SETMAXTEXTROWS,

             (WPARAM) 0,

              0);

这时,如果应用程序没有对TBN_GETINFOTIP消息作出响应,那么Toolbar就会使用TBBUTTON结构中的iString的值作为ToolTip上的说明文字。

源代码下载地址:http://download.csdn.net/source/527885


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值