+ //
+ // Set this one as the default button both for wxWindows and Windows
+ //
+ wxWindow* pWinOldDefault = pParent->SetDefaultItem(this);
+
+ SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
+ ,FALSE
+ );
+ SetDefaultStyle( this
+ ,TRUE
+ );
+} // end of wxButton::SetDefault
+
+void wxButton::SetTmpDefault()
+{
+ wxWindow* pParent = GetParent();
+
+ wxCHECK_RET( pParent, _T("button without parent?") );
+
+ wxWindow* pWinOldDefault = pParent->GetDefaultItem();
+
+ pParent->SetTmpDefaultItem(this);
+ SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
+ ,FALSE
+ );
+ SetDefaultStyle( this
+ ,TRUE
+ );
+} // end of wxButton::SetTmpDefault
+
+void wxButton::UnsetTmpDefault()
+{
+ wxWindow* pParent = GetParent();
+
+ wxCHECK_RET( pParent, _T("button without parent?") );
+
+ pParent->SetTmpDefaultItem(NULL);
+
+ wxWindow* pWinOldDefault = pParent->GetDefaultItem();
+
+ SetDefaultStyle( this
+ ,FALSE
+ );
+ SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
+ ,TRUE
+ );
+} // end of wxButton::UnsetTmpDefault
+
+void wxButton::SetDefaultStyle(
+ wxButton* pBtn
+, bool bOn
+)
+{
+ long lStyle;
+ //
+ // We may be called with NULL pointer -- simpler to do the check here than
+ // in the caller which does wxDynamicCast()
+ //
+ if (!pBtn)
+ return;
+
+ //
+ // First, let DefDlgProc() know about the new default button
+ //
+ if (bOn)
+ {
+ if (!wxTheApp->IsActive())
+ return;
+
+ //
+ // In OS/2 the dialog/panel doesn't really know it has a default
+ // button, the default button simply has that style. We'll just
+ // simulate by setting focus to it
+ //
+ pBtn->SetFocus();
+ }
+ lStyle = ::WinQueryWindowULong(GetHwndOf(pBtn), QWL_STYLE);
+ if (!(lStyle & BS_DEFAULT) == bOn)
+ {
+ if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
+ {
+ if (bOn)
+ lStyle |= BS_DEFAULT;
+ else
+ lStyle &= ~BS_DEFAULT;
+ ::WinSetWindowULong(GetHwndOf(pBtn), QWL_STYLE, lStyle);
+ }
+ else
+ {
+ //
+ // Redraw the button - it will notice itself that it's not the
+ // default one any longer
+ //
+ pBtn->Refresh();
+ }
+ }
+} // end of wxButton::UpdateDefaultStyle
+
+// ----------------------------------------------------------------------------
+// event/message handlers
+// ----------------------------------------------------------------------------
+
+bool wxButton::OS2Command(
+ WXUINT uParam
+, WXWORD wId
+)
+{
+ bool bProcessed = FALSE;
+
+ switch (uParam)
+ {
+ case BN_CLICKED: // normal buttons send this
+ case BN_DBLCLICKED: // owner-drawn ones also send this
+ bProcessed = SendClickEvent();
+ break;
+ }
+ return bProcessed;
+} // end of wxButton::OS2Command
+
+WXHBRUSH wxButton::OnCtlColor(
+ WXHDC pDC
+, WXHWND pWnd
+, WXUINT nCtlColor
+, WXUINT uMessage
+, WXWPARAM wParam
+, WXLPARAM lParam
+)