714dd74636
git-svn-id: svn://10.65.10.50/trunk@5350 c028cbd2-c16b-5b4b-a496-9718f37d4682
745 lines
20 KiB
C++
Executable File
745 lines
20 KiB
C++
Executable File
//
|
|
// ALGAUGE.CPP
|
|
//
|
|
// Source file for ArchiveLib 2.0
|
|
//
|
|
// Copyright (c) Greenleaf Software, Inc. 1994-1996
|
|
// All Rights Reserved
|
|
//
|
|
// CONTENTS
|
|
//
|
|
// class ALGauge
|
|
// ALGauge::ALGauge()
|
|
// int ALGaugeInit()
|
|
// void ALGauge::gaugePaint()
|
|
// long ForceRepaint()
|
|
// gaugeWndProc()
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// This file contains all of the source code for the ALGauge object included
|
|
// in this library. This is not really a part of ArchiveLib, it is
|
|
// included strictly for the purposes of demos. This code is directly
|
|
// derived from code that Microsoft posted on CIS.
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// May 20, 1994 1.0A : First release
|
|
//
|
|
// July 11, 1994 1.0B : Modified the callback function to use AL_EXPORT
|
|
// instead of _export. This lets me build this
|
|
// properly under NT.
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
//
|
|
|
|
#include "arclib.h"
|
|
#if !defined( AL_IBM )
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#define STRICT
|
|
#include <windows.h>
|
|
#include "algauge.h"
|
|
|
|
//
|
|
// class ALGauge
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// This class is confined entirely to this file. To use this control,
|
|
// you need to call the initialization routine. The initialization
|
|
// routine registers the gauge class. Whenever a new gauge object
|
|
// is created, a WM_CREATE message is sent to the window procedure.
|
|
// WM_CREATE then creates an instance of ALGauge. The ALGauge
|
|
// object keeps track of everything about the particular gauge.
|
|
// The user of the gauge doesn't get to see this class, since his or her
|
|
// interface to the object goes strictly through messages to the
|
|
// object.
|
|
//
|
|
// DATA MEMBERS
|
|
//
|
|
// static dwDefaultTextColor
|
|
// static dwDefaultBackgroundColor
|
|
// When a new ALGauge object is created, it
|
|
// is assigned these colors. In theory, you
|
|
// can change these colors later with the
|
|
// right message.
|
|
//
|
|
// static szClassName One instance of the class name.
|
|
//
|
|
// static iRegistered This guy is used to keep track of whether
|
|
// the class has been registered with Windows.
|
|
//
|
|
// iRange The range of a gauge is normally 100, meaning
|
|
// it can have a value ranging from 0 to 100.
|
|
//
|
|
// iPosition The current position of the gauge, normally
|
|
// set between 0 and iRange.
|
|
//
|
|
// iOrientation This is set to one of four possible
|
|
// enumerated constants, indication which
|
|
// way the gauge fills, left to right,
|
|
// top to bottom, bottom to top, or right
|
|
// to left.
|
|
//
|
|
// hFont The font that that text will be displayed
|
|
// in.
|
|
//
|
|
// dwTextColor The color the text will be displayed in.
|
|
//
|
|
// dwBackgroundColor The background color of the box.
|
|
//
|
|
// MEMBER FUNCTIONS
|
|
//
|
|
// ALGauge() The constructor. The end user never
|
|
// gets to call this dude.
|
|
//
|
|
// gaugePaint() This guy gets called from WM_PAINT.
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// May 20, 1994 1.0A : First release
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
//
|
|
|
|
// I'm not entirely sure why we need the _far declaration on the class.
|
|
// Watcom doesn't like it, so I am trying it without. Since the
|
|
// pointer is a far pointer anyway, shouldn't this work without the
|
|
// _far type modifier on the class?
|
|
|
|
#if defined( AL_WATCOM ) || defined( AL_FLAT_MODEL )
|
|
class ALGauge { /* Tag protected class */
|
|
#else
|
|
class _far ALGauge {
|
|
#endif
|
|
public :
|
|
ALGauge();
|
|
void gaugePaint( HWND hwnd );
|
|
static DWORD dwDefaultTextColor;
|
|
static DWORD dwDefaultBackgroundColor;
|
|
static char *szClassName;
|
|
static int iRegistered;
|
|
int iRange;
|
|
int iPosition;
|
|
ALGaugeOrientation iOrientation;
|
|
HFONT hFont;
|
|
DWORD dwTextColor;
|
|
DWORD dwBackgroundColor;
|
|
};
|
|
|
|
//
|
|
// The static variables for class ALGauge
|
|
//
|
|
DWORD ALGauge::dwDefaultTextColor = 0;
|
|
DWORD ALGauge::dwDefaultBackgroundColor = 0;
|
|
int ALGauge::iRegistered = 0;
|
|
char * ALGauge::szClassName = "ALGauge";
|
|
|
|
/* internal function prototypes */
|
|
LONG AL_EXPORT CALLBACK gaugeWndProc( HWND, UINT, WPARAM, LPARAM );
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALGauge::ALGauge()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Windows
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Constructor for an ALGauge object.
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "algauge.h"
|
|
//
|
|
// ALGauge::ALGauge();
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// None, this is an internal C++ function.
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// None, this is an internal C++ function.
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// None, this is an internal C++ function.
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// None.
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// The constructor is called from the WndProc when the window is first
|
|
// created. By initializing the member variables, we are all set for
|
|
// the WM_PAINT.
|
|
//
|
|
// Please be sure to keep track of the fact that objects of class ALGauge
|
|
// are strictly for internal use by ArchiveLib. If you want to use an
|
|
// ALGauge object, your ownly interface is through your Resource Editor
|
|
// and the initialization function. In reality, the class is simply a
|
|
// handy place to hold a bunch of data regarding the gauge window.
|
|
//
|
|
// RETURNS
|
|
//
|
|
// Nothing.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
//
|
|
|
|
ALGauge::ALGauge() /* Tag protected function */
|
|
{
|
|
iRange = 100;
|
|
iPosition = 0;
|
|
iOrientation = ALGaugeOrientLeftToRight;
|
|
dwTextColor = dwDefaultTextColor;
|
|
dwBackgroundColor = dwDefaultBackgroundColor;
|
|
}
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALGaugeInit()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Windows
|
|
// C++ C
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Initialize an ArchiveLib ALGuage object.
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "algauge.h"
|
|
//
|
|
// extern "C"
|
|
// int ALGaugeInit( HINSTANCE hInstance,
|
|
// HINSTANCE hPrevInstance );
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "algauge.h"
|
|
//
|
|
// int ALGaugeInit( HINSTANCE hInstance,
|
|
// HINSTANCE hPrevInstance );
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// None, can't drop controls on a VB form.
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// None, don't know how to integrate an ALGauge object into Delphi.
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// hInstance : The instance handle of the running program, as was
|
|
// passed to WinMain()
|
|
//
|
|
// hPrevInstance : The previous instance handle. See my comments
|
|
// about this below. A non-zero value here keeps
|
|
// me from attempting to register the class.
|
|
//
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// This function is the only function you have to call to initialize
|
|
// the ALGauge objects. It registers the class and sets up the
|
|
// WndProc for this type of object. This code is for the most
|
|
// part either a copy of or closely related to the original Microsoft
|
|
// code on CIS.
|
|
//
|
|
// Looking over this function right now, while I am documenting it, I can
|
|
// see that I probably shouldn't be dinking with the hPrevInstance
|
|
// parameter. The standalone program that demonstrated this class
|
|
// would have used that to prevent itself from registering twice.
|
|
// At least when inside the DLL, I prevent that by checking the
|
|
// iRegistered member.
|
|
//
|
|
// RETURNS
|
|
//
|
|
// 1 for success, 0 for failure.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
//
|
|
|
|
extern "C" AL_LINKAGE int AL_FUNCTION
|
|
ALGaugeInit( HINSTANCE hInstance, /* Tag public function */
|
|
HINSTANCE hPrevInstance )
|
|
{
|
|
WNDCLASS wc;
|
|
HDC hdc;
|
|
|
|
if ( ALGauge::iRegistered )
|
|
return 1;
|
|
|
|
if ( hPrevInstance == 0 ) {
|
|
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
|
|
wc.hIcon = NULL;
|
|
wc.lpszMenuName = NULL;
|
|
wc.lpszClassName = ALGauge::szClassName;
|
|
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
|
|
wc.hInstance = hInstance;
|
|
#ifdef AL_BUILDING_DLL
|
|
wc.style = CS_GLOBALCLASS | CS_HREDRAW | CS_VREDRAW;
|
|
#else
|
|
wc.style = CS_HREDRAW | CS_VREDRAW;
|
|
#endif
|
|
wc.lpfnWndProc = (WNDPROC) gaugeWndProc;
|
|
wc.cbClsExtra = 0;
|
|
#if defined ( AL_WATCOM ) || defined( AL_FLAT_MODEL )
|
|
wc.cbWndExtra = sizeof( ALGauge * );
|
|
#else
|
|
wc.cbWndExtra = sizeof( ALGauge _far * );
|
|
#endif
|
|
if ( !RegisterClass( &wc ) )
|
|
return 0;
|
|
}
|
|
hdc = CreateIC( "DISPLAY", NULL, NULL, NULL );
|
|
if ( !hdc ) {
|
|
UnregisterClass( ALGauge::szClassName, hInstance );
|
|
return 0;
|
|
}
|
|
//
|
|
// Select colors based on whether this is mono or color
|
|
//
|
|
if ( GetDeviceCaps( hdc, BITSPIXEL ) == 1 &&
|
|
GetDeviceCaps( hdc, PLANES ) == 1 ) {
|
|
ALGauge::dwDefaultTextColor = RGB(255, 255, 255);
|
|
ALGauge::dwDefaultBackgroundColor = RGB(0, 0, 0);
|
|
} else {
|
|
ALGauge::dwDefaultTextColor = RGB(0, 0, 255);
|
|
ALGauge::dwDefaultBackgroundColor = RGB(255, 255, 255);
|
|
}
|
|
DeleteDC(hdc);
|
|
return ( ALGauge::iRegistered = 1);
|
|
}
|
|
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALGauge::gaugePaint()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Windows
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Interna
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "algauge.h"
|
|
//
|
|
// void ALGauge::gaugePaint( HWND hwnd );
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// hwnd : The handle of the control hat is being painted.
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// This guy is called when the window gets a WM_PAINT message. How
|
|
// does that work when this is a member function? Easy, when the
|
|
// window was created, we made a new ALGauge object, and stored its
|
|
// address in the window long word.
|
|
//
|
|
// This is mostly Microsoft code. I worked it over a little bit to
|
|
// get it to work with the ALGauge class, instead of using a bunch
|
|
// of static variables. I had to muck with it a little bit more to
|
|
// get it to work with Win32s instead of Win16, but that was an easy bit.
|
|
//
|
|
//
|
|
// RETURNS
|
|
//
|
|
// Nothing.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
//
|
|
|
|
void
|
|
ALGauge::gaugePaint( HWND hwnd ) /* Tag protected function */
|
|
{
|
|
RECT rc1;
|
|
RECT rc2;
|
|
HFONT hLastFont;
|
|
PAINTSTRUCT ps;
|
|
char ach[ 6 ];
|
|
|
|
BeginPaint( hwnd, &ps);
|
|
HDC hdc = ps.hdc;
|
|
SetTextColor( hdc, dwTextColor );
|
|
SetBkColor( hdc, dwBackgroundColor );
|
|
hLastFont = (HFONT) SelectObject( hdc, hFont );
|
|
|
|
/* draw black rectangle for gauge */
|
|
GetClientRect(hwnd, &rc1);
|
|
FrameRect( hdc, &rc1, (HBRUSH) GetStockObject( BLACK_BRUSH ) );
|
|
InflateRect( &rc1, -2, -2 );
|
|
rc2 = rc1;
|
|
|
|
/* get the range and position, make sure they are valid */
|
|
if ( iRange <= 0 )
|
|
iRange = 1;
|
|
if ( iPosition > iRange )
|
|
iPosition = iRange;
|
|
else if ( iPosition < 0 )
|
|
iPosition = 0;
|
|
|
|
/* compute the actual size of the gauge */
|
|
int dx = rc1.right - rc1.left;
|
|
int dy = rc1.bottom - rc1.top;
|
|
int wGomerX = (WORD)((DWORD)iPosition * dx / iRange );
|
|
int wGomerY = (WORD)((DWORD)iPosition * dy / iRange );
|
|
|
|
/* get the orientation and mung rects accordingly */
|
|
switch ( iOrientation ) {
|
|
case ALGaugeOrientRightToLeft :
|
|
rc1.left = rc2.right = (short int ) ( rc1.right - wGomerX );
|
|
break;
|
|
case ALGaugeOrientBottomToTop :
|
|
rc1.top = rc2.bottom = (short int) ( rc1.bottom - wGomerY );
|
|
break;
|
|
case ALGaugeOrientTopToBottom :
|
|
rc1.bottom = rc2.top += wGomerY;
|
|
break;
|
|
case ALGaugeOrientLeftToRight :
|
|
default:
|
|
rc1.right = rc2.left += wGomerX;
|
|
break;
|
|
} /* switch () */
|
|
|
|
/* select the correct font */
|
|
|
|
/* build up a string to blit out--ie the meaning of life: "42%" */
|
|
wsprintf(ach, "%3d%%", (WORD)((DWORD) iPosition * 100 / iRange ) );
|
|
SIZE size;
|
|
GetTextExtentPoint( hdc, ach, wGomerX = lstrlen(ach), &size );
|
|
/* Draw the finished (ie the percent done) side of box. If
|
|
* ZYZG_WW_POSITION is 42, (in range of 0 to 100) this ExtTextOut
|
|
* draws the meaning of life (42%) bar.
|
|
*/
|
|
|
|
ExtTextOut( hdc, (short int) (( dx - size.cx ) / 2 + 1 ), // 1 for the fram
|
|
(short int ) (( dy - size.cy ) / 2 + 1 ),
|
|
ETO_OPAQUE | ETO_CLIPPED, &rc2, ach, (short int) wGomerX, NULL);
|
|
/* Reverse fore and back colors for drawing the undone (ie the non-
|
|
* finished) side of the box.
|
|
*/
|
|
SetBkColor( hdc, dwTextColor );
|
|
SetTextColor( hdc, dwBackgroundColor );
|
|
ExtTextOut( hdc,
|
|
(short int) (( dx - size.cx ) / 2 + 1), // 1 for the frame
|
|
(short int) (( dy - size.cy ) / 2 + 1),
|
|
ETO_OPAQUE | ETO_CLIPPED,
|
|
&rc1,
|
|
ach,
|
|
(short int) wGomerX,
|
|
NULL );
|
|
SelectObject( hdc, hLastFont );
|
|
EndPaint( hwnd, &ps );
|
|
}
|
|
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ForceRepaint()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Windows
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Forces a repaint on the given window.
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "algauge.h"
|
|
//
|
|
// long ForceRepaint( HWND hwnd );
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// hwnd : The handle of the bar gauge control.
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// Several of the messages that can be sent to the gauge control change
|
|
// things enough that we want to repaint. Those routines can call
|
|
// this guy to force it to happen.
|
|
//
|
|
// RETURNS
|
|
//
|
|
// 0L, always. So what is the point of having a return? Not sure,
|
|
// I was just copying it.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
//
|
|
|
|
long
|
|
ForceRepaint( HWND hwnd ) /* Tag protected function */
|
|
{
|
|
RECT rc;
|
|
|
|
GetClientRect(hwnd, &rc);
|
|
InflateRect( &rc, ~1, ~1 );
|
|
InvalidateRect( hwnd, &rc, FALSE );
|
|
UpdateWindow( hwnd );
|
|
return 0L;
|
|
}
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// gaugeWndProc()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Windows
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// The Windows procedure for ALGauge controls.
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "algauge.h"
|
|
//
|
|
// LONG gaugeWndProc( HWND hwnd,
|
|
// UINT uMsg,
|
|
// WPARAM wParam,
|
|
// LPARAM lParam );
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// None, this is an internal support routine for ALGauge objects.
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// hwnd : Standard argument for Windows procedure
|
|
//
|
|
// uMsg : Standard argument for Windows procedure
|
|
//
|
|
// wParam : Standard argument for Windows procedure
|
|
//
|
|
// lParam : Standard argument for Windows procedure
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// This is the windows procedure for the ALGauge class. In the
|
|
// demos for ArchiveLib, we pretty much are just going to use
|
|
// the WM_CREATE and WM_PAINT messages. In theory you could send
|
|
// all these other messages, but that hasn't been tested. In fact,
|
|
// looking at the code just now, I believe all the messages that
|
|
// can be used to set the position, font, etc, should all be part
|
|
// of the WM_COMMAND case, but that isn't even in there Try to
|
|
// remember that this is just demo code!
|
|
//
|
|
// RETURNS
|
|
//
|
|
// varies, see code.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
//
|
|
|
|
|
|
//
|
|
// There is a lot of code in here that is #ifdefed to let me declare the
|
|
// class as a far object. I'm not sure if that is necessary or not. At
|
|
// one time I was sure it was, but I am able to work with it under
|
|
// Watcom in small model.
|
|
//
|
|
|
|
LONG AL_EXPORT CALLBACK
|
|
gaugeWndProc( HWND hwnd, /* Tag protected function */
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam )
|
|
{
|
|
//
|
|
// After the window has been created, the pointer to the ALGauge object
|
|
// is kept in the windows long word. I get it here so everyone else
|
|
// can have access to it.
|
|
//
|
|
#if defined ( AL_WATCOM ) || defined( AL_FLAT_MODEL )
|
|
ALGauge *pgauge = (ALGauge *) GetWindowLong( hwnd, 0 );
|
|
#else
|
|
ALGauge _far *pgauge = (ALGauge _far *) GetWindowLong( hwnd, 0 );
|
|
#endif
|
|
switch (uMsg) {
|
|
//
|
|
// When I get the WM_CREATE message, I create a new ALGauge object, then
|
|
// put its address in the Windows long word.
|
|
//
|
|
case WM_CREATE:
|
|
#if defined( AL_SYMANTEC ) || defined( AL_WATCOM ) || defined( AL_FLAT_MODEL )
|
|
// Not sure about this yet
|
|
pgauge = new ALGauge;
|
|
#else
|
|
pgauge = new _far ALGauge;
|
|
#endif
|
|
if ( pgauge == 0 )
|
|
return (0L);
|
|
SetWindowLong( hwnd, 0, (LONG) pgauge );
|
|
SendMessage( hwnd, WM_SETFONT, NULL, 0L );
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
if ( pgauge )
|
|
#if defined( AL_SYMANTEC ) && !defined( AL_LARGE_DATA )
|
|
delete (void _near *) pgauge;
|
|
#else
|
|
delete pgauge;
|
|
#endif
|
|
break;
|
|
|
|
case ALGaugeGetPosition :
|
|
return pgauge->iPosition;
|
|
|
|
case ALGaugeGetRange :
|
|
return pgauge->iRange;
|
|
|
|
case ALGaugeGetOrientation :
|
|
return pgauge->iOrientation;
|
|
|
|
case ALGaugeGetForegroundColor :
|
|
return pgauge->dwTextColor;
|
|
|
|
case ALGaugeGetBackgroundColor:
|
|
return pgauge->dwBackgroundColor;
|
|
|
|
case ALGaugeSetBackgroundColor :
|
|
pgauge->dwBackgroundColor = lParam;
|
|
return 0L;
|
|
|
|
case ALGaugeSetForegroundColor :
|
|
pgauge->dwTextColor = lParam;
|
|
return 0L;
|
|
|
|
case ALGaugeSetPosition :
|
|
pgauge->iPosition = wParam;
|
|
return ForceRepaint( hwnd );
|
|
|
|
case ALGaugeSetRange :
|
|
pgauge->iRange = wParam;
|
|
return ForceRepaint( hwnd );
|
|
|
|
case ALGaugeSetOrientation :
|
|
pgauge->iOrientation = (ALGaugeOrientation) wParam;
|
|
return ForceRepaint ( hwnd );
|
|
|
|
case ALGaugeSetDeltaPosition :
|
|
pgauge->iPosition += (signed) wParam;
|
|
return ForceRepaint( hwnd );
|
|
|
|
case WM_PAINT :
|
|
pgauge->gaugePaint( hwnd );
|
|
return (0L);
|
|
|
|
case WM_GETFONT :
|
|
if ( pgauge->hFont == GetStockObject(SYSTEM_FONT) )
|
|
return NULL;
|
|
else
|
|
return (WORD) pgauge->hFont;
|
|
|
|
case WM_SETFONT :
|
|
if ( wParam == 0 )
|
|
pgauge->hFont = (HFONT) GetStockObject( SYSTEM_FONT );
|
|
else
|
|
pgauge->hFont = (HFONT) wParam;
|
|
/* redraw if indicated in message */
|
|
if ( (BOOL) lParam ) {
|
|
InvalidateRect( hwnd, NULL, TRUE );
|
|
UpdateWindow( hwnd );
|
|
}
|
|
return (0L);
|
|
}
|
|
return ( DefWindowProc( hwnd, uMsg, wParam, lParam ) );
|
|
}
|
|
|