348 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			348 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| //
 | |
| // PMUTIL.CPP
 | |
| //
 | |
| //  Source file for ArchiveLib 2.0
 | |
| //
 | |
| //  Copyright (c) Greenleaf Software, Inc. 1994-1996
 | |
| //  All Rights Reserved
 | |
| //
 | |
| // CONTENTS
 | |
| //
 | |
| //  TrimSystemMenu()
 | |
| //  CenterWindow()
 | |
| //  SetupSlider()
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This file contains a few utility routines specifically designed to
 | |
| //  work with PM.
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   February 14, 1996  2.0A : New release
 | |
| 
 | |
| #include "arclib.h"
 | |
| #if !defined( AL_IBM )
 | |
| #pragma hdrstop
 | |
| #endif
 | |
| 
 | |
| #include <os2.h>
 | |
| 
 | |
| //
 | |
| // NAME
 | |
| //
 | |
| //  TrimSystemMenu()
 | |
| //
 | |
| // PLATFORMS/ENVIRONMENTS
 | |
| //
 | |
| //  PM
 | |
| //  C++  C
 | |
| //
 | |
| // SHORT DESCRIPTION
 | |
| //
 | |
| //  Trim most of the options from the system menu.
 | |
| //
 | |
| // C++ SYNOPSIS
 | |
| //
 | |
| //  #include "arclib.h"
 | |
| //  #include "pmutil.h"
 | |
| //
 | |
| //  extern "C" void TrimSystemMenu( HWND hwnd );
 | |
| //
 | |
| // C SYNOPSIS
 | |
| //
 | |
| //  #include "arclib.h"
 | |
| //  #include "ppmmon.h"
 | |
| //
 | |
| //  void TrimSystemMenu( HWND hwnd );
 | |
| //
 | |
| // VB SYNOPSIS
 | |
| //
 | |
| //  None, VB doesn't work under OS/2.
 | |
| //
 | |
| // DELPHI SYNOPSIS
 | |
| //
 | |
| //  None, Delphi doesn't work under OS/2.
 | |
| //
 | |
| // ARGUMENTS
 | |
| //
 | |
| //  hwnd  :  The handle of the window whose system menu needs to be trimmed.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is a handy function for removing some of the clutter from
 | |
| //  the system menu.  I use this for "about" boxes.  It removes all of
 | |
| //  the default entry menu items, except for the Close and Move options.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Nothing.
 | |
| //
 | |
| // EXAMPLE
 | |
| //
 | |
| // SEE ALSO
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   February 14, 1996  2.0A : New release
 | |
| //
 | |
| 
 | |
| extern "C" AL_LINKAGE void AL_FUNCTION
 | |
| TrimSystemMenu( HWND hwnd )  /* Tag public function */
 | |
| {
 | |
|     HWND hwndSysMenu;
 | |
|     MENUITEM mi;
 | |
|     int MenuID;
 | |
|     SHORT PresentItem = 0;
 | |
|     INT NumberOfItems;
 | |
| 
 | |
|     hwndSysMenu = WinWindowFromID( hwnd, FID_SYSMENU );
 | |
|     WinSendMsg( hwndSysMenu,
 | |
|                 MM_QUERYITEM,
 | |
|                 MPFROM2SHORT( SC_SYSMENU, FALSE ),
 | |
|                 (MPARAM) &mi );
 | |
|     NumberOfItems = (INT) WinSendMsg( mi.hwndSubMenu,
 | |
|                                       MM_QUERYITEMCOUNT,
 | |
|                                       0,
 | |
|                                       0 );
 | |
|     while ( NumberOfItems-- ) {
 | |
|             MenuID = (int) WinSendMsg( mi.hwndSubMenu,
 | |
|                                        MM_ITEMIDFROMPOSITION,
 | |
|                                        MPFROM2SHORT( PresentItem, TRUE ),
 | |
|                                       0 );
 | |
|         switch ( MenuID ) {
 | |
|             case SC_CLOSE :
 | |
|             case SC_MOVE  :
 | |
|                 PresentItem++;
 | |
|                 break;
 | |
|             default :
 | |
|                 WinSendMsg( mi.hwndSubMenu,
 | |
|                             MM_DELETEITEM,
 | |
|                             MPFROM2SHORT( (short) MenuID, TRUE ),
 | |
|                             0 );
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| //
 | |
| // NAME
 | |
| //
 | |
| //  CenterWindow()
 | |
| //
 | |
| // PLATFORMS/ENVIRONMENTS
 | |
| //
 | |
| //  PM
 | |
| //  C++  C
 | |
| //
 | |
| // SHORT DESCRIPTION
 | |
| //
 | |
| //  Center a window on the screen.
 | |
| //
 | |
| // C++ SYNOPSIS
 | |
| //
 | |
| //  #include "arclib.h"
 | |
| //  #include "pmutil.h"
 | |
| //
 | |
| //  extern "C" void CenterWindow( HWND hwnd );
 | |
| //
 | |
| // C SYNOPSIS
 | |
| //
 | |
| //  #include "arclib.h"
 | |
| //  #include "ppmmon.h"
 | |
| //
 | |
| //  void CenterWindow( HWND hwnd );
 | |
| //
 | |
| // VB SYNOPSIS
 | |
| //
 | |
| //  None, VB doesn't work under OS/2.
 | |
| //
 | |
| // DELPHI SYNOPSIS
 | |
| //
 | |
| //  None, Delphi doesn't work under OS/2.
 | |
| //
 | |
| // ARGUMENTS
 | |
| //
 | |
| //  hwnd  :  The handle of the window to be centered.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  Want to center a Window on the screen under OS/2?  This does it.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Nothing.
 | |
| //
 | |
| // EXAMPLE
 | |
| //
 | |
| // SEE ALSO
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   February 14, 1996  2.0A : New release
 | |
| //
 | |
| 
 | |
| extern "C" AL_LINKAGE void AL_FUNCTION
 | |
| CenterWindow( HWND hwnd )  /* Tag public function */
 | |
| {
 | |
|     SWP swp;
 | |
| 
 | |
|     int width = WinQuerySysValue( HWND_DESKTOP, SV_CXSCREEN );
 | |
|     int height = WinQuerySysValue( HWND_DESKTOP, SV_CYSCREEN );
 | |
|     WinQueryWindowPos( hwnd, &swp );
 | |
|     swp.x = ( width / 2 ) - ( swp.cx / 2 );
 | |
|     swp.y = ( height / 2 ) - ( swp.cy / 2 );
 | |
|     WinSetWindowPos( hwnd,
 | |
|                      0,
 | |
|                      swp.x,
 | |
|                      swp.y,
 | |
|                      swp.cx,
 | |
|                      swp.cy,
 | |
|                      SWP_SHOW | SWP_MOVE );
 | |
| }
 | |
| 
 | |
| //
 | |
| // NAME
 | |
| //
 | |
| //  SetupSlider();
 | |
| //
 | |
| // PLATFORMS/ENVIRONMENTS
 | |
| //
 | |
| //  PM
 | |
| //  C++  C
 | |
| //
 | |
| // SHORT DESCRIPTION
 | |
| //
 | |
| //  Dink with a slider control to optimize it as a monitor.
 | |
| //
 | |
| // C++ SYNOPSIS
 | |
| //
 | |
| //  #include "arclib.h"
 | |
| //  #include "pmutil.h"
 | |
| //
 | |
| //  extern "C" int SetupSlider( HWND hDlg, int slider_id, int draw_ticks );
 | |
| //
 | |
| // C SYNOPSIS
 | |
| //
 | |
| //  #include "arclib.h"
 | |
| //  #include "util.h"
 | |
| //
 | |
| //  int SetupSlider( HWND hDlg, int slider_id, int draw_ticks );
 | |
| //
 | |
| // VB SYNOPSIS
 | |
| //
 | |
| //  None, VB doesn't work under OS/2.
 | |
| //
 | |
| // DELPHI SYNOPSIS
 | |
| //
 | |
| //  None, Delphi doesn't work under OS/2.
 | |
| //
 | |
| // ARGUMENTS
 | |
| //
 | |
| //  hDlg        :  If slider_id is equal to -1, this argument is the
 | |
| //                 window handle for the slider control.  If slider_id
 | |
| //                 is soemthing else, this is assumed to be a dialog
 | |
| //                 box handle that contains the slider control.
 | |
| //
 | |
| //  slider_id   :  The dialog ID of the slider control, or -1 if hDlg
 | |
| //                 contains the actual handle of the slider control.
 | |
| //
 | |
| //  draw_ticks  :  A boolean flag indicating whether or not this routine
 | |
| //                 should draw tick marks on the slider control.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  If you are going to use a slider control as a monitor, this routine
 | |
| //  will do a few things that help make it look better.  First, we modify
 | |
| //  the slider so it has 10 intervals.  The progress meter will then tick
 | |
| //  along from 0 to 10 until the whole deal is done.  Next, the shaft of
 | |
| //  the slider is widened to 20 pixels, up from the default of 5 (I think.)
 | |
| //
 | |
| //  Finally, I draw a set of tick marks along the slider, if requested.  Note
 | |
| //  that you really need to make the slider control wide to accomodate ticks.
 | |
| //  User your resource editor to look at the sliders in the OS/2 examples
 | |
| //  for an idea of how wide I mean.  I also pin the shaft agains the bottom
 | |
| //  or right hand side of the slider, so there is room for tick marks in
 | |
| //  the upper or left hand side.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  1 if things went well, 0 if they didn't.
 | |
| //
 | |
| // EXAMPLE
 | |
| //
 | |
| // SEE ALSO
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   November 13, 1995  2.00A : First release.
 | |
| //
 | |
| 
 | |
| extern "C" AL_LINKAGE int AL_FUNCTION
 | |
| SetupSlider( HWND hDlg, int slider_id, int draw_ticks )  /* Tag public function */
 | |
| {
 | |
|     HWND hwnd;
 | |
| 
 | |
|     if ( slider_id == -1 )
 | |
|         hwnd = hDlg;
 | |
|     else
 | |
|         hwnd = WinWindowFromID( hDlg, slider_id );
 | |
|     if ( hwnd == 0 )
 | |
|         return 0;
 | |
| 
 | |
|     WNDPARAMS wndp;
 | |
|     SLDCDATA sldc;
 | |
|     wndp.fsStatus = WPM_CTLDATA;
 | |
|     wndp.pCtlData = (PVOID) &sldc;
 | |
|     wndp.cbCtlData = sizeof( sldc );
 | |
|     MRESULT ret = WinSendMsg( hwnd, WM_QUERYWINDOWPARAMS, MPFROMP( &wndp ), MPFROMSHORT( 0 ) );
 | |
|     if ( ret == 0 )
 | |
|         return 0;
 | |
|     int pixels = ( sldc.usScale1Increments - 1 ) * sldc.usScale1Spacing;
 | |
|     sldc.usScale1Increments = 11;
 | |
|     sldc.usScale1Spacing = (USHORT)( pixels / 10 );
 | |
|     wndp.fsStatus = WPM_CTLDATA;
 | |
|     wndp.pCtlData = (PVOID) &sldc;
 | |
|     wndp.cbCtlData = sizeof( sldc );
 | |
|     ret = WinSendMsg( hwnd, WM_SETWINDOWPARAMS, MPFROMP( &wndp ), MPFROMSHORT( 0 ) );
 | |
|     if ( ret == 0 )
 | |
|         return 0;
 | |
|     WinSendMsg( hwnd,
 | |
|                 SLM_SETSLIDERINFO,
 | |
|                 MPFROM2SHORT( SMA_SHAFTDIMENSIONS, 0 ),
 | |
|                 MPFROMSHORT( 20 ) );
 | |
|     if ( !draw_ticks )
 | |
|         return 1;
 | |
|     int j;
 | |
|     for ( j = 0 ; j < sldc.usScale1Increments ; j += 1 )
 | |
|         WinSendMsg( hwnd,
 | |
|                     SLM_SETTICKSIZE,
 | |
|                     MPFROM2SHORT( j, 5 ),
 | |
|                     0 );
 | |
|     WinSendMsg( hwnd,
 | |
|                 SLM_SETSCALETEXT,
 | |
|                 MPFROMSHORT( 0 ),
 | |
|                 MPFROMP( "0%" ) );
 | |
|     WinSendMsg( hwnd,
 | |
|                 SLM_SETTICKSIZE,
 | |
|                 MPFROM2SHORT( 0, 10 ),
 | |
|                 0 );
 | |
|     WinSendMsg( hwnd,
 | |
|                 SLM_SETSCALETEXT,
 | |
|                 MPFROMSHORT( (j - 1) / 2 ),
 | |
|                 MPFROMP( "50%" ) );
 | |
|     WinSendMsg( hwnd,
 | |
|                 SLM_SETTICKSIZE,
 | |
|                 MPFROM2SHORT( ( j - 1 ) / 2, 10 ),
 | |
|                 0 );
 | |
|     WinSendMsg( hwnd,
 | |
|                 SLM_SETSCALETEXT,
 | |
|                 MPFROMSHORT( j - 1 ),
 | |
|                 MPFROMP( "100%" ) );
 | |
|     WinSendMsg( hwnd,
 | |
|                 SLM_SETTICKSIZE,
 | |
|                 MPFROM2SHORT( j - 1, 10 ),
 | |
|                 0 );
 | |
|     return 1;
 | |
| }
 | |
| 
 |