Não sei se interessa pra alguém.
Acabei indo parar nessa página hoje.
Além do manual do Harbour, tem essa LIB, com fontes no github.
Parece ser modo texto, sem LIB gráfica.
http://harbour.edu.pl/hbtui/en/menu.html

Moderador: Moderadores
se todas as LIB reunidas em força tarefa em um projeto só, teria uma ótima LIB gráfica no Harbour.
/*
* $Id: menu.prg 2497 2015-11-18 15:05:34Z alkresin $
*
* HWGUI - Harbour Linux (GTK) GUI library source code:
* Prg level menu functions
*
* Copyright 2004 Alexander S.Kresin <alex@kresin.ru>
* www - http://www.kresin.ru
*/
#include "hbclass.ch"
#include "hwgui.ch"
#define MENU_FIRST_ID 32000
#define CONTEXTMENU_FIRST_ID 32900
#define FLAG_DISABLED 1
#define FLAG_CHECK 2
STATIC _aMenuDef, _oWnd, _aAccel, _nLevel, _Id, _oMenu, _oBitmap, _lContext, hLast
/*
STATIC aKeysTable := { { VK_F1,GDK_F1 }, { VK_F2,GDK_F2 }, { VK_F3,GDK_F3 }, ;
{ VK_F4, GDK_F4 }, { VK_F5, GDK_F5 }, { VK_F6, GDK_F6 }, { VK_F7, GDK_F7 }, ;
{ VK_F8, GDK_F8 }, { VK_F9, GDK_F9 }, { VK_F10, GDK_F10 }, { VK_F11, GDK_F11 }, ;
{ VK_F12, GDK_F12 }, { VK_HOME, GDK_Home }, { VK_LEFT, GDK_Left }, { VK_END, GDK_End }, ;
{ VK_RIGHT, GDK_Right }, { VK_DOWN, GDK_Down }, { VK_UP, GDK_Up } }
*/
CLASS HMenu INHERIT HObject
DATA handle
DATA aMenu
METHOD New() INLINE Self
METHOD End() INLINE Hwg_DestroyMenu( ::handle )
METHOD Show( oWnd, xPos, yPos, lWnd )
ENDCLASS
METHOD Show( oWnd ) CLASS HMenu
IF oWnd == Nil
oWnd := HWindow():GetMain()
ENDIF
oWnd:oPopup := Self
Hwg_trackmenu( ::handle )
RETURN Nil
FUNCTION Hwg_CreateMenu
LOCAL hMenu
IF ( Empty( hMenu := hwg__CreateMenu() ) )
RETURN Nil
ENDIF
RETURN { {}, , , hMenu }
FUNCTION Hwg_SetMenu( oWnd, aMenu )
IF !Empty( oWnd:handle )
IF hwg__SetMenu( oWnd:handle, aMenu[5] )
oWnd:menu := aMenu
ELSE
RETURN .F.
ENDIF
ELSE
oWnd:menu := aMenu
ENDIF
RETURN .T.
/*
* AddMenuItem( aMenu,cItem,nMenuId,lSubMenu,[bItem] [,nPos] ) --> aMenuItem
*
* If nPos is omitted, the function adds menu item to the end of menu,
* else it inserts menu item in nPos position.
*/
FUNCTION Hwg_AddMenuItem( aMenu, cItem, nMenuId, lSubMenu, bItem, nPos )
LOCAL hSubMenu
IF nPos == Nil
nPos := Len( aMenu[1] ) + 1
ENDIF
hSubMenu := hLast := aMenu[5]
hSubMenu := hwg__AddMenuItem( hSubMenu, cItem, nPos - 1, hwg_Getactivewindow(), nMenuId, , lSubMenu )
IF nPos > Len( aMenu[1] )
IF lSubmenu
AAdd( aMenu[1], { {}, cItem, nMenuId, 0, hSubMenu } )
ELSE
AAdd( aMenu[1], { bItem, cItem, nMenuId, 0, hSubMenu } )
ENDIF
RETURN ATail( aMenu[1] )
ELSE
AAdd( aMenu[1], Nil )
AIns( aMenu[1], nPos )
IF lSubmenu
aMenu[ 1,nPos ] := { {}, cItem, nMenuId, 0, hSubMenu }
ELSE
aMenu[ 1,nPos ] := { bItem, cItem, nMenuId, 0, hSubMenu }
ENDIF
RETURN aMenu[ 1,nPos ]
ENDIF
RETURN Nil
FUNCTION Hwg_FindMenuItem( aMenu, nId, nPos )
LOCAL nPos1, aSubMenu
nPos := 1
DO WHILE nPos <= Len( aMenu[1] )
IF aMenu[ 1,npos,3 ] == nId
RETURN aMenu
ELSEIF ValType( aMenu[ 1,npos,1 ] ) == "A"
IF ( aSubMenu := Hwg_FindMenuItem( aMenu[ 1,nPos ] , nId, @nPos1 ) ) != Nil
nPos := nPos1
RETURN aSubMenu
ENDIF
ENDIF
nPos ++
ENDDO
RETURN Nil
FUNCTION Hwg_GetSubMenuHandle( aMenu, nId )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
RETURN iif( aSubMenu == Nil, 0, aSubMenu[5] )
FUNCTION hwg_BuildMenu( aMenuInit, hWnd, oWnd, nPosParent, lPopup )
LOCAL hMenu, nPos, aMenu, i, oBmp
IF nPosParent == Nil
IF lPopup == Nil .OR. !lPopup
hMenu := hwg__CreateMenu()
ELSE
hMenu := hwg__CreatePopupMenu()
ENDIF
aMenu := { aMenuInit, , , , hMenu }
ELSE
hMenu := aMenuInit[5]
nPos := Len( aMenuInit[1] )
aMenu := aMenuInit[ 1,nPosParent ]
hMenu := hwg__AddMenuItem( hMenu, aMenu[2], nPos + 1, hWnd, aMenu[3], aMenu[4], .T. )
IF Len( aMenu ) < 5
AAdd( aMenu, hMenu )
ELSE
aMenu[5] := hMenu
ENDIF
ENDIF
nPos := 1
DO WHILE nPos <= Len( aMenu[1] )
IF ValType( aMenu[ 1,nPos,1 ] ) == "A"
hwg_BuildMenu( aMenu, hWnd, , nPos )
ELSE
IF aMenu[ 1,nPos,1 ] == Nil .OR. aMenu[ 1,nPos,2 ] != Nil
IF Len( aMenu[1,npos] ) == 4
AAdd( aMenu[1,npos], Nil )
ENDIF
aMenu[1,npos,5] := hwg__AddMenuItem( hMenu, aMenu[1,npos,2], ;
nPos, hWnd, aMenu[1,nPos,3], aMenu[1,npos,4], .F. )
ENDIF
ENDIF
nPos ++
ENDDO
IF !_lContext .AND. hWnd != Nil .AND. oWnd != Nil
Hwg_SetMenu( oWnd, aMenu )
ELSEIF _oMenu != Nil
_oMenu:handle := aMenu[5]
_oMenu:aMenu := aMenu
ENDIF
RETURN Nil
FUNCTION Hwg_BeginMenu( oWnd, nId, cTitle )
LOCAL aMenu, i
IF oWnd != Nil
_lContext := .F.
_aMenuDef := {}
_aAccel := {}
_oBitmap := {}
_oWnd := oWnd
_oMenu := Nil
_nLevel := 0
_Id := iif( nId == Nil, MENU_FIRST_ID, nId )
ELSE
nId := iif( nId == Nil, ++ _Id, nId )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := Atail( aMenu )[1]
NEXT
_nLevel ++
IF !Empty( cTitle )
cTitle := StrTran( cTitle, "\t", "" )
cTitle := StrTran( cTitle, "&", "_" )
ENDIF
AAdd( aMenu, { {}, cTitle, nId, 0 } )
ENDIF
RETURN .T.
FUNCTION Hwg_ContextMenu()
_lContext := .T.
_aMenuDef := {}
_oBitmap := {}
_oWnd := Nil //HWindow():GetMain()
_nLevel := 0
_Id := CONTEXTMENU_FIRST_ID
_oMenu := HMenu():New()
RETURN _oMenu
FUNCTION Hwg_EndMenu()
IF _nLevel > 0
_nLevel --
ELSE
hwg_BuildMenu( AClone( _aMenuDef ), iif( _oWnd != Nil,_oWnd:handle,HWindow():Getmain():handle ), ;
_oWnd, , _lContext )
IF _oWnd != Nil .AND. !Empty( _aAccel )
_oWnd:hAccel := hwg_Createacceleratortable( _oWnd )
ENDIF
_aMenuDef := Nil
_oBitmap := Nil
_aAccel := Nil
_oWnd := Nil
_oMenu := Nil
ENDIF
RETURN .T.
FUNCTION Hwg_DefineMenuItem( cItem, nId, bItem, lDisabled, accFlag, accKey, lBitmap, lResource, lCheck )
LOCAL aMenu, i, oBmp, nFlag
lCheck := iif( lCheck == Nil, .F. , lCheck )
lDisabled := iif( lDisabled == Nil, .T. , !lDisabled )
nFlag := Hwg_BitOr( iif( lCheck,FLAG_CHECK,0 ), iif( lDisabled,0,FLAG_DISABLED ) )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := Atail( aMenu )[1]
NEXT
nId := iif( nId == Nil .AND. cItem != Nil, ++ _Id, nId )
IF !Empty( cItem )
cItem := StrTran( cItem, "\t", "" )
cItem := StrTran( cItem, "&", "_" )
ENDIF
AAdd( aMenu, { bItem, cItem, nId, nFlag, 0 } )
IF accFlag != Nil .AND. accKey != Nil
AAdd( _aAccel, { accFlag, accKey, nId } )
ENDIF
/*
IF lBitmap!=Nil .or. !Empty(lBitmap)
if lResource==Nil ;lResource:=.F.; Endif
if !lResource
oBmp:=HBitmap():AddFile(lBitmap)
else
oBmp:=HBitmap():AddResource(lBitmap)
endif
Aadd( _oBitmap, {.t., oBmp:Handle,cItem,nId} )
Else
Aadd( _oBitmap, {.F., "",cItem, nID})
Endif
*/
RETURN .T.
FUNCTION Hwg_DefineAccelItem( nId, bItem, accFlag, accKey )
LOCAL aMenu, i
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := Atail( aMenu )[1]
NEXT
nId := iif( nId == Nil, ++ _Id, nId )
AAdd( aMenu, { bItem, Nil, nId, .T., 0 } )
AAdd( _aAccel, { accFlag, accKey, nId } )
RETURN .T.
STATIC FUNCTION hwg_Createacceleratortable( oWnd )
LOCAL hTable := hwg__Createacceleratortable( oWnd:handle )
LOCAL i, nPos, aSubMenu, nKey, n
FOR i := 1 TO Len( _aAccel )
IF ( aSubMenu := Hwg_FindMenuItem( oWnd:menu, _aAccel[i,3], @nPos ) ) != Nil
IF ( nKey := _aAccel[i,2] ) >= 65 .AND. nKey <= 90
nKey += 32
ELSE
nKey := hwg_gtk_convertkey( nKey )
ENDIF
hwg__AddAccelerator( hTable, aSubmenu[1,nPos,5], _aAccel[i,1], nKey )
ENDIF
NEXT
RETURN hTable
STATIC FUNCTION GetMenuByHandle( hWnd )
LOCAL i, aMenu, oDlg
IF hWnd == Nil
aMenu := HWindow():GetMain():menu
ELSE
IF ( oDlg := HDialog():FindDialog( hWnd ) ) != Nil
aMenu := oDlg:menu
ELSEIF ( i := Ascan( HDialog():aModalDialogs,{ |o|Valtype(o:handle)==Valtype(hwnd) .AND. o:handle == hWnd } ) ) != 0
aMenu := HDialog():aModalDialogs[i]:menu
ELSEIF ( i := Ascan( HWindow():aWindows,{ |o|Valtype(o:handle)==Valtype(hwnd) .AND. o:handle==hWnd } ) ) != 0
aMenu := HWindow():aWindows[i]:menu
ENDIF
ENDIF
RETURN aMenu
FUNCTION hwg_CheckMenuItem( hWnd, nId, lValue )
LOCAL aMenu, aSubMenu, nPos
aMenu := GetMenuByHandle( hWnd )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__CheckMenuItem( aSubmenu[1,nPos,5], lValue )
ENDIF
ENDIF
RETURN Nil
FUNCTION hwg_IsCheckedMenuItem( hWnd, nId )
LOCAL aMenu, aSubMenu, nPos, lRes := .F.
aMenu := GetMenuByHandle( hWnd )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
lRes := hwg__IsCheckedMenuItem( aSubmenu[1,nPos,5] )
ENDIF
ENDIF
RETURN lRes
FUNCTION hwg_EnableMenuItem( hWnd, nId, lValue )
LOCAL aMenu, aSubMenu, nPos
IF Valtype( hWnd ) == "O" .AND. __ObjHasMsg( hWnd, "AMENU" )
aMenu := hWnd:aMenu
ELSE
aMenu := GetMenuByHandle( iif( hWnd == Nil,HWindow():GetMain():handle,hWnd ) )
ENDIF
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__EnableMenuItem( aSubmenu[1,nPos,5], lValue )
ENDIF
ENDIF
RETURN Nil
FUNCTION hwg_IsEnabledMenuItem( hWnd, nId )
LOCAL aMenu, aSubMenu, nPos
aMenu := GetMenuByHandle( iif( hWnd == Nil,HWindow():GetMain():handle,hWnd ) )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__IsEnabledMenuItem( aSubmenu[1,nPos,5] )
ENDIF
ENDIF
RETURN Nil
/*
* hwg_SetMenuCaption( hMenu, nMenuId, cCaption )
*/
FUNCTION hwg_SetMenuCaption( hWnd, nId, cText )
LOCAL aMenu, aSubMenu, nPos
aMenu := GetMenuByHandle( hWnd )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__SetMenuCaption( aSubmenu[1,nPos,5], cText )
ENDIF
ENDIF
RETURN Nil
FUNCTION hwg_DeleteMenuItem( oWnd, nId )
LOCAL aSubMenu, nPos
IF ( aSubMenu := Hwg_FindMenuItem( oWnd:menu, nId, @nPos ) ) != Nil
hwg__DeleteMenu( aSubmenu[1,nPos,5], nId )
ADel( aSubMenu[ 1 ], nPos )
ASize( aSubMenu[ 1 ], Len( aSubMenu[ 1 ] ) - 1 )
ENDIF
RETURN Nil
FUNCTION hwg_gtk_convertkey( nKey )
LOCAL n
IF nKey >= 65 .AND. nKey <= 90
nKey += 32
/*
ELSEIF ( n := Ascan( aKeysTable, { |a|a[1] == nKey } ) ) > 0
nKey := aKeysTable[n,2]
ELSE
nKey += 0xFF00
*/
ENDIF
RETURN nKey
/*
* $Id: menu.prg 2086 2013-06-23 12:57:56Z alkresin $
*
* HWGUI - Harbour Win32 GUI library source code:
* Prg level menu functions
*
* Copyright 2001 Alexander S.Kresin <alex@kresin.ru>
* www - http://www.kresin.ru
*/
#include "windows.ch"
#include "hbclass.ch"
#include "guilib.ch"
#define MENU_FIRST_ID 32000
#define CONTEXTMENU_FIRST_ID 32900
#define FLAG_DISABLED 1
#define FLAG_CHECK 2
STATIC _aMenuDef, _oWnd, _aAccel, _nLevel, _Id, _oMenu, _oBitmap
CLASS HMenu INHERIT HObject
DATA handle
DATA aMenu
METHOD New() INLINE Self
METHOD END() INLINE Hwg_DestroyMenu( ::handle )
METHOD Show( oWnd, xPos, yPos, lWnd )
ENDCLASS
METHOD Show( oWnd, xPos, yPos, lWnd ) CLASS HMenu
LOCAL aCoor
oWnd:oPopup := Self
IF PCount() == 1 .OR. lWnd == Nil .OR. ! lWnd
IF PCount() == 1
aCoor := hwg_GetCursorPos()
xPos := aCoor[ 1 ]
yPos := aCoor[ 2 ]
ENDIF
Hwg_trackmenu( ::handle, xPos, yPos, oWnd:handle )
ELSE
aCoor := hwg_Clienttoscreen( oWnd:handle, xPos, yPos )
Hwg_trackmenu( ::handle, aCoor[ 1 ], aCoor[ 2 ], oWnd:handle )
ENDIF
RETURN Nil
FUNCTION Hwg_CreateMenu
LOCAL hMenu
IF Empty( hMenu := hwg__CreateMenu() )
RETURN Nil
ENDIF
RETURN { { },,, hMenu }
FUNCTION Hwg_SetMenu( oWnd, aMenu )
IF ! Empty( oWnd:handle )
IF hwg__SetMenu( oWnd:handle, aMenu[ 5 ] )
oWnd:menu := aMenu
ELSE
RETURN .F.
ENDIF
ELSE
oWnd:menu := aMenu
ENDIF
RETURN .T.
/*
* AddMenuItem( aMenu,cItem,nMenuId,lSubMenu,[bItem] [,nPos] ) --> aMenuItem
*
* If nPos is omitted, the function adds menu item to the end of menu,
* else it inserts menu item in nPos position.
*/
FUNCTION Hwg_AddMenuItem( aMenu, cItem, nMenuId, lSubMenu, bItem, nPos )
LOCAL hSubMenu
IF nPos == Nil
nPos := Len( aMenu[ 1 ] ) + 1
ENDIF
hSubMenu := aMenu[ 5 ]
hSubMenu := hwg__AddMenuItem( hSubMenu, cItem, nPos - 1, .T., nMenuId,, lSubMenu )
IF nPos > Len( aMenu[ 1 ] )
IF lSubMenu
AAdd( aMenu[ 1 ], { { }, cItem, nMenuId, 0, hSubMenu } )
ELSE
AAdd( aMenu[ 1 ], { bItem, cItem, nMenuId, 0 } )
ENDIF
RETURN ATail( aMenu[ 1 ] )
ELSE
AAdd( aMenu[ 1 ], Nil )
AIns( aMenu[ 1 ], nPos )
IF lSubMenu
aMenu[ 1, nPos ] := { { }, cItem, nMenuId, 0, hSubMenu }
ELSE
aMenu[ 1, nPos ] := { bItem, cItem, nMenuId, 0 }
ENDIF
RETURN aMenu[ 1, nPos ]
ENDIF
RETURN Nil
FUNCTION Hwg_FindMenuItem( aMenu, nId, nPos )
LOCAL nPos1, aSubMenu
nPos := 1
DO WHILE nPos <= Len( aMenu[ 1 ] )
IF aMenu[ 1, nPos, 3 ] == nId
RETURN aMenu
ELSEIF Len( aMenu[ 1, nPos ] ) > 4
IF ( aSubMenu := Hwg_FindMenuItem( aMenu[ 1, nPos ] , nId, @nPos1 ) ) != Nil
nPos := nPos1
RETURN aSubMenu
ENDIF
ENDIF
nPos ++
ENDDO
RETURN Nil
FUNCTION Hwg_GetSubMenuHandle( aMenu, nId )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
RETURN IIf( aSubMenu == Nil, 0, aSubMenu[ 5 ] )
FUNCTION hwg_BuildMenu( aMenuInit, hWnd, oWnd, nPosParent, lPopup )
LOCAL hMenu, nPos, aMenu, oBmp
IF nPosParent == Nil
IF lPopup == Nil .OR. ! lPopup
hMenu := hwg__CreateMenu()
ELSE
hMenu := hwg__CreatePopupMenu()
ENDIF
aMenu := { aMenuInit,,,, hMenu }
ELSE
hMenu := aMenuInit[ 5 ]
nPos := Len( aMenuInit[ 1 ] )
aMenu := aMenuInit[ 1, nPosParent ]
/* This code just for sure menu runtime hfrmtmpl.prg is enable */
IIf( ValType( aMenu[ 4 ] ) == "L", aMenu[ 4 ] := .f., )
hMenu := hwg__AddMenuItem( hMenu, aMenu[ 2 ], nPos + 1, .T., aMenu[ 3 ], aMenu[ 4 ], .T. )
IF Len( aMenu ) < 5
AAdd( aMenu, hMenu )
ELSE
aMenu[ 5 ] := hMenu
ENDIF
ENDIF
nPos := 1
DO WHILE nPos <= Len( aMenu[ 1 ] )
IF ValType( aMenu[ 1, nPos, 1 ] ) == "A"
hwg_BuildMenu( aMenu,,, nPos )
ELSE
IF aMenu[ 1, nPos, 1 ] == Nil .OR. aMenu[ 1, nPos, 2 ] != Nil
/* This code just for sure menu runtime hfrmtmpl.prg is enable */
IIf( ValType( aMenu[ 1, nPos, 4 ] ) == "L", aMenu[ 1, nPos, 4 ] := .f., )
hwg__AddMenuItem( hMenu, aMenu[ 1, nPos, 2 ], nPos, .T., ;
aMenu[ 1, nPos, 3 ], aMenu[ 1, nPos, 4 ], .F. )
oBmp := Hwg_SearchPosBitmap( aMenu[ 1, nPos, 3 ] )
IF oBmp[ 1 ]
hwg__Setmenuitembitmaps( hMenu, aMenu[ 1, nPos, 3 ], oBmp[ 2 ], "" )
ENDIF
ENDIF
ENDIF
nPos ++
ENDDO
IF hWnd != Nil .AND. oWnd != Nil
Hwg_SetMenu( oWnd, aMenu )
ELSEIF _oMenu != Nil
_oMenu:handle := aMenu[ 5 ]
_oMenu:aMenu := aMenu
ENDIF
RETURN Nil
FUNCTION Hwg_BeginMenu( oWnd, nId, cTitle )
LOCAL aMenu, i
IF oWnd != Nil
_aMenuDef := { }
_aAccel := { }
_oBitmap := { }
_oWnd := oWnd
_oMenu := Nil
_nLevel := 0
_Id := IIf( nId == Nil, MENU_FIRST_ID, nId )
ELSE
nId := IIf( nId == Nil, ++ _Id, nId )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := ATail( aMenu )[ 1 ]
NEXT
_nLevel ++
AAdd( aMenu, { { }, cTitle, nId, 0 } )
ENDIF
RETURN .T.
FUNCTION Hwg_ContextMenu()
_aMenuDef := { }
_oBitmap := { }
_oWnd := Nil
_nLevel := 0
_Id := CONTEXTMENU_FIRST_ID
_oMenu := HMenu():New()
RETURN _oMenu
FUNCTION Hwg_EndMenu()
IF _nLevel > 0
_nLevel --
ELSE
hwg_BuildMenu( AClone( _aMenuDef ), IIf( _oWnd != Nil, _oWnd:handle, Nil ), ;
_oWnd,, IIf( _oWnd != Nil, .F., .T. ) )
IF _oWnd != Nil .AND. _aAccel != Nil .AND. ! Empty( _aAccel )
_oWnd:hAccel := hwg_Createacceleratortable( _aAccel )
ENDIF
_aMenuDef := Nil
_oBitmap := Nil
_aAccel := Nil
_oWnd := Nil
_oMenu := Nil
ENDIF
RETURN .T.
FUNCTION Hwg_DefineMenuItem( cItem, nId, bItem, lDisabled, accFlag, accKey, lBitmap, lResource, lCheck )
LOCAL aMenu, i, oBmp, nFlag
lCheck := IIf( lCheck == Nil, .F., lCheck )
lDisabled := IIf( lDisabled == Nil, .f., lDisabled )
nFlag := Hwg_BitOr( IIf( lCheck, FLAG_CHECK, 0 ), IIf( lDisabled, FLAG_DISABLED, 0 ) )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := ATail( aMenu )[ 1 ]
NEXT
IF ! Empty( cItem )
cItem := StrTran( cItem, "\t", Chr( 9 ) )
ENDIF
nId := IIf( nId == Nil .AND. cItem != Nil, ++ _Id, nId )
AAdd( aMenu, { bItem, cItem, nId, nFlag } )
IF lBitmap != Nil .or. ! Empty( lBitmap )
IF lResource == Nil ;lResource := .F. ; ENDIF
IF ! lResource
oBmp := HBitmap():AddFile( lBitmap )
ELSE
oBmp := HBitmap():AddResource( lBitmap )
ENDIF
AAdd( _oBitmap, { .t., oBmp:Handle, cItem, nId } )
ELSE
AAdd( _oBitmap, { .F., "", cItem, nId } )
ENDIF
IF accFlag != Nil .AND. accKey != Nil
AAdd( _aAccel, { accFlag, accKey, nId } )
ENDIF
RETURN .T.
FUNCTION Hwg_DefineAccelItem( nId, bItem, accFlag, accKey )
LOCAL aMenu, i
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := ATail( aMenu )[ 1 ]
NEXT
nId := IIf( nId == Nil, ++ _Id, nId )
AAdd( aMenu, { bItem, Nil, nId, 0 } )
AAdd( _aAccel, { accFlag, accKey, nId } )
RETURN .T.
FUNCTION Hwg_SetMenuItemBitmaps( aMenu, nId, abmp1, abmp2 )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
LOCAL oMenu := aSubMenu
oMenu := IIf( aSubMenu == Nil, 0, aSubMenu[ 5 ] )
hwg__Setmenuitembitmaps( oMenu, nId, abmp1, abmp2 )
RETURN Nil
FUNCTION Hwg_InsertBitmapMenu( aMenu, nId, lBitmap, oResource )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
LOCAL oMenu := aSubMenu, oBmp
//Serge(seohic) sugest
IF oResource == Nil .or. ! oResource
oBmp := HBitmap():AddFile( lBitmap )
ELSE
oBmp := HBitmap():AddResource( lBitmap )
ENDIF
oMenu := IIf( aSubMenu == Nil, 0, aSubMenu[ 5 ] )
HWG__InsertBitmapMenu( oMenu, nId, oBmp:handle )
RETURN Nil
FUNCTION Hwg_SearchPosBitmap( nPos_Id )
LOCAL nPos := 1, lBmp := { .F., "" }
IF _oBitmap != Nil
DO WHILE nPos <= Len( _oBitmap )
IF _oBitmap[ nPos ][ 4 ] == nPos_Id
lBmp := { _oBitmap[ nPos ][ 1 ], _oBitmap[ nPos ][ 2 ], _oBitmap[ nPos ][ 3 ] }
ENDIF
nPos ++
ENDDO
ENDIF
RETURN lBmp
FUNCTION hwg_DeleteMenuItem( oWnd, nId )
LOCAL aSubMenu, nPos
IF ( aSubMenu := Hwg_FindMenuItem( oWnd:menu, nId, @nPos ) ) != Nil
ADel( aSubMenu[ 1 ], nPos )
ASize( aSubMenu[ 1 ], Len( aSubMenu[ 1 ] ) - 1 )
hwg_DeleteMenu( hwg_Getmenuhandle( oWnd:handle ), nId )
ENDIF
RETURN Nil
PROCEDURE Main
LOCAL nCont
SetColor( "W/B,W/GR+,,,W/B" )
SetMode( 33, 80 )
CLS
FOR nCont = 1 TO 5
CreateControl( nCont )
NEXT
Inkey(0)
RETURN
STATIC FUNCTION CreateControl( nCont )
LOCAL oControl
oControl := wvgControl():New()
DO CASE
CASE nCont == 1; oControl:WindowsControlName := "GROUPBOX"; oControl:Caption := "Groupbox"
CASE nCont == 2; oControl:WindowsControlName := "FRAME"
CASE nCont == 3; oControl:WindowsControlName := "PUSHBUTTON"; oControl:Caption := "PushButton"
CASE nCont == 4; oControl:WindowsControlName := "IMAGE"; oControl:Caption := "Image"
CASE nCont == 5; oControl:WindowsControlName := "PROGRESSBAR"; oControl:Caption := "ProgressBar"
ENDCASE
oControl:Create( , , { -( nCont * 5 ), -5 }, { -3, -20 } )
RETURN NIL
Usuários vendo este fórum: Google [Bot] e 3 visitantes