diff --git a/include/wx/msw/radiobut.h b/include/wx/msw/radiobut.h index ad76fcf575..4f86e1eeef 100644 --- a/include/wx/msw/radiobut.h +++ b/include/wx/msw/radiobut.h @@ -60,6 +60,7 @@ protected: // Implement wxMSWOwnerDrawnButtonBase methods. virtual int MSWGetButtonStyle() const wxOVERRIDE; + virtual void MSWOnButtonResetOwnerDrawn() wxOVERRIDE; virtual int MSWGetButtonCheckedFlag() const wxOVERRIDE; virtual void MSWDrawButtonBitmap(wxDC& dc, const wxRect& rect, int flags) wxOVERRIDE; diff --git a/src/msw/radiobut.cpp b/src/msw/radiobut.cpp index cbb286bcf0..3737df1cc9 100644 --- a/src/msw/radiobut.cpp +++ b/src/msw/radiobut.cpp @@ -193,9 +193,12 @@ void wxRadioButton::SetValue(bool value) bool wxRadioButton::GetValue() const { - wxASSERT_MSG( m_isChecked == - (::SendMessage(GetHwnd(), BM_GETCHECK, 0, 0L) != 0), - wxT("wxRadioButton::m_isChecked is out of sync?") ); + if ( !IsOwnerDrawn() ) + { + wxASSERT_MSG( m_isChecked == + (::SendMessage(GetHwnd(), BM_GETCHECK, 0, 0L) != 0), + wxT("wxRadioButton::m_isChecked is out of sync?") ); + } return m_isChecked; } @@ -310,6 +313,13 @@ int wxRadioButton::MSWGetButtonStyle() const return BS_RADIOBUTTON; } +void wxRadioButton::MSWOnButtonResetOwnerDrawn() +{ + // ensure that controls state is consistent with internal state + ::SendMessage(GetHwnd(), BM_SETCHECK, + m_isChecked ? BST_CHECKED : BST_UNCHECKED, 0); +} + int wxRadioButton::MSWGetButtonCheckedFlag() const { return m_isChecked ? wxCONTROL_CHECKED : 0;