// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#ifndef WX_PRECOMP
#include "wx/defs.h"
+#include "wx/utils.h"
#endif
-#if USE_GAUGE
+#if wxUSE_GAUGE
#include "wx/msw/gaugemsw.h"
#include "wx/msw/private.h"
/* public function prototypes */
BOOL FAR PASCAL gaugeInit(HINSTANCE hInstance);
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxGaugeMSW, wxControl)
-#endif
-bool wxGaugeMSW::Create(wxWindow *parent, const wxWindowID id,
- const int range,
+bool wxGaugeMSW::Create(wxWindow *parent, wxWindowID id,
+ int range,
const wxPoint& pos,
const wxSize& size,
- const long style,
+ long style,
const wxValidator& validator,
const wxString& name)
{
if ( !wxGaugeMSWInitialised )
{
- if (!gaugeInit((HWND) wxGetInstance()))
- wxFatalError("Cannot initalize Gauge library");
- wxGaugeMSWInitialised = TRUE;
+ if (!gaugeInit((HINSTANCE) wxGetInstance()))
+ wxFatalError("Cannot initalize Gauge library");
+ wxGaugeMSWInitialised = TRUE;
}
SetName(name);
+#if wxUSE_VALIDATORS
SetValidator(validator);
+#endif // wxUSE_VALIDATORS
if (parent) parent->AddChild(this);
m_rangeMax = range;
+ m_gaugePos = 0;
- SetBackgroundColour(parent->GetDefaultBackgroundColour()) ;
- SetForegroundColour(parent->GetDefaultForegroundColour()) ;
+ SetBackgroundColour(parent->GetBackgroundColour()) ;
+ SetForegroundColour(parent->GetForegroundColour()) ;
m_windowStyle = style;
if ( id == -1 )
- m_windowId = (int)NewControlId();
+ m_windowId = (int)NewControlId();
else
- m_windowId = id;
+ m_windowId = id;
int x = pos.x;
int y = pos.y;
int height = size.y;
long msFlags = WS_CHILD | WS_VISIBLE | WS_TABSTOP;
- msFlags |= ZYZGS_3D;
+ bool want3D;
+ WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D);
+ if (want3D)
+ msFlags |= ZYZGS_3D;
+
+ if ( m_windowStyle & wxCLIP_SIBLINGS )
+ msFlags |= WS_CLIPSIBLINGS;
HWND wx_button =
- CreateWindowEx(MakeExtendedStyle(m_windowStyle), "zYzGauge", NULL, msFlags,
+ CreateWindowEx(MakeExtendedStyle(m_windowStyle), wxT("zYzGauge"), NULL, msFlags,
0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId,
wxGetInstance(), NULL);
wOrient = ZYZG_ORIENT_LEFTTORIGHT;
else
wOrient = ZYZG_ORIENT_BOTTOMTOTOP;
-
+
SendMessage(wx_button, ZYZG_SETORIENTATION, wOrient, 0);
SendMessage(wx_button, ZYZG_SETRANGE, range, 0);
- SendMessage((HWND) GetHWND(), ZYZG_SETFGCOLOR, 0, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue()));
- SendMessage((HWND) GetHWND(), ZYZG_SETBKCOLOR, 0, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue()));
+ SendMessage(GetHwnd(), ZYZG_SETFGCOLOR, 0, PALETTERGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue()));
+ SendMessage(GetHwnd(), ZYZG_SETBKCOLOR, 0, PALETTERGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue()));
+
+ //SetBezelFace(1);
+ //SetShadowWidth(1);
- SetFont(* parent->GetFont());
+ SetFont(parent->GetFont());
if (width == -1)
width = 50;
height = 50;
SetSize(x, y, width, height);
- ShowWindow((HWND) GetHWND(), SW_SHOW);
+ ShowWindow(GetHwnd(), SW_SHOW);
return TRUE;
}
-void wxGaugeMSW::SetSize(const int x, const int y, const int width, const int height, const int sizeFlags)
+void wxGaugeMSW::SetShadowWidth(int w)
{
- int currentX, currentY;
- GetPosition(¤tX, ¤tY);
- int x1 = x;
- int y1 = y;
- int w1 = width;
- int h1 = height;
-
- if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- x1 = currentX;
- if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- y1 = currentY;
-
- // If we're prepared to use the existing size, then...
- if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
- {
- GetSize(&w1, &h1);
- }
-
- // Deal with default size (using -1 values)
- if (w1<=0)
- w1 = DEFAULT_ITEM_WIDTH;
-
- if (h1<=0)
- h1 = DEFAULT_ITEM_HEIGHT;
-
- MoveWindow((HWND) GetHWND(), x1, y1, w1, h1, TRUE);
-
-#if WXWIN_COMPATIBILITY
- GetEventHandler()->OldOnSize(width, height);
-#else
- wxSizeEvent event(wxSize(width, height), m_windowId);
- event.eventObject = this;
- GetEventHandler()->ProcessEvent(event);
-#endif
+ SendMessage(GetHwnd(), ZYZG_SETWIDTH3D, w, 0);
}
-void wxGaugeMSW::SetShadowWidth(const int w)
+void wxGaugeMSW::SetBezelFace(int w)
{
- SendMessage((HWND) GetHWND(), ZYZG_SETWIDTH3D, w, 0);
+ SendMessage(GetHwnd(), ZYZG_SETBEZELFACE, w, 0);
}
-void wxGaugeMSW::SetBezelFace(const int w)
-{
- SendMessage((HWND) GetHWND(), ZYZG_SETBEZELFACE, w, 0);
-}
-
-void wxGaugeMSW::SetRange(const int r)
+void wxGaugeMSW::SetRange(int r)
{
m_rangeMax = r;
- SendMessage((HWND) GetHWND(), ZYZG_SETRANGE, r, 0);
+ SendMessage(GetHwnd(), ZYZG_SETRANGE, r, 0);
}
-void wxGaugeMSW::SetValue(const int pos)
+void wxGaugeMSW::SetValue(int pos)
{
m_gaugePos = pos;
- SendMessage((HWND) GetHWND(), ZYZG_SETPOSITION, pos, 0);
+ SendMessage(GetHwnd(), ZYZG_SETPOSITION, pos, 0);
}
int wxGaugeMSW::GetShadowWidth(void) const
{
- return (int) SendMessage((HWND) GetHWND(), ZYZG_GETWIDTH3D, 0, 0);
+ return (int) SendMessage(GetHwnd(), ZYZG_GETWIDTH3D, 0, 0);
}
int wxGaugeMSW::GetBezelFace(void) const
{
- return (int) SendMessage((HWND) GetHWND(), ZYZG_GETBEZELFACE, 0, 0);
+ return (int) SendMessage(GetHwnd(), ZYZG_GETBEZELFACE, 0, 0);
}
int wxGaugeMSW::GetRange(void) const
{
- return (int) SendMessage((HWND) GetHWND(), ZYZG_GETRANGE, 0, 0);
+ return (int) SendMessage(GetHwnd(), ZYZG_GETRANGE, 0, 0);
}
int wxGaugeMSW::GetValue(void) const
{
- return (int) SendMessage((HWND) GetHWND(), ZYZG_GETPOSITION, 0, 0);
+ return (int) SendMessage(GetHwnd(), ZYZG_GETPOSITION, 0, 0);
}
-void wxGaugeMSW::SetForegroundColour(const wxColour& col)
+bool wxGaugeMSW::SetForegroundColour(const wxColour& col)
{
- m_foregroundColour = col ;
- SendMessage((HWND) GetHWND(), ZYZG_SETFGCOLOR, 0, RGB(col.Red(), col.Green(), col.Blue()));
+ if ( !wxControl::SetForegroundColour(col) )
+ return FALSE;
+
+ SendMessage(GetHwnd(), ZYZG_SETFGCOLOR, 0, PALETTERGB(col.Red(), col.Green(), col.Blue()));
+
+ return TRUE;
}
-void wxGaugeMSW::SetBackgroundColour(const wxColour& col)
+bool wxGaugeMSW::SetBackgroundColour(const wxColour& col)
{
- m_backgroundColour = col ;
- SendMessage((HWND) GetHWND(), ZYZG_SETBKCOLOR, 0, RGB(col.Red(), col.Green(), col.Blue()));
+ if ( !wxControl::SetBackgroundColour(col) )
+ return FALSE;
+
+ SendMessage(GetHwnd(), ZYZG_SETBKCOLOR, 0, PALETTERGB(col.Red(), col.Green(), col.Blue()));
+
+ return TRUE;
}
/** zyz3d.c
*
- * DESCRIPTION:
+ * DESCRIPTION:
* This module contains functions for creating nifty 3D borders
* around controls like zYzGauge.
*
/** void FAR PASCAL Draw3DFaceFrame(HDC hdc, LPRECT rc, WORD wWidth)
*
- * DESCRIPTION:
+ * DESCRIPTION:
* This function draws a flat frame with the current button-face
* color.
*
/** void FAR PASCAL Draw3DRect(HDC, LPRECT, WORD, WORD)
*
- * DESCRIPTION:
+ * DESCRIPTION:
* Draws a 3D rectangle that is shaded. wFlags can be used to
* control how the rectangle looks.
*
/** void FAR PASCAL Draw3DLine(HDC hdc, WORD x, WORD y, WORD nLen,
*
- * DESCRIPTION:
+ * DESCRIPTION:
* Draws a 3D line that can be used to make a 3D box.
*
* ARGUMENTS:
** cjp */
void FAR PASCAL Draw3DLine(HDC hdc, WORD x, WORD y, WORD nLen,
- WORD wShadowWidth, WORD wFlags)
+ WORD wShadowWidth, WORD wFlags)
{
HBRUSH hOldBrush;
HPEN hOldPen;
Point[0].x = x;
Point[0].y = y;
- /* To do this we'll simply draw a polygon with four sides, using
+ /* To do this we'll simply draw a polygon with four sides, using
* the appropriate brush. I dare you to ask me why this isn't a
* switch/case!
*/
/* select 'dark' brush if 'in'--'light' for 'out' */
fDark = (wFlags & DRAW3D_IN) ? TRUE : FALSE;
}
-
+
/* well maybe it's for the right side? */
else if (wFlags & DRAW3D_RIGHTLINE)
{
else return;
/* select NULL_PEN for no borders */
- hOldPen = SelectObject(hdc, GetStockObject(NULL_PEN));
+ hOldPen = (HPEN) SelectObject(hdc, GetStockObject(NULL_PEN));
/* select the appropriate color for the fill */
if (fDark)
- hOldBrush = SelectObject(hdc, GetStockObject(GRAY_BRUSH));
+ hOldBrush = (HBRUSH) SelectObject(hdc, GetStockObject(GRAY_BRUSH));
else
- hOldBrush = SelectObject(hdc, GetStockObject(WHITE_BRUSH));
+ hOldBrush = (HBRUSH) SelectObject(hdc, GetStockObject(WHITE_BRUSH));
/* finally, draw the dern thing */
Polygon(hdc, (LPPOINT)&Point, 4);
/** zyzgauge.c
*
- * DESCRIPTION:
+ * DESCRIPTION:
* Yet another 'Gas Gauge Custom Control.' This control gives you
* a 'progress bar' class (named zYzGauge) for use in your applications.
* You can set the range, position, font, color, orientation, and 3d
/* get the includes we need */
-#ifndef __GNUWIN32__
+#if !defined(__GNUWIN32__) && !defined(__SALFORDC__)
#include <malloc.h>
#endif
#include <stdio.h>
/* static global variables */
-static char gszzYzGaugeClass[] = "zYzGauge";
-
+static wxChar gszzYzGaugeClass[] = wxT("zYzGauge");
+
/* window word position definitions */
#define ZYZG_WW_PZYZGAUGE 0
static DWORD rgbDefBkColor;
static BOOL fSupport3D;
-#if !defined(APIENTRY) // NT defines APIENTRY, 3.x not
+#if !defined(APIENTRY) // NT defines APIENTRY, 3.x not
#define APIENTRY FAR PASCAL
#endif
-
+
#ifdef __WIN32__
#define _EXPORT /**/
#else
/** BOOL FAR PASCAL gaugeInit(HINSTANCE hInstance)
*
- * DESCRIPTION:
+ * DESCRIPTION:
* Registers the window class for the zYzGauge control. Performs
* other initialization for the zYzGauge text control. This must
* be done before the zYzGauge control is used--or it will fail
static BOOL fRegistered = FALSE;
WNDCLASS wc;
HDC hdc;
-
+
/* assume already registered if not first instance */
if (fRegistered)
return (TRUE);
/* Get a DC to determine whether device is mono or not, and set
* default foreground/background colors as appropriate.
*/
- if ((hdc = CreateIC("DISPLAY", NULL, NULL, 0L)))
+ hdc = CreateIC(wxT("DISPLAY"), NULL, NULL, 0L) ;
+ if (hdc)
{
/* check for mono-display */
if ((GetDeviceCaps(hdc, BITSPIXEL) == 1) &&
}
/* good! we have color: blue foreground, white background */
- else
+ else
{
rgbDefTextColor = RGB(0, 0, 255);
rgbDefBkColor = RGB(255, 255, 255);
/** static void PASCAL gaugePaint(HWND hwnd, HDC hdc)
*
- * DESCRIPTION:
+ * DESCRIPTION:
* This function is responsible for painting the zYzGauge control.
*
* ARGUMENTS:
DWORD dwExtent;
RECT rc1, rc2;
HFONT hFont;
- char ach[ 6 ];
+ wxChar ach[ 6 ];
WORD dx, dy, wGomerX, wGomerY;
/* Win32s has no GetTextExtent(); let's try GetTextExtentPoint() instead,
* which needs a SIZE* parameter */
GetClientRect(hwnd, &rc1);
/* draw a black border on the _outside_ */
- FrameRect(hdc, &rc1, GetStockObject(BLACK_BRUSH));
+ FrameRect(hdc, &rc1, (HBRUSH) GetStockObject(BLACK_BRUSH));
/* we want to draw _just inside_ the black border */
InflateRect(&rc1, -1, -1);
if ((GetWindowLong(hwnd, GWL_STYLE) & ZYZGS_3D) && fSupport3D)
{
Draw3DRect(hdc, &rc1, pgauge->wWidth3D, DRAW3D_OUT);
- InflateRect(&rc1, ~(pgauge->wWidth3D), ~(pgauge->wWidth3D));
+ InflateRect(&rc1, ~(pgauge->wWidth3D), ~(pgauge->wWidth3D));
Draw3DFaceFrame(hdc, &rc1, pgauge->wWidthBezelFace);
- InflateRect(&rc1, ~(pgauge->wWidthBezelFace), ~(pgauge->wWidthBezelFace));
+ InflateRect(&rc1, ~(pgauge->wWidthBezelFace), ~(pgauge->wWidthBezelFace));
Draw3DRect(hdc, &rc1, pgauge->wWidth3D, DRAW3D_IN);
- InflateRect(&rc1, ~(pgauge->wWidth3D), ~(pgauge->wWidth3D));
+ InflateRect(&rc1, ~(pgauge->wWidth3D), ~(pgauge->wWidth3D));
/* draw a black border on the _inside_ */
- FrameRect(hdc, &rc1, GetStockObject(BLACK_BRUSH));
+ FrameRect(hdc, &rc1, (HBRUSH) GetStockObject(BLACK_BRUSH));
/* we want to draw _just inside_ the black border */
InflateRect(&rc1, -1, -1);
/* add all the other pixels into the border width */
Offset += (2 * pgauge->wWidth3D) + pgauge->wWidthBezelFace + 1;
}
-
+
/* dup--one rc for 'how much filled', one rc for 'how much empty' */
rc2 = rc1;
} /* switch () */
/* select the correct font */
- hFont = SelectObject(hdc, pgauge->hFont);
+ hFont = (HFONT) SelectObject(hdc, pgauge->hFont);
/* build up a string to blit out--ie the meaning of life: "42%" */
- wsprintf(ach, "%3d%%", (WORD)((DWORD)iPos * 100 / iRange));
+ wsprintf(ach, wxT("%3d%%"), (WORD)((DWORD)iPos * 100 / iRange));
/* Win32s has no GetTextExtent(); let's try GetTextExtentPoint() instead */
#if defined(__WIN32__)
GetTextExtentPoint(hdc, ach, wGomerX = lstrlen(ach), &size);
dwExtent = size.cx;
#else
dwExtent = GetTextExtent(hdc, ach, wGomerX = lstrlen(ach));
-#endif
+#endif
/* Draw the finished (ie the percent done) side of box. If
/* unselect the font */
SelectObject(hdc, hFont);
} /* gaugePaint() */
-
+
/** LRESULT FAR PASCAL gaugeWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
*
- * DESCRIPTION:
+ * DESCRIPTION:
* This is the control's window procedure. Its purpose is to handle
* special messages for this custom control.
*
* ZYZG_SETORIENTATION : Sets the orientation of the gauge. This
* can be one of the ZYZG_ORIENT_?? msgs.
*
- * ZYZG_GETORIENTATION : Gets the current orientation of the
+ * ZYZG_GETORIENTATION : Gets the current orientation of the
* gauge.
*
* ZYZG_SETPOSITION : Sets the current position of the gauge.
else
wParam = 1;
- InflateRect(&rc, ~(wParam), ~(wParam));
+ InflateRect(&rc, ~(wParam), ~(wParam));
InvalidateRect(hwnd, &rc, FALSE);
UpdateWindow(hwnd);
return (0L);
case WM_SETFONT:
/* if NULL hFont, use system font */
- if (!(hFont = (HFONT)wParam))
- hFont = GetStockObject(SYSTEM_FONT);
+ hFont = (HFONT)wParam ;
+ if (!hFont)
+ hFont = (HFONT) GetStockObject(SYSTEM_FONT);
pgauge->hFont = hFont;
/** EOF: zyzgauge.c **/
-#endif // USE_GAUGE
+#endif // wxUSE_GAUGE