diff --git a/include/wx/msw/choice.h b/include/wx/msw/choice.h index f60a023057..cc00ce00b3 100644 --- a/include/wx/msw/choice.h +++ b/include/wx/msw/choice.h @@ -66,6 +66,8 @@ public: // MSW only virtual bool MSWCommand(WXUINT param, WXWORD id); long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); + virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, WXWPARAM wParam, WXLPARAM lParam); protected: virtual void DoSetItemClientData( int n, void* clientData ); diff --git a/include/wx/msw/combobox.h b/include/wx/msw/combobox.h index e0874993ea..ab5127be3d 100644 --- a/include/wx/msw/combobox.h +++ b/include/wx/msw/combobox.h @@ -80,6 +80,8 @@ public: // implementation only from now on virtual bool MSWCommand(WXUINT param, WXWORD id); bool MSWProcessEditMsg(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam); + virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, WXWPARAM wParam, WXLPARAM lParam); WXHWND GetEditHWND() const; diff --git a/include/wx/msw/radiobox.h b/include/wx/msw/radiobox.h index 3736dc4dcf..8a98bb0a88 100644 --- a/include/wx/msw/radiobox.h +++ b/include/wx/msw/radiobox.h @@ -81,6 +81,8 @@ public: virtual bool SetFont(const wxFont& font); long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); + virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, WXWPARAM wParam, WXLPARAM lParam); WXHWND *GetRadioButtons() const { return m_radioButtons; } bool ContainsHWND(WXHWND hWnd) const; void SendNotificationEvent(); diff --git a/include/wx/msw/radiobut.h b/include/wx/msw/radiobut.h index f5bb924c91..b75df13479 100644 --- a/include/wx/msw/radiobut.h +++ b/include/wx/msw/radiobut.h @@ -48,6 +48,9 @@ class WXDLLEXPORT wxRadioButton: public wxControl virtual bool GetValue(void) const ; bool MSWCommand(WXUINT param, WXWORD id); + virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, WXWPARAM wParam, WXLPARAM lParam); + void Command(wxCommandEvent& event); }; diff --git a/include/wx/msw/textctrl.h b/include/wx/msw/textctrl.h index 732a38ebe8..c14c9cd54a 100644 --- a/include/wx/msw/textctrl.h +++ b/include/wx/msw/textctrl.h @@ -115,6 +115,8 @@ public: virtual void Command(wxCommandEvent& event); virtual bool MSWCommand(WXUINT param, WXWORD id); + virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, WXWPARAM wParam, WXLPARAM lParam); #if wxUSE_RICHEDIT bool IsRich() const { return m_isRich; } diff --git a/samples/text/text.cpp b/samples/text/text.cpp index 2ba622b9f0..99f13f9a3f 100644 --- a/samples/text/text.cpp +++ b/samples/text/text.cpp @@ -140,6 +140,7 @@ public: void OnFileLoad(wxCommandEvent& event); void OnSetEditable(wxCommandEvent& event); + void OnSetEnabled(wxCommandEvent& event); void OnIdle( wxIdleEvent& event ); @@ -178,7 +179,8 @@ enum // text menu TEXT_MOVE_ENDTEXT = 400, TEXT_MOVE_ENDENTRY, - TEXT_SET_EDITABLE + TEXT_SET_EDITABLE, + TEXT_SET_ENABLED }; bool MyApp::OnInit() @@ -226,7 +228,9 @@ bool MyApp::OnInit() menuText->Append(TEXT_MOVE_ENDTEXT, "Move cursor to the end of &text"); menuText->Append(TEXT_MOVE_ENDENTRY, "Move cursor to the end of &entry"); menuText->Append(TEXT_SET_EDITABLE, "Toggle &editable state", "", TRUE); + menuText->Append(TEXT_SET_ENABLED, "Toggle e&nabled state", "", TRUE); menuText->Check(TEXT_SET_EDITABLE, TRUE); + menuText->Check(TEXT_SET_ENABLED, TRUE); menu_bar->Append(menuText, "&Text"); frame->SetMenuBar(menu_bar); @@ -770,6 +774,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(TEXT_MOVE_ENDENTRY, MyFrame::OnMoveToEndOfEntry) EVT_MENU(TEXT_SET_EDITABLE, MyFrame::OnSetEditable) + EVT_MENU(TEXT_SET_ENABLED, MyFrame::OnSetEnabled) EVT_IDLE(MyFrame::OnIdle) END_EVENT_TABLE() @@ -850,6 +855,21 @@ void MyFrame::OnSetEditable(wxCommandEvent& WXUNUSED(event)) s_editable = !s_editable; m_panel->m_text->SetEditable(s_editable); + m_panel->m_password->SetEditable(s_editable); + m_panel->m_multitext->SetEditable(s_editable); + m_panel->m_textrich->SetEditable(s_editable); +} + +void MyFrame::OnSetEnabled(wxCommandEvent& WXUNUSED(event)) +{ + bool enabled = m_panel->m_text->IsEnabled(); + enabled = !enabled; + + m_panel->m_text->Enable(enabled); + m_panel->m_password->Enable(enabled); + m_panel->m_multitext->Enable(enabled); + m_panel->m_readonly->Enable(enabled); + m_panel->m_textrich->Enable(enabled); } void MyFrame::OnFileSave(wxCommandEvent& event) diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index 997951504f..a7f0cdde8a 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -337,3 +337,36 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) return TRUE; } +WXHBRUSH wxChoice::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, + WXWPARAM wParam, + WXLPARAM lParam) +{ +#if wxUSE_CTL3D + if ( m_useCtl3D ) + { + HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); + return (WXHBRUSH) hbrush; + } +#endif // wxUSE_CTL3D + + HDC hdc = (HDC)pDC; + if (GetParent()->GetTransparentBackground()) + SetBkMode(hdc, TRANSPARENT); + else + SetBkMode(hdc, OPAQUE); + + wxColour& colBack = GetBackgroundColour(); + + if (!IsEnabled()) + colBack = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); + + ::SetBkColor(hdc, wxColourToRGB(colBack)); + ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); + + wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); + + return (WXHBRUSH)brush->GetResourceHandle(); +} + + diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index aa1bf0c8bd..f7dd28dc07 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -139,6 +139,38 @@ LRESULT APIENTRY _EXPORT wxComboEditWndProc(HWND hWnd, return ::CallWindowProc(CASTWNDPROC gs_wndprocEdit, hWnd, message, wParam, lParam); } +WXHBRUSH wxComboBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, + WXWPARAM wParam, + WXLPARAM lParam) +{ +#if wxUSE_CTL3D + if ( m_useCtl3D ) + { + HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); + return (WXHBRUSH) hbrush; + } +#endif // wxUSE_CTL3D + + HDC hdc = (HDC)pDC; + if (GetParent()->GetTransparentBackground()) + SetBkMode(hdc, TRANSPARENT); + else + SetBkMode(hdc, OPAQUE); + + wxColour& colBack = GetBackgroundColour(); + + if (!IsEnabled()) + colBack = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); + + ::SetBkColor(hdc, wxColourToRGB(colBack)); + ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); + + wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); + + return (WXHBRUSH)brush->GetResourceHandle(); +} + // ---------------------------------------------------------------------------- // wxComboBox // ---------------------------------------------------------------------------- diff --git a/src/msw/control.cpp b/src/msw/control.cpp index 44fa7375b0..c0cb13c992 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -239,7 +239,8 @@ WXHBRUSH wxControl::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, else SetBkMode(hdc, OPAQUE); - const wxColour& colBack = GetBackgroundColour(); + wxColour& colBack = GetBackgroundColour(); + ::SetBkColor(hdc, wxColourToRGB(colBack)); ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index 69f78d9fd1..88c88c3e1c 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -773,6 +773,39 @@ long wxRadioBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) return wxControl::MSWWindowProc(nMsg, wParam, lParam); } +WXHBRUSH wxRadioBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, + WXWPARAM wParam, + WXLPARAM lParam) +{ +#if wxUSE_CTL3D + if ( m_useCtl3D ) + { + HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); + return (WXHBRUSH) hbrush; + } +#endif // wxUSE_CTL3D + + HDC hdc = (HDC)pDC; + if (GetParent()->GetTransparentBackground()) + SetBkMode(hdc, TRANSPARENT); + else + SetBkMode(hdc, OPAQUE); + + wxColour& colBack = GetBackgroundColour(); + + if (!IsEnabled()) + colBack = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); + + ::SetBkColor(hdc, wxColourToRGB(colBack)); + ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); + + wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); + + return (WXHBRUSH)brush->GetResourceHandle(); +} + + // --------------------------------------------------------------------------- // window proc for radio buttons // --------------------------------------------------------------------------- diff --git a/src/msw/radiobut.cpp b/src/msw/radiobut.cpp index 0f7b1dc92e..5061e9f8c3 100644 --- a/src/msw/radiobut.cpp +++ b/src/msw/radiobut.cpp @@ -163,6 +163,37 @@ void wxRadioButton::Command (wxCommandEvent & event) ProcessCommand (event); } +WXHBRUSH wxRadioButton::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, + WXWPARAM wParam, + WXLPARAM lParam) +{ +#if wxUSE_CTL3D + if ( m_useCtl3D ) + { + HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); + return (WXHBRUSH) hbrush; + } +#endif // wxUSE_CTL3D + + HDC hdc = (HDC)pDC; + if (GetParent()->GetTransparentBackground()) + SetBkMode(hdc, TRANSPARENT); + else + SetBkMode(hdc, OPAQUE); + + wxColour& colBack = GetBackgroundColour(); + + if (!IsEnabled()) + colBack = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); + + ::SetBkColor(hdc, wxColourToRGB(colBack)); + ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); + + wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); + + return (WXHBRUSH)brush->GetResourceHandle(); +} // Not implemented #if 0 diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index f1509bef93..bffcfb5149 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -355,10 +355,10 @@ void wxTextCtrl::AdoptAttributesFromHWND() void wxTextCtrl::SetupColours() { wxColour bkgndColour; - if (IsEditable() || (m_windowStyle & wxTE_MULTILINE)) +// if (IsEditable() || (m_windowStyle & wxTE_MULTILINE)) bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW); - else - bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); +// else +// bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); SetBackgroundColour(bkgndColour); SetForegroundColour(GetParent()->GetForegroundColour()); @@ -530,12 +530,13 @@ void wxTextCtrl::SetEditable(bool editable) HWND hWnd = GetHwnd(); SendMessage(hWnd, EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L); - +/* if (editable != isEditable) { SetupColours(); Refresh(); } +*/ } void wxTextCtrl::SetInsertionPoint(long pos) @@ -962,6 +963,38 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) return TRUE; } +WXHBRUSH wxTextCtrl::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, + WXWPARAM wParam, + WXLPARAM lParam) +{ +#if wxUSE_CTL3D + if ( m_useCtl3D ) + { + HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); + return (WXHBRUSH) hbrush; + } +#endif // wxUSE_CTL3D + + HDC hdc = (HDC)pDC; + if (GetParent()->GetTransparentBackground()) + SetBkMode(hdc, TRANSPARENT); + else + SetBkMode(hdc, OPAQUE); + + wxColour& colBack = GetBackgroundColour(); + + if (!IsEnabled() && (GetWindowStyle() & wxTE_MULTILINE) == 0) + colBack = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); + + ::SetBkColor(hdc, wxColourToRGB(colBack)); + ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); + + wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID); + + return (WXHBRUSH)brush->GetResourceHandle(); +} + void wxTextCtrl::AdjustSpaceLimit() { #ifndef __WIN16__