Page 1 of 1

Popup menus

Posted: Sat May 13, 2006 3:17 pm
by Enrico Maria Giordano
MENU command is not implemented. How can I get a right click popup menu?

EMG

Re: Popup menus

Posted: Wed Aug 23, 2006 8:09 am
by Pier Luigi
EMG try this:

Code: Select all

// FiveWin for Pocket PC - Using popup menus

#include "FWCE.ch"

#define MF_ENABLED         0

#define TPM_VERTICAL  0x0040
#define TPM_RETURNCMD 0x0100

#define MFT_SEPARATOR 0x0800

#define MF_CHECKED    0x0008
#define MF_UNCHECKED  0x0000
#define MF_POPUP      0x0010

//-----------------------------------------------------------------------------------------------------//

FUNCTION Main()

   LOCAL oWnd

   DEFINE WINDOW oWnd TITLE "Popup menu"

      oWnd:bLClicked:={ | nRow, nCol | PopupMenu( oWnd, nRow+28, nCol ) }

   ACTIVATE WINDOW oWnd

RETURN ( nil )

//-----------------------------------------------------------------------------------------------------//

STATIC FUNCTION PopupMenu( oWnd, nRow, nCol )

   LOCAL nIdSelect
   LOCAL hMenu := CreatePopupMenu()
   LOCAL hSubMenu := CreatePopupMenu()

   AppendMenu( hMenu, MF_ENABLED, 10, "One" )

   AppendMenu( hSubMenu, MF_ENABLED, 11, "Submenu 1")
   AppendMenu( hSubMenu, MF_ENABLED, 12, "Submenu 2")

   AppendMenu( hSubMenu, MFT_SEPARATOR)

   AppendMenu( hSubMenu, MF_ENABLED, 13, "Submenu 3")

   AppendMenu( hMenu, MF_POPUP, hSubMenu, "Two" )

   AppendMenu( hMenu, MFT_SEPARATOR)

   AppendMenu( hMenu, MF_ENABLED, 14, "Three")

   CheckMenuItem( hMenu, 14, MF_CHECKED )

   CheckMenuItem( hSubMenu, 13, MF_CHECKED )

   nIdSelect := TrackPopupMenuEx( hMenu, TPM_RETURNCMD, nRow, nCol, oWnd:hWnd )

   IF nIdSelect == 10

      MsgInfo ( "One" )

   ELSEIF nIdSelect == 11

      MsgInfo ( "Submenu 1" )

   ELSEIF nIdSelect == 12

      MsgInfo ( "Submenu 2" )

   ELSEIF nIdSelect == 13

      MsgInfo ( "Submenu 3" )

   ELSEIF nIdSelect == 14

      MsgInfo ( "Three" )

   ENDIF

   DestroyMenu(hMenu)

RETURN nil

//-----------------------------------------------------------------------------------------------------//

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

LPWSTR AnsiToWide( LPSTR );

#define IF(x,y,z) ((x)?(y):(z))

HB_FUNC( CREATEPOPUPMENU )
{
   hb_retnl( ( LONG ) CreatePopupMenu() );
}

HB_FUNC( APPENDMENU )
{
   LPWSTR pW = AnsiToWide( hb_parc( 4 ) );

   hb_retl( AppendMenu( ( HMENU ) hb_parnl( 1 ), ( UINT ) hb_parnl( 2 ), hb_parnl( 3 ),
                          IF( ISCHAR( 4 ), pW, ( LPWSTR ) hb_parnl( 4 ) ) ) );
   hb_xfree( pW );
}

HB_FUNC( TRACKPOPUPMENUEX )
{
   hb_retnl( ( LONG ) TrackPopupMenuEx( ( HMENU ) hb_parnl( 1 ), hb_parni( 2 ), hb_parni( 4 ),
               hb_parni( 3 ), ( HWND ) hb_parni( 5 ), NULL ) );
}

HB_FUNC( DESTROYMENU )
{
   hb_retl( DestroyMenu( ( HMENU ) hb_parnl( 1 ) ) );
}

HB_FUNC( CHECKMENUITEM )
{
   hb_retnl( ( LONG ) CheckMenuItem( ( HMENU ) hb_parnl( 1 ), hb_parni( 2 ), hb_parni( 3 ) ) );
}

#pragma ENDDUMP
Regards,
Pier luigi

Re: Popup menus

Posted: Wed Aug 23, 2006 9:50 am
by Enrico Maria Giordano
Great! The only problem is that the menu pops up immediately while it should shows up itself only if the mouse button is kept pressed.

EMG