1、ToolBar技术,哈尔滨工程大学,概述,当您在创建Toolbar时指定了TBSTYLE_TOOLTIPS 风格,那么您所创建的工具条将自动创建和管理一个ToolTip控件。这个ToolTip控件是一个小型的弹出(POP-UP)窗口,它包含了一行描述Toolbar上的按钮的文字。当鼠标移动到Toolbar的Button上并停留一秒钟左右时,ToolTip就会出现在靠近鼠标位置附近,反之,当鼠标离开此按钮时,ToolTip隐藏。,概述,当ToolBar接收到WM_MOUSEMOVE 消息时,它会发送一个WM_NOTIFY 消息给所对应的ToolTip 控件。这时ToolTip设置一个定时器(ti
2、mer),在大约一秒钟之后,检查鼠标是否还在同一个按钮的同一个位置上,如果是,ToolTip发送一个WM_NOTIFY消息(内含TTN_GETDISPINFO标志)给父窗口,父窗口在处理此消息时,应设置对应按钮的描述文字。然后ToolTip控件创建一个弹出窗口来显示对应按钮的描述文字。当用户单击按钮或鼠标离开按钮时,ToolTip控件会销毁这个弹出窗口。,概述,我们可以利用SendMessage函数发送TB_GETTOOLTIPS 消息获取ToolTip控件的句柄(handle)。如果你想替换当前Toolbar中的ToolTip控件,则可以利用SendMessage函数发送TB_SETTOOL
3、TIPS消息给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
4、 |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)-c
5、ode) 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);
6、break; 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,
7、 0, 0, hwndParent, (HMENU)IDR_TOOLBAR1,g_hInst, NULL);,具体实现,2设定TBBUTTON中的iString的值。 TBBUTTON tbb8;。 。 Tbb1.iString = “F”; 。 3在添加了Toolbar上的Button的函数之后,发送一个TB_SETMAXTEXTROWS消息 SendMessage(hWndToolbar, TB_SETMAXTEXTROWS, (WPARAM) 0, 0); 这时,如果应用程序没有对TBN_GETINFOTIP消息作出响应,那么Toolbar就会使用TBBUTTON结构中的iString的
8、值作为ToolTip上的说明文字。,例子,void CreateToolBar(PAPPINFO pinfo) TBBUTTON buttons4; / 创建工具栏 pinfo-hToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_BORDER | WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT, 0, 0, 0, 0, pinfo-hDlgMain, (HMENU)IDC_TOOLBAR, pinfo-hInstance, NULL); / 设置结构体大小 SendMessage(pinfo-hToolbar
9、, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); / 创建三个图像列表(24位真彩色) pinfo-himl1 = ImageList_Create(32, 32, ILC_COLOR24 | ILC_MASK, 4, 4); pinfo-himl2 = ImageList_Create(32, 32, ILC_COLOR24 | ILC_MASK, 4, 4); pinfo-himl3 = ImageList_Create(32, 32, ILC_COLOR24 | ILC_MASK, 4, 4);,例子,/ 向三个图像列表添加图像 I
10、mageList_AddMasked(pinfo-himl1, LoadBitmap(pinfo-hInstance, MAKEINTRESOURCE(IDB_BMP_STOP1), RGB(255, 0, 255); ImageList_AddMasked(pinfo-himl1, LoadBitmap(pinfo-hInstance, MAKEINTRESOURCE(IDB_BMP_RUN1), RGB(255, 0, 255); ImageList_AddMasked(pinfo-himl1, LoadBitmap(pinfo-hInstance, MAKEINTRESOURCE(IDB
11、_BMP_FRESH1), RGB(255, 0, 255);,例子,/ 设置图像列表 SendMessage(pinfo-hToolbar, TB_SETHOTIMAGELIST, 0, (LPARAM)pinfo-himl1); SendMessage(pinfo-hToolbar, TB_SETIMAGELIST, 0, (LPARAM)pinfo-himl2); SendMessage(pinfo-hToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)pinfo-himl3); / 设置按钮 buttons0.dwData = 0; buttons
12、0.fsState = TBSTATE_ENABLED; buttons0.fsStyle = TBSTYLE_BUTTON; buttons0.iBitmap = 1; buttons0.idCommand = 10000; buttons0.iString = 0;,例子,buttons1.dwData = 0; buttons1.fsState = TBSTATE_ENABLED; buttons1.fsStyle = TBSTYLE_BUTTON; buttons1.iBitmap = 0; buttons1.idCommand = 10001; buttons1.iString = 0; / 设置位图大小(32*32) SendMessage(pinfo-hToolbar, TB_SETBITMAPSIZE, 0, (LPARAM)MAKELONG(32, 32); / 添加按钮 SendMessage(pinfo-hToolbar, TB_ADDBUTTONS, (WPARAM)4, (LPARAM)buttons); / 自动重设大小 SendMessage(pinfo-hToolbar, TB_AUTOSIZE, 0, 0);,总结,