User Tools

Site Tools


adding_20tooltips_20to_20the_20status_20bar

Adding tooltips to the status bar

by Richard Russell, January 2007

If your program uses the WINLIB library to create a toolbar then you can easily add tooltips to the toolbar buttons using the PROC_addtooltips function provided. However if you use the same library to create a status bar no built-in method for adding tooltips to it is provided.

Nevertheless it is actually quite easy to add tooltips to a status bar. You should first create the status bar in the usual way, using the FN_createstatusbar function, and divide it up into the wanted number of parts. Next you need a handle to a tooltip control; there are two ways of achieving that, depending on whether or not your program also uses a toolbar.

If you have created a toolbar with tooltips then you can obtain a handle to its tooltip control as follows:

        TB_GETTOOLTIPS = 1059
        SYS "SendMessage", htoolbar%, TB_GETTOOLTIPS, 0, 0 TO htooltip%

Here htoolbar% is the handle of the toolbar, as returned from FN_createtoolbar.

If your program doesn't use a toolbar, you must install the WINLIB5 (or WINLIB5A) library:

        INSTALL @lib$+"WINLIB5"

The tooltip control can now be created as follows:

        TTS_ALWAYSTIP = 1
        TTS_NOPREFIX = 2
        WS_CHILD = &40000000
        WS_VISIBLE = &10000000
 
        htooltip% = FN_createwindow("tooltips_class32", "", 0, 0, 0, 0, 0, \
        \           WS_CHILD+WS_VISIBLE+TTS_ALWAYSTIP+TTS_NOPREFIX, 0)

If instead your program uses the WINLIB5A library then the code must be adapted as follows:

        TTS_ALWAYSTIP = 1
        TTS_NOPREFIX = 2
        WS_CHILD = &40000000
        WS_VISIBLE = &10000000
 
        htooltip% = FN_createwindow(@hwnd%, "tooltips_class32", "", 0, 0, 0, 0, 0, \
        \           WS_CHILD+WS_VISIBLE+TTS_ALWAYSTIP+TTS_NOPREFIX, 0)

It is advisable to create only one tooltip control for your entire program.

Next define a TOOLINFO data structure and initialise a couple of its members:

        DIM ti{cbSize%, uFlags%, hwnd%, uId%, rect{l%,t%,r%,b%}, hinst%, lpszText%}
        TTM_ADDTOOL = 1028
        SB_GETRECT = 1034
        TTF_SUBCLASS = &10
        ti.cbSize% = DIM(ti{})
        ti.uFlags% = TTF_SUBCLASS
        ti.hwnd% = hstatusbar%

Here hstatusbar% is the handle of the status bar, as returned from FN_createstatusbar.

Now we have everything we need to create the tooltips themselves. For each part of the status bar create a tooltip for it as follows:

        tip$ = "Tool tip"+CHR$0
        ti.lpszText% = !^tip$
        SYS "SendMessage", hstatusbar%, SB_GETRECT, part%, ^ti.rect.l%
        SYS "SendMessage", htooltip%, TTM_ADDTOOL, 0, ti{}

Here part% is the status bar part number, starting from 0 for the first (leftmost) part.

Note particularly the important CHR$0 concatenated to the end of the tooltip string (here “Tool tip”).

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
adding_20tooltips_20to_20the_20status_20bar.txt · Last modified: 2024/01/05 00:22 by 127.0.0.1