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;
|
|
}
|
|
|