by Richard Russell, August 2012

As a rule, a tooltip is displayed when the mouse moves into the tool's rectangle and stays there for a specified minimum period of time; typically this is when the user 'hovers' the mouse over a control or other region of interest. However it is also possible to force a tooltip to display 'on demand', under the control of your program.

The code listing below demonstrates how to do that:
    nomainwin
 
    TTM.ADDTOOL = 1028
    TTM.UPDATETIPTEXT = 1036
    TTM.TRACKACTIVATE = 1041
    TTS.ALWAYSTIP = 1
    TTS.NOPREFIX = 2
    TTS.BALLOON = 64
 
    button #w.b1, "Click me", [activate], UL, 120, 120
    open "Tooltip on demand" for window as #w
    #w "trapclose [quit]"
    hw = hwnd(#w)
 
    style = _WS_POPUP or TTS.NOPREFIX or TTS.ALWAYSTIP or TTS.BALLOON
    calldll #user32, "CreateWindowExA", _WS_EX_TOPMOST as long, _
        "tooltips_class32" as ptr, 0 as long, style as long, _
        _CW_USEDEFAULT as long, _CW_USEDEFAULT as long, _
        _CW_USEDEFAULT as long, _CW_USEDEFAULT as long, _
        hw as ulong, 0 as long, 0 as long, 0 as long, _
        hwndTT as long
 
    struct ti, cbSize as ulong, uFlags as ulong, _
        hwnd as ulong, uID as ulong, rectl as long, _
        rectt as long, rectr as long, rectb as long, _
        hinst as ulong, lpszText as ptr
 
    ti.cbSize.struct = LEN(ti.struct)
    ti.hwnd.struct = hw
    ti.lpszText.struct = ""
 
    calldll #user32, "SendMessageA", hwndTT as ulong, _
        TTM.ADDTOOL as long, 0 as long, ti as struct, _
        retval as long
    wait
 
[activate]
    ti.lpszText.struct = "Hello tooltip!"
    calldll #user32, "SendMessageA", hwndTT as ulong, _
        TTM.UPDATETIPTEXT as long, 0 as long, ti as struct, _
        retval as long
    calldll #user32, "SendMessageA", hwndTT as ulong, _
        TTM.TRACKACTIVATE as long, 1 as long, ti as struct, _
        retval as long
    timer 2000, [deactivate]
    wait
 
[deactivate]
    timer 0
    ti.lpszText.struct = ""
    calldll #user32, "SendMessageA", hwndTT as ulong, _
        TTM.UPDATETIPTEXT as long, 0 as long, ti as struct, _
        retval as long
    wait
 
[quit]
    close #w
    end
As shown, clicking the button will cause a balloon tooltip (available in Windows XP or later) to be displayed at the mouse position, and to remain displayed for two seconds. If the TTS_BALLOON style is omitted a regular tooltip will be displayed.