LB Booster
Programming >> BASIC code examples >> Clickable top-level menus
http://lbb.conforums.com/index.cgi?board=code&action=display&num=1424380194

Clickable top-level menus
Post by Richard Russell on Feb 19th, 2015, 8:09pm

Somebody has asked how to create a top-level menu bar that doesn't open drop-down menus (a sort of toolbar substitute). This code works equally well in LB 4.04:

Code:
    struct mii, cbSize as ulong, fMask as ulong, fType as ulong, _
           fState as ulong, wID as ulong, hSubMenu as ulong, _
           hbmpChecked as ulong, hbmpUnchecked as ulong, _ 
           dwItemData as long, dwTypeData as ptr, cch as ulong
    mii.cbSize.struct = len(mii.struct)
    mii.fMask.struct = _MIIM_ID or _MIIM_SUBMENU	

    menu #w, "Menu 1", "Dummy 1", [menu1]
    menu #w, "Menu 2", "Dummy 2", [menu2]
    menu #w, "Menu 3", "Dummy 3", [menu3]
    menu #w, "Menu 4", "Dummy 4", [menu4]

    open "Top-level menu demo" for window as #w
    #w "trapclose [quit]"

    hw = hwnd(#w)
    calldll #user32, "GetMenu", hw as ulong, hMenuBar as ulong
    for m = 0 to 3
      calldll #user32, "GetSubMenu", hMenuBar as ulong, _
        m as ulong, hSubMenu as ulong
      calldll #user32, "GetMenuItemID", hSubMenu as ulong, _
        0 as long, menuID as ulong
      calldll #user32, "RemoveMenu", hSubMenu as ulong,_
        menuID as ulong, 0 as long, result as long
      mii.wID.struct = menuID
      calldll #user32, "SetMenuItemInfoA", hMenuBar as ulong, _
        m as long, 1 as long, mii as struct, result as long
    next m
    wait

[menu1]
    print "Menu 1 clicked"
    wait

[menu2]
    print "Menu 2 clicked"
    wait

[menu3]
    print "Menu 3 clicked"
    wait

[menu4]
    print "Menu 4 clicked"
    wait

[quit]
    close #w
    end 

Richard.
Re: Clickable top-level menus
Post by SarmedNafi on Feb 20th, 2015, 01:48am

What a smartness.
What a cleverness.

I never imagine that such marvels text tool bar could be achieved by Liberty Basic or LBB.

It is done by Richard R.

But Richard,
Have you noticed the code could be simpler on BBC or even shorter.
However thanks a lot for this example, it will not pull my eyes from BBC.

Regards,
Sarmed
Re: Clickable top-level menus
Post by Richard Russell on Feb 20th, 2015, 08:35am

on Feb 20th, 2015, 01:48am, SarmedNafi wrote:
Have you noticed the code could be simpler on BBC or even shorter.

Languages differ in their strengths and weaknesses. Sometimes Liberty BASIC code may be longer or more complex than the equivalent in another language, but often it will be shorter and simpler.

So long as the code works, it isn't important how complex it is. If you prefer to keep it 'out of sight' put it in a separate file and 'include it.

Richard.