static void ChangeCheckFocus( HWND w, int on ) { if ( ( on != 0 ) ^ TstF( ffGetState(), FB_FOCUS ) ) { HDC h ; RECT r ; char s[ CTLTITLE + 1 ] ; h = GetDC( w ) ; GetClientRect( w, & r ) ; GetWindowText( w, s, sizeof s ) ; if ( TstF( GetStyle(), FC_BUTTONDRAW ) ) DrawButtonFocus( h, & r, TstState( FB_SELECTED ) ) ; else DrawCheckFocus( h, & r, s ) ; ReleaseDC( w, h ) ; XorState( (WORD)FB_FOCUS ) ; } }
bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item) { #ifndef __WXWINCE__ long style = GetWindowLong((HWND) GetHWND(), GWL_STYLE); if (style & BS_BITMAP) { // Let default procedure draw the bitmap, which is defined // in the Windows resource. return false; } #endif LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT) item; HDC hDC = lpDIS->hDC; UINT state = lpDIS->itemState; bool isSelected = (state & ODS_SELECTED) != 0; bool autoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0; // choose the bitmap to use depending on the button state wxBitmap *bitmap; if ( isSelected && m_bmpSelected.Ok() ) bitmap = &m_bmpSelected; else if ( m_bmpHover.Ok() && IsMouseInWindow() ) bitmap = &m_bmpHover; else if ((state & ODS_FOCUS) && m_bmpFocus.Ok()) bitmap = &m_bmpFocus; else if ((state & ODS_DISABLED) && m_bmpDisabled.Ok()) bitmap = &m_bmpDisabled; else bitmap = &m_bmpNormal; if ( !bitmap->Ok() ) return false; // centre the bitmap in the control area int x = lpDIS->rcItem.left; int y = lpDIS->rcItem.top; int width = lpDIS->rcItem.right - x; int height = lpDIS->rcItem.bottom - y; int wBmp = bitmap->GetWidth(); int hBmp = bitmap->GetHeight(); #if wxUSE_UXTHEME if ( autoDraw && wxUxThemeEngine::GetIfActive() ) { MSWDrawXPBackground(this, item); wxUxThemeHandle theme(this, L"BUTTON"); // calculate content area margins // assuming here that each state is the same size MARGINS margins; wxUxThemeEngine::Get()->GetThemeMargins(theme, NULL, BP_PUSHBUTTON, PBS_NORMAL, TMT_CONTENTMARGINS, NULL, &margins); int marginX = margins.cxLeftWidth + 1; int marginY = margins.cyTopHeight + 1; int x1,y1; if ( m_windowStyle & wxBU_LEFT ) { x1 = x + marginX; } else if ( m_windowStyle & wxBU_RIGHT ) { x1 = x + (width - wBmp) - marginX; } else { x1 = x + (width - wBmp) / 2; } if ( m_windowStyle & wxBU_TOP ) { y1 = y + marginY; } else if ( m_windowStyle & wxBU_BOTTOM ) { y1 = y + (height - hBmp) - marginY; } else { y1 = y + (height - hBmp) / 2; } // draw the bitmap wxDCTemp dst((WXHDC)hDC); dst.DrawBitmap(*bitmap, x1, y1, true); return true; } #endif // wxUSE_UXTHEME int x1,y1; if(m_windowStyle & wxBU_LEFT) x1 = x + (FOCUS_MARGIN+1); else if(m_windowStyle & wxBU_RIGHT) x1 = x + (width - wBmp) - (FOCUS_MARGIN+1); else x1 = x + (width - wBmp) / 2; if(m_windowStyle & wxBU_TOP) y1 = y + (FOCUS_MARGIN+1); else if(m_windowStyle & wxBU_BOTTOM) y1 = y + (height - hBmp) - (FOCUS_MARGIN+1); else y1 = y + (height - hBmp) / 2; if ( isSelected && autoDraw ) { x1++; y1++; } // draw the face, if auto-drawing if ( autoDraw ) { DrawFace((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, isSelected); } // draw the bitmap wxDCTemp dst((WXHDC)hDC); dst.DrawBitmap(*bitmap, x1, y1, true); // draw focus / disabled state, if auto-drawing if ( (state & ODS_DISABLED) && autoDraw ) { DrawButtonDisable((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, true); } else if ( (state & ODS_FOCUS) && autoDraw ) { DrawButtonFocus((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, isSelected); } return true; }
bool wxBitmapButton::OS2OnDraw( WXDRAWITEMSTRUCT* pItem) { PUSERBUTTON pUser = (PUSERBUTTON)pItem; bool bAutoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0; if (!pUser) return false; wxBitmap bitmap; bool bIsSelected = pUser->fsState & BDS_HILITED; wxClientDC vDc(this); if (bIsSelected) bitmap = GetBitmapPressed(); else if (pUser->fsState & BDS_DEFAULT) bitmap = GetBitmapFocus(); else if (pUser->fsState & BDS_DISABLED) bitmap = GetBitmapDisabled(); if (!bitmap.IsOk() ) { bitmap = GetBitmapLabel(); if (!bitmap.IsOk() ) return false; } // // Centre the bitmap in the control area // int nX1 = 0; int nY1 = 0; wxPMDCImpl *impl = (wxPMDCImpl*) vDc.GetImpl(); int nWidth = impl->m_vRclPaint.xRight - impl->m_vRclPaint.xLeft; int nHeight = impl->m_vRclPaint.yTop - impl->m_vRclPaint.yBottom; int nBmpWidth = bitmap.GetWidth(); int nBmpHeight = bitmap.GetHeight(); nX1 = (nWidth - nBmpWidth) / 2; nY1 = (nHeight - nBmpHeight) / 2; if (bIsSelected && bAutoDraw) { nX1++; nY1++; } // // Draw the button face // DrawFace( vDc, bIsSelected ); // // Draw the bitmap // vDc.DrawBitmap( bitmap, nX1, nY1, true ); // // Draw focus / disabled state, if auto-drawing // if ((pUser->fsState == BDS_DISABLED) && bAutoDraw) { DrawButtonDisable( vDc, bitmap ); } else if ((pUser->fsState == BDS_DEFAULT) && bAutoDraw) { DrawButtonFocus(vDc); } return true; } // end of wxBitmapButton::OS2OnDraw
bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item) { #ifndef __WXWINCE__ long style = GetWindowLong((HWND) GetHWND(), GWL_STYLE); if (style & BS_BITMAP) { // Let default procedure draw the bitmap, which is defined // in the Windows resource. return false; } #endif LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT) item; HDC hDC = lpDIS->hDC; UINT state = lpDIS->itemState; bool isSelected = (state & ODS_SELECTED) != 0; bool autoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0; // choose the bitmap to use depending on the button state wxBitmap* bitmap; if ( isSelected && m_bmpSelected.Ok() ) bitmap = &m_bmpSelected; else if ((state & ODS_FOCUS) && m_bmpFocus.Ok()) bitmap = &m_bmpFocus; else if ((state & ODS_DISABLED) && m_bmpDisabled.Ok()) bitmap = &m_bmpDisabled; else bitmap = &m_bmpNormal; if ( !bitmap->Ok() ) return false; // centre the bitmap in the control area int x = lpDIS->rcItem.left; int y = lpDIS->rcItem.top; int width = lpDIS->rcItem.right - x; int height = lpDIS->rcItem.bottom - y; int wBmp = bitmap->GetWidth(); int hBmp = bitmap->GetHeight(); int x1,y1; if(m_windowStyle & wxBU_LEFT) x1 = x + (FOCUS_MARGIN+1); else if(m_windowStyle & wxBU_RIGHT) x1 = x + (width - wBmp) - (FOCUS_MARGIN+1); else x1 = x + (width - wBmp) / 2; if(m_windowStyle & wxBU_TOP) y1 = y + (FOCUS_MARGIN+1); else if(m_windowStyle & wxBU_BOTTOM) y1 = y + (height - hBmp) - (FOCUS_MARGIN+1); else y1 = y + (height - hBmp) / 2; if ( isSelected && autoDraw ) { x1++; y1++; } // draw the face, if auto-drawing if ( autoDraw ) { DrawFace((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, isSelected); } // draw the bitmap wxDC dst; dst.SetHDC((WXHDC) hDC, false); dst.DrawBitmap(*bitmap, x1, y1, true); // draw focus / disabled state, if auto-drawing if ( (state & ODS_DISABLED) && autoDraw ) { DrawButtonDisable((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, true); } else if ( (state & ODS_FOCUS) && autoDraw ) { DrawButtonFocus((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, isSelected); } return true; }
bool wxBitmapButton::OS2OnDraw( WXDRAWITEMSTRUCT* pItem ) { PUSERBUTTON pUser = (PUSERBUTTON)pItem; bool bAutoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0; if (!pUser) return FALSE; wxBitmap* pBitmap; 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 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