class WXDLLEXPORT wxBitmapButton: public wxBitmapButtonBase
{
- DECLARE_DYNAMIC_CLASS(wxBitmapButton)
- public:
- inline wxBitmapButton() { m_marginX = wxDEFAULT_BUTTON_MARGIN; m_marginY = wxDEFAULT_BUTTON_MARGIN; }
- inline wxBitmapButton(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW,
+public:
+ inline wxBitmapButton()
+ {
+ m_marginX = wxDEFAULT_BUTTON_MARGIN;
+ m_marginY = wxDEFAULT_BUTTON_MARGIN;
+ }
+ inline wxBitmapButton( wxWindow* pParent
+ ,wxWindowID vId
+ ,const wxBitmap& rBitmap
+ ,const wxPoint& rPos = wxDefaultPosition
+ ,const wxSize& rSize = wxDefaultSize
+ ,long lStyle = wxBU_AUTODRAW
#if wxUSE_VALIDATORS
- const wxValidator& validator = wxDefaultValidator,
+ ,const wxValidator& rValidator = wxDefaultValidator
#endif
- const wxString& name = wxButtonNameStr)
- {
- Create(parent, id, bitmap, pos, size, style, validator, name);
- }
-
- bool Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW,
+ ,const wxString& rsName = wxButtonNameStr
+ )
+ {
+ Create( pParent
+ ,vId
+ ,rBitmap
+ ,rPos
+ ,rSize
+ ,lStyle
#if wxUSE_VALIDATORS
- const wxValidator& validator = wxDefaultValidator,
+ ,rValidator
#endif
- const wxString& name = wxButtonNameStr);
+ ,rsName
+ );
+ }
- virtual void SetLabel(const wxBitmap& bitmap)
- {
- SetBitmapLabel(bitmap);
- }
+ bool Create( wxWindow* pParent
+ ,wxWindowID vId
+ ,const wxBitmap& rBitmap
+ ,const wxPoint& rPos = wxDefaultPosition
+ ,const wxSize& rSize = wxDefaultSize
+ ,long lStyle = wxBU_AUTODRAW
+#if wxUSE_VALIDATORS
+ ,const wxValidator& rValidator = wxDefaultValidator
+#endif
+ ,const wxString& rsName = wxButtonNameStr
+ );
- virtual void SetBitmapLabel(const wxBitmap& bitmap);
+ virtual void SetLabel(const wxBitmap& rBitmap)
+ {
+ SetBitmapLabel(rBitmap);
+ }
#if WXWIN_COMPATIBILITY
- wxBitmap *GetBitmap() const { return (wxBitmap *) & m_buttonBitmap; }
+ wxBitmap* GetBitmap(void) const
+ {
+ return (wxBitmap *)&m_buttonBitmap;
+ }
#endif
- inline wxBitmap& GetBitmapLabel() const { return (wxBitmap&) m_buttonBitmap; }
- inline wxBitmap& GetBitmapSelected() const { return (wxBitmap&) m_buttonBitmapSelected; }
- inline wxBitmap& GetBitmapFocus() const { return (wxBitmap&) m_buttonBitmapFocus; }
- inline wxBitmap& GetBitmapDisabled() const { return (wxBitmap&) m_buttonBitmapDisabled; }
+ //
+ // Implementation
+ //
+ virtual void SetDefault();
+ virtual bool OS2OnDraw(WXDRAWITEMSTRUCT* pItem);
- inline void SetBitmapSelected(const wxBitmap& sel) { m_buttonBitmapSelected = sel; };
- inline void SetBitmapFocus(const wxBitmap& focus) { m_buttonBitmapFocus = focus; };
- inline void SetBitmapDisabled(const wxBitmap& disabled) { m_buttonBitmapDisabled = disabled; };
+private:
- inline void SetMargins(int x, int y) { m_marginX = x; m_marginY = y; }
- inline int GetMarginX() { return m_marginX; }
- inline int GetMarginY() { return m_marginY; }
+ virtual void DrawFace( wxClientDC& rDC
+ ,bool bSel
+ );
+ virtual void DrawButtonFocus(wxClientDC& rDC);
+ virtual void DrawButtonDisable( wxClientDC& rDC
+ ,wxBitmap& rBmp
+ );
+ DECLARE_DYNAMIC_CLASS(wxBitmapButton)
- virtual void SetDefault();
-// virtual bool OS2OnDraw(WXDRAWITEMSTRUCT *item);
- virtual void DrawFace( WXHDC dc, int left, int top, int right, int bottom, bool sel );
- virtual void DrawButtonFocus( WXHDC dc, int left, int top, int right, int bottom, bool sel );
- virtual void DrawButtonDisable( WXHDC dc, int left, int top, int right, int bottom, bool with_marg );
+ virtual void SetLabel(const wxString& rsString)
+ {
+ wxButton::SetLabel(rsString);
+ }
+}; // end of CLASS wxBitmapButton
- protected:
- wxBitmap m_buttonBitmap;
- wxBitmap m_buttonBitmapSelected;
- wxBitmap m_buttonBitmapFocus;
- wxBitmap m_buttonBitmapDisabled;
- int m_marginX;
- int m_marginY;
-private:
- virtual void SetLabel(const wxString& string)
- { wxButton::SetLabel(string); };
-};
+#endif // _WX_BMPBUTTN_H_
-#endif
- // _WX_BMPBUTTN_H_
class WXDLLEXPORT wxFont;
class WXDLLEXPORT wxWindow;
class WXDLLEXPORT wxString;
+class WXDLLEXPORT wxBitmap;
// ---------------------------------------------------------------------------
// private constants
);
-WXDLLEXPORT extern bool wxCheckWindowWndProc( WXHWND hWnd
- ,WXFARPROC fnWndProc
+WXDLLEXPORT extern bool wxCheckWindowWndProc( WXHWND hWnd
+ ,WXFARPROC fnWndProc
);
+WXDLLEXPORT extern wxBitmap wxDisableBitmap( const wxBitmap& rBmp
+ ,long lColor
+ );
+
+#endif // _WX_PRIVATE_H_
-#endif
- // _WX_PRIVATE_H_
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#if wxUSE_BMPBUTTON
+
#ifndef WX_PRECOMP
#include "wx/bmpbuttn.h"
#endif
#define BUTTON_HEIGHT_FACTOR (EDIT_CONTROL_FACTOR * 1.1)
-bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap,
- const wxPoint& pos,
- const wxSize& size, long style,
+bool wxBitmapButton::Create(
+ wxWindow* pParent
+, wxWindowID vId
+, const wxBitmap& rBitmap
+, const wxPoint& rPos
+, const wxSize& rSize
+, long lStyle
#if wxUSE_VALIDATORS
- const wxValidator& validator,
+, const wxValidator& rValidator
#endif
- const wxString& name)
+, const wxString& rsName
+)
{
- m_buttonBitmap = bitmap;
- SetName(name);
+ m_bmpNormal = rBitmap;
+ SetName(rsName);
#if wxUSE_VALIDATORS
- SetValidator(validator);
+ SetValidator(rValidator);
#endif
- parent->AddChild(this);
+ pParent->AddChild(this);
- m_backgroundColour = parent->GetBackgroundColour() ;
- m_foregroundColour = parent->GetForegroundColour() ;
- m_windowStyle = style;
- m_marginX = 0;
- m_marginY = 0;
+ m_backgroundColour = pParent->GetBackgroundColour() ;
+ m_foregroundColour = pParent->GetForegroundColour() ;
+ m_windowStyle = lStyle;
- if ( style & wxBU_AUTODRAW )
+ if (lStyle & wxBU_AUTODRAW)
{
m_marginX = wxDEFAULT_BUTTON_MARGIN;
m_marginY = wxDEFAULT_BUTTON_MARGIN;
}
- int x = pos.x;
- int y = pos.y;
- int width = size.x;
- int height = size.y;
+ int nX = rPos.x;
+ int nY = rPos.y;
+ int nWidth = rSize.x;
+ int nHeight = rSize.y;
- if (id == -1)
+ if (vId == -1)
m_windowId = NewControlId();
else
- m_windowId = id;
-
- if ( width == -1 && bitmap.Ok())
- width = bitmap.GetWidth() + 2*m_marginX;
-
- if ( height == -1 && bitmap.Ok())
- height = bitmap.GetHeight() + 2*m_marginY;
-
- // TODO:
- /*
- m_hWnd = (WXHWND)CreateWindowEx
- (
- 0,
- wxT("BUTTON"),
- wxT(""),
- WS_VISIBLE | WS_TABSTOP | WS_CHILD | BS_OWNERDRAW ,
- 0, 0, 0, 0,
- GetWinHwnd(parent),
- (HMENU)m_windowId,
- wxGetInstance(),
- NULL
- );
- */
- // Subclass again for purposes of dialog editing mode
+ m_windowId = vId;
+
+ if (nWidth == -1 && rBitmap.Ok())
+ nWidth = rBitmap.GetWidth() + 2 * m_marginX;
+
+ if (nHeight == -1 && rBitmap.Ok())
+ nHeight = rBitmap.GetHeight() + 2 * m_marginY;
+
+ ULONG ulOS2Style = WS_VISIBLE | WS_TABSTOP | BS_USERBUTTON;
+
+ if (m_windowStyle & wxCLIP_SIBLINGS)
+ ulOS2Style |= WS_CLIPSIBLINGS;
+
+ m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent)
+ ,WC_BUTTON
+ ,wxT("")
+ ,ulOS2Style
+ ,0, 0, 0, 0
+ ,GetHwndOf(pParent)
+ ,HWND_TOP
+ ,m_windowId
+ ,NULL
+ ,NULL
+ );
+
+ //
+ //Subclass again for purposes of dialog editing mode
+ //
SubclassWin(m_hWnd);
+ SetFont(*wxSMALL_FONT);
+ SetSize( nX
+ ,nY
+ ,nWidth
+ ,nHeight
+ );
+ return TRUE;
+} // end of wxBitmapButton::Create
- SetFont(parent->GetFont()) ;
-
- SetSize(x, y, width, height);
-
- return FALSE;
-}
-
-void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
+bool wxBitmapButton::OS2OnDraw(
+ WXDRAWITEMSTRUCT* pItem
+)
{
- m_buttonBitmap = bitmap;
-}
+ PUSERBUTTON pUser = (PUSERBUTTON)pItem;
+ bool bAutoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0;
-// TODO:
-/*
-bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item)
-{
-#if defined(__WIN95__)
- long style = GetWindowLong((HWND) GetHWND(), GWL_STYLE);
- if (style & BS_BITMAP)
- {
- // Let default procedure draw the bitmap, which is defined
- // in the Windows resource.
+ if (!pUser)
return FALSE;
- }
-#endif
- LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT) item;
-
- wxBitmap* bitmap = &m_buttonBitmap;
-
- UINT state = lpDIS->itemState;
- if ((state & ODS_SELECTED) && m_buttonBitmapSelected.Ok())
- bitmap = &m_buttonBitmapSelected;
- else if ((state & ODS_FOCUS) && m_buttonBitmapFocus.Ok())
- bitmap = &m_buttonBitmapFocus;
- else if ((state & ODS_DISABLED) && m_buttonBitmapDisabled.Ok())
- bitmap = &m_buttonBitmapDisabled;
-
- if ( !bitmap->Ok() )
- return FALSE;
-
- HDC hDC = lpDIS->hDC;
- HDC memDC = ::CreateCompatibleDC(hDC);
-
- HBITMAP old = (HBITMAP) ::SelectObject(memDC, (HBITMAP) bitmap->GetHBITMAP());
+ 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 (!old)
+ if (!pBitmap->Ok() )
return FALSE;
- int x = lpDIS->rcItem.left;
- int y = lpDIS->rcItem.top;
- int width = lpDIS->rcItem.right - x;
- int height = lpDIS->rcItem.bottom - y;
-
- // Draw the face, if auto-drawing
- if ( GetWindowStyleFlag() & wxBU_AUTODRAW )
- DrawFace((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom,
- ((state & ODS_SELECTED) == ODS_SELECTED));
+ //
// Centre the bitmap in the control area
- int x1 = (int) (x + ((width - bitmap->GetWidth()) / 2));
- int y1 = (int) (y + ((height - bitmap->GetHeight()) / 2));
-
- if ( (state & ODS_SELECTED) && (GetWindowStyleFlag() & wxBU_AUTODRAW) )
+ //
+ 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)
{
- x1 ++;
- y1 ++;
+ nX1++;
+ nY1++;
}
- ::BitBlt(hDC, x1, y1, bitmap->GetWidth(), bitmap->GetHeight(), memDC, 0, 0, SRCCOPY);
-
- if ( (state & ODS_DISABLED) && (GetWindowStyleFlag() & wxBU_AUTODRAW) )
- DrawButtonDisable( (WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, TRUE ) ;
- else if ( (state & ODS_FOCUS) && (GetWindowStyleFlag() & wxBU_AUTODRAW) )
- DrawButtonFocus( (WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, ((state & ODS_SELECTED) == ODS_SELECTED));
-
- ::SelectObject(memDC, old);
-
- ::DeleteDC(memDC);
-
- return TRUE;
-}
-*/
+ //
+ // Draw the button face
+ //
+ {
+ DrawFace( vDc
+ ,bIsSelected
+ );
+ }
-void wxBitmapButton::DrawFace( WXHDC dc, int left, int top, int right, int bottom, bool sel )
-{
-// TODO:
-/*
- HPEN oldp;
- HBRUSH oldb ;
-
- HPEN penBorder;
- HPEN penLight;
- HPEN penShadow;
- HBRUSH brushFace;
- COLORREF ms_color;
-
- ms_color = GetSysColor(COLOR_WINDOWFRAME) ;
- penBorder = CreatePen(PS_SOLID,0,ms_color) ;
-
- ms_color = GetSysColor(COLOR_BTNSHADOW) ;
- penShadow = CreatePen(PS_SOLID,0,ms_color) ;
-
- ms_color = GetSysColor(COLOR_BTNHIGHLIGHT) ;
- penLight = CreatePen(PS_SOLID,0,ms_color) ;
-
- ms_color = GetSysColor(COLOR_BTNFACE) ;
- brushFace = CreateSolidBrush(ms_color) ;
-
- oldp = (HPEN) SelectObject( (HDC) dc, GetStockObject( NULL_PEN ) ) ;
- oldb = (HBRUSH) SelectObject( (HDC) dc, brushFace ) ;
- Rectangle( (HDC) dc, left, top, right, bottom ) ;
- SelectObject( (HDC) dc, penBorder) ;
- MoveToEx((HDC) dc,left+1,top,NULL);LineTo((HDC) dc,right-1,top);
- MoveToEx((HDC) dc,left,top+1,NULL);LineTo((HDC) dc,left,bottom-1);
- MoveToEx((HDC) dc,left+1,bottom-1,NULL);LineTo((HDC) dc,right-1,bottom-1);
- MoveToEx((HDC) dc,right-1,top+1,NULL);LineTo((HDC) dc,right-1,bottom-1);
-
- SelectObject( (HDC) dc, penShadow) ;
- if (sel)
+ //
+ // Draw the bitmap
+ //
+ vDc.DrawBitmap( *pBitmap
+ ,nX1
+ ,nY1
+ ,TRUE
+ );
+
+ //
+ // Draw focus / disabled state, if auto-drawing
+ //
+ if ((pUser->fsState == BDS_DISABLED) && bAutoDraw)
{
- MoveToEx((HDC) dc,left+1 ,bottom-2 ,NULL) ;
- LineTo((HDC) dc, left+1 ,top+1) ;
- LineTo((HDC) dc, right-2 ,top+1) ;
+ DrawButtonDisable( vDc
+ ,*pBitmap
+ );
}
- else
+ else if ((pUser->fsState == BDS_DEFAULT) && bAutoDraw)
{
- MoveToEx((HDC) dc,left+1 ,bottom-2 ,NULL) ;
- LineTo((HDC) dc, right-2 ,bottom-2) ;
- LineTo((HDC) dc, right-2 ,top) ;
- MoveToEx((HDC) dc,left+2 ,bottom-3 ,NULL) ;
- LineTo((HDC) dc, right-3 ,bottom-3) ;
- LineTo((HDC) dc, right-3 ,top+1) ;
-
- SelectObject( (HDC) dc, penLight) ;
-
- MoveToEx((HDC) dc,left+1 ,bottom-2 ,NULL) ;
- LineTo((HDC) dc, left+1 ,top+1) ;
- LineTo((HDC) dc, right-2 ,top+1) ;
+ DrawButtonFocus(vDc);
}
- SelectObject((HDC) dc,oldp) ;
- SelectObject((HDC) dc,oldb) ;
-
- DeleteObject(penBorder);
- DeleteObject(penLight);
- DeleteObject(penShadow);
- DeleteObject(brushFace);
-*/
-}
-
-#define FOCUS_MARGIN 6
+ return TRUE;
+} // end of wxBitmapButton::OS2OnDraw
-void wxBitmapButton::DrawButtonFocus( WXHDC dc, int left, int top, int right, int bottom, bool sel )
+void wxBitmapButton::DrawFace (
+ wxClientDC& rDC
+, bool bSel
+)
{
- // TODO:
-/*
- RECT rect;
- rect.left = left;
- rect.top = top;
- rect.right = right;
- rect.bottom = bottom;
- InflateRect( &rect, - FOCUS_MARGIN, - FOCUS_MARGIN ) ;
- if ( sel )
- OffsetRect( &rect, 1, 1 ) ;
- DrawFocusRect( (HDC) dc, &rect ) ;
-*/
-}
-
-// extern HBRUSH wxDisableButtonBrush;
-
-void wxBitmapButton::DrawButtonDisable( WXHDC dc, int left, int top, int right, int bottom, bool with_marg )
+ //
+ // Set up drawing colors
+ //
+ wxPen vHiLitePen(wxColour(255, 255, 255), 1, wxSOLID); // White
+ wxPen vLitePen(wxColour(223, 223, 223), 1, wxSOLID); // Very Light Grey
+ wxPen vShadowPen(wxColour(191, 191, 191), 1, wxSOLID); // Medium Grey
+ wxPen vDarkShadowPen(wxColour(128, 128, 128), 1, 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
+ ,rDC.m_vRclPaint.yTop
+ ,rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yTop
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yTop + 1
+ ,rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yBottom - 1
+ );
+
+ rDC.SetPen(bSel ? vShadowPen : vLitePen);
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yTop + 1
+ ,rDC.m_vRclPaint.xRight - 2
+ ,rDC.m_vRclPaint.yTop + 1
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yTop + 2
+ ,rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yBottom - 2
+ );
+
+ rDC.SetPen(bSel ? vLitePen : vShadowPen);
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
+ ,rDC.m_vRclPaint.yBottom - 2
+ ,rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yBottom - 2
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xRight - 2
+ ,rDC.m_vRclPaint.yBottom - 3
+ ,rDC.m_vRclPaint.xRight - 2
+ ,rDC.m_vRclPaint.yTop
+ );
+
+ rDC.SetPen(bSel ? vDarkShadowPen : vHiLitePen);
+ rDC.DrawLine( rDC.m_vRclPaint.xLeft
+ ,rDC.m_vRclPaint.yBottom - 1
+ ,rDC.m_vRclPaint.xRight + 2
+ ,rDC.m_vRclPaint.yBottom - 1
+ );
+ rDC.DrawLine( rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yBottom - 2
+ ,rDC.m_vRclPaint.xRight - 1
+ ,rDC.m_vRclPaint.yTop - 1
+ );
+} // end of wxBitmapButton::DrawFace
+
+void wxBitmapButton::DrawButtonFocus (
+ wxClientDC& rDC
+)
{
-// TODO:
-/*
- HBRUSH old = (HBRUSH) SelectObject( (HDC) dc, wxDisableButtonBrush ) ;
-
- if ( with_marg )
- ::PatBlt( (HDC) dc, left + m_marginX, top + m_marginY,
- right - 2 * m_marginX, bottom - 2 * m_marginY,
-#ifdef __SALFORDC__
- 0xfa0089L ) ;
-#else
- 0xfa0089UL ) ;
-#endif
- else ::PatBlt( (HDC) dc, left, top, right, bottom,
-#ifdef __SALFORDC__
- 0xfa0089L ) ;
-#else
- 0xfa0089UL ) ;
-#endif
- ::SelectObject( (HDC) dc, old ) ;
-*/
-}
+ 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();
}
+
+#endif // ndef for wxUSE_BMPBUTTON
+
);
break;
+ case wxSYS_COLOUR_BTNDARKSHADOW:
+ vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
+ ,SYSCLR_BUTTONDARK
+ ,0L
+ );
+ vCol.Set( GetRValue(vRef)
+ ,GetGValue(vRef)
+ ,GetBValue(vRef)
+ );
+ break;
+
case wxSYS_COLOUR_MENUBAR:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_MENU
bool wxToolBar::m_bInitialized = FALSE;
-// ---------------------------------------------------------------------------
-// Helper for taking a regular bitmap and giving it a disabled look
-// ---------------------------------------------------------------------------
-wxBitmap wxDisableBitmap(
- const wxBitmap& rBmp
-, long lColor
-)
-{
- wxMask* pMask = rBmp.GetMask();
-
- if (!pMask)
- return(wxNullBitmap);
-
- DEVOPENSTRUC vDop = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
- SIZEL vSize = {0, 0};
- HDC hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE);
- HPS hPS = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIA_ASSOC);
- BITMAPINFOHEADER2 vHeader;
- BITMAPINFO2 vInfo;
- ERRORID vError;
- wxString sError;
- HBITMAP hBitmap = (HBITMAP)rBmp.GetHBITMAP();
- HBITMAP hOldBitmap = NULLHANDLE;
- HBITMAP hOldMask = NULLHANDLE;
- HBITMAP hMask = (HBITMAP)rBmp.GetMask()->GetMaskBitmap();
- unsigned char* pucBits; // buffer that will contain the bitmap data
- unsigned char* pucData; // pointer to use to traverse bitmap data
- unsigned char* pucBitsMask; // buffer that will contain the mask data
- unsigned char* pucDataMask; // pointer to use to traverse mask data
- LONG lScans = 0L;
- LONG lScansSet = 0L;
- bool bpp16 = (wxDisplayDepth() == 16);
-
- memset(&vHeader, '\0', 16);
- vHeader.cbFix = 16;
-
- memset(&vInfo, '\0', 16);
- vInfo.cbFix = 16;
- vInfo.cx = (ULONG)rBmp.GetWidth();
- vInfo.cy = (ULONG)rBmp.GetHeight();
- vInfo.cPlanes = 1;
- vInfo.cBitCount = 24; // Set to desired count going in
-
- //
- // Create the buffers for data....all wxBitmaps are 24 bit internally
- //
- int nBytesPerLine = rBmp.GetWidth() * 3;
- int nSizeDWORD = sizeof(DWORD);
- int nLineBoundary = nBytesPerLine % nSizeDWORD;
- int nPadding = 0;
- int i;
- int j;
-
- //
- // Bitmap must be ina double-word alligned address so we may
- // have some padding to worry about
- //
- if (nLineBoundary > 0)
- {
- nPadding = nSizeDWORD - nLineBoundary;
- nBytesPerLine += nPadding;
- }
- pucBits = (unsigned char *)malloc(nBytesPerLine * rBmp.GetHeight());
- memset(pucBits, '\0', (nBytesPerLine * rBmp.GetHeight()));
- pucBitsMask = (unsigned char *)malloc(nBytesPerLine * rBmp.GetHeight());
- memset(pucBitsMask, '\0', (nBytesPerLine * rBmp.GetHeight()));
-
- //
- // Extract the bitmap and mask data
- //
- if ((hOldBitmap = ::GpiSetBitmap(hPS, hBitmap)) == HBM_ERROR)
- {
- vError = ::WinGetLastError(vHabmain);
- sError = wxPMErrorToStr(vError);
- }
- ::GpiQueryBitmapInfoHeader(hBitmap, &vHeader);
- vInfo.cBitCount = 24;
- if ((lScans = ::GpiQueryBitmapBits( hPS
- ,0L
- ,(LONG)rBmp.GetHeight()
- ,(PBYTE)pucBits
- ,&vInfo
- )) == GPI_ALTERROR)
- {
- vError = ::WinGetLastError(vHabmain);
- sError = wxPMErrorToStr(vError);
- }
- if ((hOldMask = ::GpiSetBitmap(hPS, hMask)) == HBM_ERROR)
- {
- vError = ::WinGetLastError(vHabmain);
- sError = wxPMErrorToStr(vError);
- }
- ::GpiQueryBitmapInfoHeader(hMask, &vHeader);
- vInfo.cBitCount = 24;
- if ((lScans = ::GpiQueryBitmapBits( hPS
- ,0L
- ,(LONG)rBmp.GetHeight()
- ,(PBYTE)pucBitsMask
- ,&vInfo
- )) == GPI_ALTERROR)
- {
- vError = ::WinGetLastError(vHabmain);
- sError = wxPMErrorToStr(vError);
- }
- if (( hMask = ::GpiSetBitmap(hPS, hOldMask)) == HBM_ERROR)
- {
- vError = ::WinGetLastError(vHabmain);
- sError = wxPMErrorToStr(vError);
- }
- pucData = pucBits;
- pucDataMask = pucBitsMask;
-
- //
- // Get the mask value
- //
- for (i = 0; i < rBmp.GetHeight(); i++)
- {
- for (j = 0; j < rBmp.GetWidth(); j++)
- {
- // Byte 1
- if (bpp16 && *pucDataMask == 0xF8) // 16 bit display gobblygook
- {
- *pucData = 0x7F;
- pucData++;
- }
- else if (*pucDataMask == 0xFF) // set to grey
- {
- *pucData = 0x7F;
- pucData++;
- }
- else
- {
- *pucData = ((unsigned char)(lColor >> 16));
- pucData++;
- }
-
- // Byte 2
- if (bpp16 && *(pucDataMask + 1) == 0xFC) // 16 bit display gobblygook
- {
- *pucData = 0x7F;
- pucData++;
- }
- else if (*(pucDataMask + 1) == 0xFF) // set to grey
- {
- *pucData = 0x7F;
- pucData++;
- }
- else
- {
- *pucData = ((unsigned char)(lColor >> 8));
- pucData++;
- }
-
- // Byte 3
- if (bpp16 && *(pucDataMask + 2) == 0xF8) // 16 bit display gobblygook
- {
- *pucData = 0x7F;
- pucData++;
- }
- else if (*(pucDataMask + 2) == 0xFF) // set to grey
- {
- *pucData = 0x7F;
- pucData++;
- }
- else
- {
- *pucData = ((unsigned char)lColor);
- pucData++;
- }
- pucDataMask += 3;
- }
- for (j = 0; j < nPadding; j++)
- {
- pucData++;
- pucDataMask++;
- }
- }
-
- //
- // Create a new bitmap and set the modified bits
- //
- wxBitmap vNewBmp( rBmp.GetWidth()
- ,rBmp.GetHeight()
- ,24
- );
- HBITMAP hNewBmp = (HBITMAP)vNewBmp.GetHBITMAP();
-
- if ((hOldBitmap = ::GpiSetBitmap(hPS, hNewBmp)) == HBM_ERROR)
- {
- vError = ::WinGetLastError(vHabmain);
- sError = wxPMErrorToStr(vError);
- }
- if ((lScansSet = ::GpiSetBitmapBits( hPS
- ,0L
- ,(LONG)rBmp.GetHeight()
- ,(PBYTE)pucBits
- ,&vInfo
- )) == GPI_ALTERROR)
-
- {
- vError = ::WinGetLastError(vHabmain);
- sError = wxPMErrorToStr(vError);
- }
- wxMask* pNewMask;
-
- pNewMask = new wxMask(pMask->GetMaskBitmap());
- vNewBmp.SetMask(pNewMask);
- free(pucBits);
- ::GpiSetBitmap(hPS, NULLHANDLE);
- ::GpiDestroyPS(hPS);
- ::DevCloseDC(hDC);
- if (vNewBmp.Ok())
- return(vNewBmp);
- return(wxNullBitmap);
-} // end of wxDisableBitmap
-
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
}
::WinSetPresParam(hWnd, PP_FONTNAMESIZE, strlen(zFont) + 1, (PVOID)zFont);
} // end of wxOS2SetFont
+
+// ---------------------------------------------------------------------------
+// Helper for taking a regular bitmap and giving it a disabled look
+// ---------------------------------------------------------------------------
+wxBitmap wxDisableBitmap(
+ const wxBitmap& rBmp
+, long lColor
+)
+{
+ wxMask* pMask = rBmp.GetMask();
+
+ if (!pMask)
+ return(wxNullBitmap);
+
+ DEVOPENSTRUC vDop = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
+ SIZEL vSize = {0, 0};
+ HDC hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE);
+ HPS hPS = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIA_ASSOC);
+ BITMAPINFOHEADER2 vHeader;
+ BITMAPINFO2 vInfo;
+ ERRORID vError;
+ wxString sError;
+ HBITMAP hBitmap = (HBITMAP)rBmp.GetHBITMAP();
+ HBITMAP hOldBitmap = NULLHANDLE;
+ HBITMAP hOldMask = NULLHANDLE;
+ HBITMAP hMask = (HBITMAP)rBmp.GetMask()->GetMaskBitmap();
+ unsigned char* pucBits; // buffer that will contain the bitmap data
+ unsigned char* pucData; // pointer to use to traverse bitmap data
+ unsigned char* pucBitsMask; // buffer that will contain the mask data
+ unsigned char* pucDataMask; // pointer to use to traverse mask data
+ LONG lScans = 0L;
+ LONG lScansSet = 0L;
+ bool bpp16 = (wxDisplayDepth() == 16);
+
+ memset(&vHeader, '\0', 16);
+ vHeader.cbFix = 16;
+
+ memset(&vInfo, '\0', 16);
+ vInfo.cbFix = 16;
+ vInfo.cx = (ULONG)rBmp.GetWidth();
+ vInfo.cy = (ULONG)rBmp.GetHeight();
+ vInfo.cPlanes = 1;
+ vInfo.cBitCount = 24; // Set to desired count going in
+
+ //
+ // Create the buffers for data....all wxBitmaps are 24 bit internally
+ //
+ int nBytesPerLine = rBmp.GetWidth() * 3;
+ int nSizeDWORD = sizeof(DWORD);
+ int nLineBoundary = nBytesPerLine % nSizeDWORD;
+ int nPadding = 0;
+ int i;
+ int j;
+
+ //
+ // Bitmap must be ina double-word alligned address so we may
+ // have some padding to worry about
+ //
+ if (nLineBoundary > 0)
+ {
+ nPadding = nSizeDWORD - nLineBoundary;
+ nBytesPerLine += nPadding;
+ }
+ pucBits = (unsigned char *)malloc(nBytesPerLine * rBmp.GetHeight());
+ memset(pucBits, '\0', (nBytesPerLine * rBmp.GetHeight()));
+ pucBitsMask = (unsigned char *)malloc(nBytesPerLine * rBmp.GetHeight());
+ memset(pucBitsMask, '\0', (nBytesPerLine * rBmp.GetHeight()));
+
+ //
+ // Extract the bitmap and mask data
+ //
+ if ((hOldBitmap = ::GpiSetBitmap(hPS, hBitmap)) == HBM_ERROR)
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ }
+ ::GpiQueryBitmapInfoHeader(hBitmap, &vHeader);
+ vInfo.cBitCount = 24;
+ if ((lScans = ::GpiQueryBitmapBits( hPS
+ ,0L
+ ,(LONG)rBmp.GetHeight()
+ ,(PBYTE)pucBits
+ ,&vInfo
+ )) == GPI_ALTERROR)
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ }
+ if ((hOldMask = ::GpiSetBitmap(hPS, hMask)) == HBM_ERROR)
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ }
+ ::GpiQueryBitmapInfoHeader(hMask, &vHeader);
+ vInfo.cBitCount = 24;
+ if ((lScans = ::GpiQueryBitmapBits( hPS
+ ,0L
+ ,(LONG)rBmp.GetHeight()
+ ,(PBYTE)pucBitsMask
+ ,&vInfo
+ )) == GPI_ALTERROR)
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ }
+ if (( hMask = ::GpiSetBitmap(hPS, hOldMask)) == HBM_ERROR)
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ }
+ pucData = pucBits;
+ pucDataMask = pucBitsMask;
+
+ //
+ // Get the mask value
+ //
+ for (i = 0; i < rBmp.GetHeight(); i++)
+ {
+ for (j = 0; j < rBmp.GetWidth(); j++)
+ {
+ // Byte 1
+ if (bpp16 && *pucDataMask == 0xF8) // 16 bit display gobblygook
+ {
+ *pucData = 0x7F;
+ pucData++;
+ }
+ else if (*pucDataMask == 0xFF) // set to grey
+ {
+ *pucData = 0x7F;
+ pucData++;
+ }
+ else
+ {
+ *pucData = ((unsigned char)(lColor >> 16));
+ pucData++;
+ }
+
+ // Byte 2
+ if (bpp16 && *(pucDataMask + 1) == 0xFC) // 16 bit display gobblygook
+ {
+ *pucData = 0x7F;
+ pucData++;
+ }
+ else if (*(pucDataMask + 1) == 0xFF) // set to grey
+ {
+ *pucData = 0x7F;
+ pucData++;
+ }
+ else
+ {
+ *pucData = ((unsigned char)(lColor >> 8));
+ pucData++;
+ }
+
+ // Byte 3
+ if (bpp16 && *(pucDataMask + 2) == 0xF8) // 16 bit display gobblygook
+ {
+ *pucData = 0x7F;
+ pucData++;
+ }
+ else if (*(pucDataMask + 2) == 0xFF) // set to grey
+ {
+ *pucData = 0x7F;
+ pucData++;
+ }
+ else
+ {
+ *pucData = ((unsigned char)lColor);
+ pucData++;
+ }
+ pucDataMask += 3;
+ }
+ for (j = 0; j < nPadding; j++)
+ {
+ pucData++;
+ pucDataMask++;
+ }
+ }
+
+ //
+ // Create a new bitmap and set the modified bits
+ //
+ wxBitmap vNewBmp( rBmp.GetWidth()
+ ,rBmp.GetHeight()
+ ,24
+ );
+ HBITMAP hNewBmp = (HBITMAP)vNewBmp.GetHBITMAP();
+
+ if ((hOldBitmap = ::GpiSetBitmap(hPS, hNewBmp)) == HBM_ERROR)
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ }
+ if ((lScansSet = ::GpiSetBitmapBits( hPS
+ ,0L
+ ,(LONG)rBmp.GetHeight()
+ ,(PBYTE)pucBits
+ ,&vInfo
+ )) == GPI_ALTERROR)
+
+ {
+ vError = ::WinGetLastError(vHabmain);
+ sError = wxPMErrorToStr(vError);
+ }
+ wxMask* pNewMask;
+
+ pNewMask = new wxMask(pMask->GetMaskBitmap());
+ vNewBmp.SetMask(pNewMask);
+ free(pucBits);
+ ::GpiSetBitmap(hPS, NULLHANDLE);
+ ::GpiDestroyPS(hPS);
+ ::DevCloseDC(hDC);
+ if (vNewBmp.Ok())
+ return(vNewBmp);
+ return(wxNullBitmap);
+} // end of wxDisableBitmap
+
+
CODE LOADONCALL
EXPORTS
-;From library: H:\DEV\WX2\WXWINDOWS\LIB\wx.lib
+;From library: F:\DEV\WX2\WXWINDOWS\LIB\WX.lib
;From object file: dummy.cpp
;PUBDEFs (Symbols available from object file):
wxDummyChar
wxEVT_NC_LEFT_DCLICK
wxEVT_INIT_DIALOG
wxEVT_COMMAND_SET_FOCUS
- ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\extended.c
+ ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\extended.c
;PUBDEFs (Symbols available from object file):
ConvertToIeeeExtended
ConvertFromIeeeExtended
Read32__17wxTextInputStreamFv
;wxTextInputStream::SkipIfEndOfLine(char)
SkipIfEndOfLine__17wxTextInputStreamFc
- ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\unzip.c
+ ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\unzip.c
;PUBDEFs (Symbols available from object file):
unzReadCurrentFile
unzGetCurrentFileInfo
SetMask__8wxBitmapFP6wxMask
;From object file: ..\os2\bmpbuttn.cpp
;PUBDEFs (Symbols available from object file):
- ;wxBitmapButton::DrawFace(unsigned long,int,int,int,int,unsigned long)
- DrawFace__14wxBitmapButtonFUliN32T1
- ;wxBitmapButton::SetBitmapLabel(const wxBitmap&)
- SetBitmapLabel__14wxBitmapButtonFRC8wxBitmap
+ ;wxBitmapButton::OS2OnDraw(void**)
+ OS2OnDraw__14wxBitmapButtonFPPv
+ ;wxBitmapButton::DrawButtonFocus(wxClientDC&)
+ DrawButtonFocus__14wxBitmapButtonFR10wxClientDC
+ ;wxBitmapButton::DrawFace(wxClientDC&,unsigned long)
+ DrawFace__14wxBitmapButtonFR10wxClientDCUl
__vft14wxBitmapButton8wxObject
- ;wxBitmapButton::DrawButtonDisable(unsigned long,int,int,int,int,unsigned long)
- DrawButtonDisable__14wxBitmapButtonFUliN32T1
;wxConstructorForwxBitmapButton()
wxConstructorForwxBitmapButton__Fv
;wxBitmapButton::SetDefault()
SetDefault__14wxBitmapButtonFv
;wxBitmapButton::Create(wxWindow*,int,const wxBitmap&,const wxPoint&,const wxSize&,long,const wxValidator&,const wxString&)
Create__14wxBitmapButtonFP8wxWindowiRC8wxBitmapRC7wxPointRC6wxSizelRC11wxValidatorRC8wxString
+ ;wxBitmapButton::DrawButtonDisable(wxClientDC&,wxBitmap&)
+ DrawButtonDisable__14wxBitmapButtonFR10wxClientDCR8wxBitmap
;wxBitmapButton::sm_classwxBitmapButton
sm_classwxBitmapButton__14wxBitmapButton
- ;wxBitmapButton::DrawButtonFocus(unsigned long,int,int,int,int,unsigned long)
- DrawButtonFocus__14wxBitmapButtonFUliN32T1
;From object file: ..\os2\brush.cpp
;PUBDEFs (Symbols available from object file):
;wxBrush::FreeResource(unsigned long)
GetEventTable__9wxToolBarCFv
;wxToolBar::CreateTool(int,const wxString&,const wxBitmap&,const wxBitmap&,wxItemKind,wxObject*,const wxString&,const wxString&)
CreateTool__9wxToolBarFiRC8wxStringRC8wxBitmapT310wxItemKindP8wxObjectN22
- ;wxDisableBitmap(const wxBitmap&,long)
- wxDisableBitmap__FRC8wxBitmapl
;wxConstructorForwxToolBar()
wxConstructorForwxToolBar__Fv
;wxToolBar::m_bInitialized
wxShell__FRC8wxString
;wxGetUserHome(const wxString&)
wxGetUserHome__FRC8wxString
+ ;wxDisableBitmap(const wxBitmap&,long)
+ wxDisableBitmap__FRC8wxBitmapl
;wxWriteResource(const wxString&,const wxString&,const wxString&,const wxString&)
wxWriteResource__FRC8wxStringN31
;wxWriteResource(const wxString&,const wxString&,long,const wxString&)