+ PUSERBUTTON pUser = (PUSERBUTTON)pItem;
+ bool bAutoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0;
+
+ if (!pUser)
+ return FALSE;
+
+ wxBitmap* pBitmap;
+ RECTL vRect;
+ bool bIsSelected = pUser->fsState & BDS_HILITED;
+ wxClientDC vDc(this);
+
+ if (bIsSelected && m_bmpSelected.Ok())
+ pBitmap = &m_bmpSelected;
+ else if ((pUser->fsState & BDS_DEFAULT) && m_bmpFocus.Ok())
+ pBitmap = &m_bmpFocus;
+ else if ((pUser->fsState & BDS_DISABLED) && m_bmpDisabled.Ok())
+ pBitmap = &m_bmpDisabled;
+ else
+ pBitmap = &m_bmpNormal;
+
+ if (!pBitmap->Ok() )
+ return FALSE;
+
+
+ //
+ // Centre the bitmap in the control area
+ //
+ int nX = 0;
+ int nY = 0;
+ int nX1 = 0;
+ int nY1 = 0;
+ int nWidth = vDc.m_vRclPaint.xRight - vDc.m_vRclPaint.xLeft;
+ int nHeight = vDc.m_vRclPaint.xRight - vDc.m_vRclPaint.xLeft;
+ int nBmpWidth = pBitmap->GetWidth();
+ int nBmpHeight = pBitmap->GetHeight();
+
+ nX1 = nX + (nWidth - nBmpWidth) / 2;
+ nY1 = nX + (nHeight - nBmpHeight) / 2;
+
+ if (bIsSelected && bAutoDraw)
+ {
+ nX1++;
+ nY1++;
+ }
+
+ //
+ // Draw the button face
+ //
+ {
+ DrawFace( vDc
+ ,bIsSelected
+ );
+ }
+
+ //
+ // Draw the bitmap
+ //
+ vDc.DrawBitmap( *pBitmap
+ ,nX1
+ ,nY1
+ ,TRUE
+ );
+
+ //
+ // Draw focus / disabled state, if auto-drawing
+ //
+ if ((pUser->fsState == BDS_DISABLED) && bAutoDraw)
+ {
+ DrawButtonDisable( vDc
+ ,*pBitmap
+ );
+ }
+ else if ((pUser->fsState == BDS_DEFAULT) && bAutoDraw)
+ {
+ DrawButtonFocus(vDc);
+ }
+ return TRUE;
+} // end of wxBitmapButton::OS2OnDraw
+
+void wxBitmapButton::DrawFace (
+ wxClientDC& rDC
+, bool bSel
+)
+{
+ //
+ // Set up drawing colors
+ //
+ wxPen vHiLitePen(wxColour(255, 255, 255), 2, wxSOLID); // White
+ wxPen vDarkShadowPen(wxColour(85, 85, 85), 2, wxSOLID);
+ wxColour vFaceColor(wxColour(204, 204, 204)); // Light Grey
+
+ //
+ // Draw the main button face
+ //
+ ::WinFillRect(rDC.GetHPS(), &rDC.m_vRclPaint, vFaceColor.GetPixel());
+
+ //
+ // Draw the border
+ //
+ rDC.SetPen(bSel ? vDarkShadowPen : vHiLitePen);
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yTop - 1
+ ,rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yTop - 1
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yTop - 1
+ ,rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yBottom + 1
+ );
+
+ rDC.SetPen(bSel ? vHiLitePen : vDarkShadowPen);
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yBottom + 1
+ ,rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yBottom + 1
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yTop - 1
+ ,rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yBottom + 1
+ );
+
+} // end of wxBitmapButton::DrawFace
+
+void wxBitmapButton::DrawButtonFocus (
+ wxClientDC& rDC
+)
+{
+ wxPen vBlackPen(wxColour(0, 0, 0), 2, wxSOLID);
+
+ //
+ // Draw a thick black line around the outside of the button
+ //
+ rDC.SetPen(vBlackPen);
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yTop
+ ,rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yTop
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yTop
+ ,rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yBottom
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yBottom
+ ,rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yBottom
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yBottom
+ ,rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yTop
+ );
+} // end of wxBitmapButton::DrawButtonFocus
+
+void wxBitmapButton::DrawButtonDisable(
+ wxClientDC& rDC
+, wxBitmap& rBmp
+)
+{
+ wxPen vGreyPen(wxColour(128, 128, 128), 2, wxSOLID);
+
+ //
+ // Draw a thick black line around the outside of the button
+ //
+ rDC.SetPen(vGreyPen);
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yTop
+ ,rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yTop
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yTop
+ ,rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yBottom
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xRight
+ ,rDC.m_vRclPaint.yBottom
+ ,rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yBottom
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yBottom
+ ,rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yTop
+ );
+ wxDisableBitmap(rBmp, vGreyPen.GetColour().GetPixel());
+} // end of wxBitmapButton::DrawButtonDisable
+
+void wxBitmapButton::SetDefault()
+{
+ wxButton::SetDefault();