+#include "wx/os2/private.h"
+
+static WXFARPROC fnWndProcGauge = (WXFARPROC)NULL;
+extern void wxAssociateWinWithHandle( HWND hWnd
+ ,wxWindowOS2* pWin
+ );
+
+IMPLEMENT_DYNAMIC_CLASS(wxGauge, wxGaugeBase)
+
+MRESULT EXPENTRY wxGaugeWndProc( HWND hWnd,
+ UINT uMessage,
+ MPARAM wParam,
+ MPARAM lParam )
+{
+ wxGauge* pGauge = (wxGauge *)::WinQueryWindowULong( hWnd
+ ,QWL_USER
+ );
+ HPS hPS;
+ RECTL vRect;
+ RECTL vRect2;
+ RECTL vRect3;
+ double dPixelToRange = 0.0;
+ double dRange = 0.0;
+
+ switch (uMessage )
+ {
+ case WM_PAINT:
+ hPS = ::WinBeginPaint( hWnd
+ ,NULLHANDLE
+ ,&vRect
+ );
+ if(hPS)
+ {
+ ::WinQueryWindowRect(hWnd, &vRect);
+ ::GpiCreateLogColorTable( hPS
+ ,0L
+ ,LCOLF_CONSECRGB
+ ,0L
+ ,(LONG)wxTheColourDatabase->m_nSize
+ ,(PLONG)wxTheColourDatabase->m_palTable
+ );
+ ::GpiCreateLogColorTable( hPS
+ ,0L
+ ,LCOLF_RGB
+ ,0L
+ ,0L
+ ,NULL
+ );
+ //
+ // Draw the guage box
+ //
+ LONG lColor = 0x00FFFFFF; // White
+ POINTL vPoint = {vRect.xLeft + 1, vRect.yBottom + 1};
+
+ ::GpiSetColor(hPS, lColor);
+ ::GpiMove(hPS, &vPoint);
+ vPoint.x = vRect.xRight - 1;
+ ::GpiLine(hPS, &vPoint);
+ vPoint.y = vRect.yTop - 1;
+ ::GpiLine(hPS, &vPoint);
+ lColor = 0x000C0C0C; // Darkish Grey to give depth feel
+ ::GpiSetColor(hPS, lColor);
+ vPoint.x = vRect.xLeft + 1;
+ ::GpiLine(hPS, &vPoint);
+ vPoint.y = vRect.yBottom + 1;
+ ::GpiLine(hPS, &vPoint);
+ vRect3.xLeft = vRect.xLeft + 2;
+ vRect3.xRight = vRect.xRight - 2;
+ vRect3.yTop = vRect.yTop - 2;
+ vRect3.yBottom = vRect.yBottom + 2;
+
+ if (pGauge->GetWindowStyleFlag() & wxGA_VERTICAL)
+ {
+ dRange = (double)(vRect3.yTop - vRect3.yBottom);
+ dPixelToRange = dRange/(double)pGauge->GetRange();
+ vRect2.yTop = (int)(pGauge->GetValue() * dPixelToRange);
+ vRect2.yBottom = vRect3.yBottom;
+ vRect2.xLeft = vRect3.xLeft;
+ vRect2.xRight = vRect3.xRight;
+ vRect3.yBottom = vRect2.yTop;
+ if (vRect3.yBottom <= 1)
+ vRect3.yBottom = 2;
+ ::WinFillRect(hPS, &vRect3, pGauge->GetBackgroundColour().GetPixel());
+ ::WinFillRect(hPS, &vRect2, pGauge->GetForegroundColour().GetPixel());
+ }
+ else
+ {
+ dRange = (double)(vRect3.xRight - vRect3.xLeft);
+ dPixelToRange = dRange/(double)pGauge->GetRange();
+ vRect2.yTop = vRect3.yTop;
+ vRect2.yBottom = vRect3.yBottom;
+ vRect2.xLeft = vRect3.xLeft;
+ vRect2.xRight = (int)(pGauge->GetValue() * dPixelToRange);
+ vRect3.xLeft = vRect2.xRight;
+ if (vRect3.xLeft <= 1)
+ vRect3.xLeft = 2;
+ ::WinFillRect(hPS, &vRect3, pGauge->GetBackgroundColour().GetPixel());
+ ::WinFillRect(hPS, &vRect2, pGauge->GetForegroundColour().GetPixel());
+ }
+ ::WinEndPaint(hPS);
+ }
+ }
+ return (fnWndProcGauge( hWnd
+ ,(ULONG)uMessage
+ ,(MPARAM)wParam
+ ,(MPARAM)lParam
+ )
+ );
+} // end of wxGaugeWndProc
+
+bool wxGauge::Create( wxWindowOS2* pParent,
+ wxWindowID vId,
+ int nRange,
+ const wxPoint& rPos,
+ const wxSize& rSize,
+ long lStyle,
+ const wxValidator& rValidator,
+ const wxString& rsName )