Files
harbour-core/harbour/examples/gtwvw/wvwmenu.c
Viktor Szakats a5a304efc2 2009-12-22 03:47 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/gtwvt/gtwvt.c
    % Deleted unnecessary cast.

  * utils/hbmk2/hbmk2.pt_BR.po
    + Uploaded new version received from Vailton Renato. Thanks!

  * utils/hbmk2/hbmk2.hu_HU.po
    + Updated.
    + Added some new translations.

  * utils/hbmk2/hbmk2.prg
    * Minor formatting.
    ! Fixed typo in one of the displayed texts.

  + examples/gtwvw
  + examples/gtwvw/Makefile
  + examples/gtwvw/hbgtwvw.h
  + examples/gtwvw/hbole.h
  + examples/gtwvw/gtwvw.c
  + examples/gtwvw/wvwdraw.c
  + examples/gtwvw/wvwmenu.c
  + examples/gtwvw/wvwstbar.c
  + examples/gtwvw/wvwcheck.c
  + examples/gtwvw/wvwfuncs.c
  + examples/gtwvw/wvwpush.c
  + examples/gtwvw/wvwedit.c
  + examples/gtwvw/wvwtbar.c
  + examples/gtwvw/gtwvw.hbc
  + examples/gtwvw/gtwvw.hbp
  + examples/gtwvw/readme.txt
  + examples/gtwvw/tests
  + examples/gtwvw/tests/wvwtest9.rc
  + examples/gtwvw/tests/prog1.prg
  + examples/gtwvw/tests/prog2.prg
  + examples/gtwvw/tests/dia_excl.ico
  + examples/gtwvw/tests/drawimg.prg
  + examples/gtwvw/tests/vouch1.bmp
  + examples/gtwvw/tests/wvwmouse.prg
  + examples/gtwvw/tests/wvwtest9.hbp
  + examples/gtwvw/tests/hbmk.hbm
  + examples/gtwvw/tests/cbtest1.prg
  + examples/gtwvw/tests/def2.bmp
  + examples/gtwvw/tests/maincoor.prg
  + examples/gtwvw/tests/wvt2wvw.ch
  + examples/gtwvw/tests/cbtest6.prg
  + examples/gtwvw/tests/wvwtest9.prg
  + examples/gtwvw/tests/ebtest7.prg
  + examples/gtwvw/tests/vouch1.gif
  + examples/gtwvw/tests/maximize.prg
  + examples/gtwvw/tests/readme.txt
  + examples/gtwvw/tests/wvwtest9.xml
  + examples/gtwvw/tests/inpfocus.prg
  + examples/gtwvw/tests/prog0.prg
  + examples/gtwvw/docs
  + examples/gtwvw/docs/funclist.txt
  + examples/gtwvw/docs/gtwvw.txt
  + examples/gtwvw/docs/whatsnew.txt
    + Added rudimentary port of GTWVW to Harbour.
      (The source was current xhb CVS repository.)
      The port is very very (very) far from anything else
      than can be found in Harbour, this port involved making
      all the minimum required steps to build and link under
      Harbour, plus some extra cleanups.
    ! Lots of cleanups and fixes.
    + Added Harbour make files (both GNU make and hbmk2)
    + Cleaned tests to avoid multiple symbols and much simpler
      interdependencies.
    ! Removed extra test.dbf and what32 dependency.
    ; TOFIX: Due to public symbol collisions, this GTWVW it's
             probably not possible to use it with gtwin lib.
    ; NOTE: GTWVW is limited to non-UNICODE, non-C++, 32-bit
            Windows (no WinCE) builds, and for a clean compiler
            I had to suppress Harbour standard warning levels.
            Anyway, not basic tests program seems to work,
            although I didn't dig into them very deeply.
            We will see if this contrib turns out to be useful
            or not, and we can decide to drop it or maybe
            moving it to contrib once it has been brought up
            to Harbour standards. Although the code is huge,
            so don't expect to happen this very soon.
2009-12-22 02:50:24 +00:00

393 lines
12 KiB
C

/*
* $Id$
*/
/*
* Video subsystem for Win32 using GUI windows instead of Console
* with multiple windows support
* Copyright 2004 Budyanto Dj. <budyanto@centrin.net.id>
* gtwvw menu Functions
* GTWVW is initially created based on:
*
* =Id: gtwvt.c,v 1.60 2004/01/26 08:14:07 vouchcac Exp =
*
* Harbour Project source code:
* Video subsystem for Win32 using GUI windows instead of Console
* Copyright 2003 Peter Rees <peter@rees.co.nz>
* Rees Software & Systems Ltd
* based on
* Bcc ConIO Video subsystem by
* Copyright 2002 Marek Paliwoda <paliwoda@inteia.pl>
* Copyright 2002 Przemys³aw Czerpak <druzus@polbox.com>
* Video subsystem for Win32 compilers
* Copyright 1999-2000 Paul Tucker <ptucker@sympatico.ca>
* Copyright 2002 Przemys³aw Czerpak <druzus@polbox.com>
*
* The following parts are Copyright of the individual authors.
* www - http://www.harbour-project.org
*
*
* Copyright 1999 David G. Holm <dholm@jsd-llc.com>
* hb_gt_wvw_Tone()
*
* See doc/license.txt for licensing terms.
*
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option )
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/ ).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#include "hbgtwvw.h"
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/* */
/* Peter Rees <peter@rees.co.nz> */
/* */
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_SETMENU )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWinData = hb_gt_wvw_GetWindowsData( usWinNum );
SetMenu( pWinData->hWnd, ( HMENU ) HB_PARHANDLE( 2 ) ) ;
hb_gt_wvwResetWindow( usWinNum );
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_SETPOPUPMENU )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWinData = hb_gt_wvw_GetWindowsData( usWinNum );
HMENU hPopup = pWinData->hPopup ;
pWinData->hPopup = ( HMENU ) HB_PARHANDLE( 2 );
/* if ( hPopup ) */
{
HB_RETHANDLE( hPopup );
}
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_CREATEMENU )
{
HB_RETHANDLE( CreateMenu() ) ;
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_CREATEPOPUPMENU )
{
HB_RETHANDLE( CreatePopupMenu() ) ;
}
/*-------------------------------------------------------------------*/
/* WVW_APPENDMENU( hMenu, nFlags, nMenuItemId, cCaption ) */
HB_FUNC( WVW_APPENDMENU )
{
char ucBuf[ 256 ];
int i,iLen ;
LPCTSTR lpszCaption;
if ( !(hb_parni(2) & (MF_SEPARATOR|MF_POPUP)) &&
(hb_parni(3) >= WVW_ID_BASE_PUSHBUTTON ) )
{
MessageBox( NULL, TEXT( "Menu Command Id too high. Potential conflict with pushbutton" ),
hb_gt_wvw_GetAppName(), MB_ICONERROR );
hb_retl( FALSE );
return;
}
if ( ISCHAR( 4 ) )
{
iLen = hb_parclen( 4 );
if ( iLen > 0 && iLen < 256 )
{
lpszCaption = hb_parcx( 4 ) ;
for ( i=0; i< iLen ; i++ )
{
ucBuf[ i ] = ( *lpszCaption == '~' ) ? '&' : *lpszCaption ;
lpszCaption++;
}
ucBuf[ iLen ]= '\0';
lpszCaption = ucBuf ;
}
else
{
lpszCaption = hb_parcx( 4 ) ;
}
}
else
{
lpszCaption = ( LPCTSTR ) hb_parni( 4 ) ;
}
hb_retl( AppendMenu( ( HMENU ) HB_PARHANDLE( 1 ), ( UINT ) hb_parni( 2 ), ( UINT_PTR ) hb_parni( 3 ),( LPCTSTR ) lpszCaption ) ) ;
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_DELETEMENU )
{
hb_retl( DeleteMenu( ( HMENU ) HB_PARHANDLE( 1 ), ( UINT ) hb_parni( 2 ), ( UINT ) hb_parni( 3 ) ) );
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_DESTROYMENU )
{
hb_retl( DestroyMenu( ( HMENU ) HB_PARHANDLE( 1 ) ) );
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_ENABLEMENUITEM )
{
hb_retni( EnableMenuItem( ( HMENU ) HB_PARHANDLE( 1 ), ( UINT ) hb_parni( 2 ), ( UINT ) hb_parni( 3 ) ) );
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_GETLASTMENUEVENT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
hb_retni( hb_gt_wvwGetLastMenuEvent( usWinNum ) ) ;
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_SETLASTMENUEVENT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
hb_retni( hb_gt_wvwSetLastMenuEvent( usWinNum, hb_parni(2) ) );
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_SETMENUKEYEVENT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
int iEvent = 0;
if ( ISNUM( 2 ) )
{
iEvent = hb_parnl( 2 ) ;
}
hb_retni( hb_gt_wvwSetMenuKeyEvent( usWinNum, iEvent ) ) ;
}
// WVW_MENUITEM_SETBITMAPS(
// hMenu,
// nIDEnableItem,
// nPosition,
// ncBitmapUnchecked,
// ncBimapChecked )
//
HB_FUNC ( WVW_MENUITEM_SETBITMAPS )
{
HBITMAP hBitmapUnchecked = NULL;
HBITMAP hBitmapChecked = NULL;
char szResname[_MAX_PATH+1];
int iWidth, iHeight;
if ( !ISNIL(4) )
{
if ( ISNUM(4) )
{
sprintf( szResname, "?%u", hb_parni(4) );
hBitmapUnchecked = FindBitmapHandle(szResname, &iWidth, &iHeight);
if (!hBitmapUnchecked)
{
hBitmapUnchecked = (HBITMAP)LoadImage(hb_getWvwData()->hInstance,(LPCTSTR) MAKEINTRESOURCE( (WORD) hb_parni(4) ),IMAGE_BITMAP,0,0, LR_DEFAULTCOLOR);
AddBitmapHandle(szResname, hBitmapUnchecked, iWidth, iHeight);
}
}
else
{
hBitmapUnchecked = FindBitmapHandle(hb_parcx(4), &iWidth, &iHeight);
if (!hBitmapUnchecked)
{
hBitmapUnchecked = (HBITMAP)LoadImage(hb_getWvwData()->hInstance, hb_parcx(4), IMAGE_BITMAP,0,0, LR_DEFAULTCOLOR);
AddBitmapHandle(hb_parcx(4), hBitmapUnchecked , iWidth, iHeight);
}
}
}
if ( !ISNIL(5) )
{
if ( ISNUM(5) )
{
sprintf( szResname, "?%u", hb_parni(5) );
hBitmapChecked = FindBitmapHandle(szResname, &iWidth, &iHeight);
if (!hBitmapChecked)
{
hBitmapChecked = (HBITMAP)LoadImage(hb_getWvwData()->hInstance,(LPCTSTR) MAKEINTRESOURCE( (WORD) hb_parni(5) ),IMAGE_BITMAP,0,0, LR_DEFAULTCOLOR);
AddBitmapHandle(szResname, hBitmapChecked, iWidth, iHeight);
}
}
else
{
hBitmapChecked = FindBitmapHandle(hb_parcx(5), &iWidth, &iHeight);
if (!hBitmapChecked)
{
hBitmapChecked = (HBITMAP)LoadImage(hb_getWvwData()->hInstance, hb_parcx(5), IMAGE_BITMAP,0,0, LR_DEFAULTCOLOR);
AddBitmapHandle(hb_parcx(5), hBitmapChecked , iWidth, iHeight);
}
}
}
if ( !ISNIL(2) )
{
SetMenuItemBitmaps( (HMENU) HB_PARHANDLE(1) , hb_parni(2), MF_BYCOMMAND , (HBITMAP) hBitmapUnchecked, (HBITMAP) hBitmapChecked ) ;
}
else
{
SetMenuItemBitmaps( (HMENU) HB_PARHANDLE(1) , hb_parni(3), MF_BYPOSITION , (HBITMAP) hBitmapUnchecked, (HBITMAP) hBitmapChecked ) ;
}
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_DRAWMENUBAR )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
DrawMenuBar( pWindowData->hWnd ) ;
}
/*-------------------------------------------------------------------*/
HB_FUNC( WVW_ENDMENU )
{
hb_retl( EndMenu() ) ;
}
/* WVW_GetMenu([nWinNum]) */
HB_FUNC( WVW_GETMENU )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
HB_RETHANDLE( GetMenu( pWindowData->hWnd ) );
}
/* WVW_TrackPopupMenu([nWinNum], n) */
HB_FUNC( WVW_TRACKPOPUPMENU )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
POINT xy = { 0 };
GetCursorPos( &xy );
hb_retnl( TrackPopupMenu( ( HMENU ) HB_PARHANDLE( 2 ) ,
TPM_CENTERALIGN | TPM_RETURNCMD | TPM_RECURSE,
xy.x ,
xy.y ,
0 ,
pWindowData->hWnd ,
NULL ) );
}
HB_FUNC( WIN_SETMENU )
{
SetMenu( ( HWND ) HB_PARHANDLE( 1 ), ( HMENU ) HB_PARHANDLE( 2 ) ) ;
}
/*
*WVW_NOSYSMENU( [nWinNum], lRemoveClose )
*removes System Menu of a window
*if lRemoveClose is .t., also removes the 'Close' command and 'X' button
*
*no return value
*/
HB_FUNC( WVW_NOSYSMENU )
{
UINT usWinNum = WVW_WHICH_WINDOW;
BOOL lRemoveClose = ISNIL(2) ? FALSE : hb_parl(2);
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
HMENU hMenu = GetSystemMenu(pWindowData->hWnd, FALSE);
if (hMenu)
{
DeleteMenu( hMenu, SC_MAXIMIZE, MF_BYCOMMAND );
DeleteMenu( hMenu, SC_MINIMIZE, MF_BYCOMMAND );
DeleteMenu( hMenu, SC_SIZE, MF_BYCOMMAND );
DeleteMenu( hMenu, SC_MOVE, MF_BYCOMMAND );
DeleteMenu( hMenu, SC_RESTORE, MF_BYCOMMAND );
DeleteMenu( hMenu, SC_NEXTWINDOW, MF_BYCOMMAND );
if (lRemoveClose)
{
DeleteMenu( hMenu, SC_CLOSE, MF_BYCOMMAND );
DeleteMenu( hMenu, 0, MF_BYPOSITION );
}
DrawMenuBar( pWindowData->hWnd );
}
}
/* WVW_GetSystemMenu( [nWinNum], lReset )
*returns the System Menu of a window
*if lRemoveClose is .t., also removes the 'Close' command and 'X' button
*/
HB_FUNC( WVW_GETSYSTEMMENU )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
BOOL lReset = ISNIL(2) ? FALSE : hb_parl(2);
hb_retnl( ( ULONG ) GetSystemMenu( pWindowData->hWnd, lReset ) );
}