if ( !CreateBase(parent, id, pos, size, style, validator, name) )
return FALSE;
- // Validator was set in CreateBase
- //SetValidator(validator);
-
parent->AddChild((wxButton *)this);
m_backgroundColour = parent->GetBackgroundColour() ;
wxSize nsize( GetSize() );
if ((nsize.x < 80) || (nsize.y < 23))
{
- if ((size.x == -1) && (nsize.x < 80)) nsize.x = 80;
- if ((size.y == -1) && (nsize.y < 23)) nsize.y = 23;
+ if ((size.x == -1) && (nsize.x < 80))
+ nsize.x = 80;
+ if ((size.y == -1) && (nsize.y < 23))
+ nsize.y = 23;
SetSize( nsize );
}
// size management including autosizing
// ----------------------------------------------------------------------------
-wxSize wxButton::DoGetBestSize()
+wxSize wxButton::DoGetBestSize() const
{
wxString label = wxGetWindowText(GetHWND());
int wBtn;
bool processed = FALSE;
switch ( param )
{
- case 1: // 1 for accelerator
+ case 1: // means that the message came from an accelerator
case BN_CLICKED:
processed = SendClickEvent();
break;
WXWPARAM wParam,
WXLPARAM lParam)
{
- wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID);
+ const HDC& hdc = (HDC)pDC;
+
+ const wxColour& colBack = GetBackgroundColour();
+ ::SetBkColor(hdc, RGB(colBack.Red(), colBack.Green(), colBack.Blue()));
+
+ const wxColour& colFor = GetForegroundColour();
+ ::SetTextColor(hdc, RGB(colFor.Red(), colFor.Green(), colFor.Blue()));
- return (WXHBRUSH) backgroundBrush->GetResourceHandle();
+ ::SetBkMode(hdc, OPAQUE);
+
+ wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(colBack,
+ wxSOLID);
+ backgroundBrush->RealizeResource();
+ return (WXHBRUSH)backgroundBrush->GetResourceHandle();
}
+long wxButton::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
+{
+ // make sure that we won't have BS_DEFPUSHBUTTON style any more if the
+ // focus is being transfered to another button with the same parent -
+ // otherwise, we could finish with 2 default buttons inside one panel
+ if ( (nMsg == WM_KILLFOCUS) &&
+ (GetWindowLong(GetHwnd(), GWL_STYLE) & BS_DEFPUSHBUTTON) )
+ {
+ wxWindow *parent = GetParent();
+ wxWindow *win = wxFindWinFromHandle((WXHWND)wParam);
+ if ( win && win->GetParent() == parent )
+ {
+ wxPanel *panel = wxDynamicCast(parent, wxPanel);
+ if ( panel )
+ {
+ panel->SetDefaultItem(this);
+ }
+ // else: I don't know what to do - we'll still have the problem
+ // with multiple default buttons in a dialog...
+ }
+ }
+
+ // let the base class do all real processing
+ return wxControl::MSWWindowProc(nMsg, wParam, lParam);
+}