+#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 )