Fix for disabled controls

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7280 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2000-04-26 16:39:27 +00:00
parent c513dcd1dd
commit a5b3c8eaae
12 changed files with 200 additions and 6 deletions

View File

@@ -66,6 +66,8 @@ public:
// MSW only // MSW only
virtual bool MSWCommand(WXUINT param, WXWORD id); virtual bool MSWCommand(WXUINT param, WXWORD id);
long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
protected: protected:
virtual void DoSetItemClientData( int n, void* clientData ); virtual void DoSetItemClientData( int n, void* clientData );

View File

@@ -80,6 +80,8 @@ public:
// implementation only from now on // implementation only from now on
virtual bool MSWCommand(WXUINT param, WXWORD id); virtual bool MSWCommand(WXUINT param, WXWORD id);
bool MSWProcessEditMsg(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam); 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; WXHWND GetEditHWND() const;

View File

@@ -81,6 +81,8 @@ public:
virtual bool SetFont(const wxFont& font); virtual bool SetFont(const wxFont& font);
long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); 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; } WXHWND *GetRadioButtons() const { return m_radioButtons; }
bool ContainsHWND(WXHWND hWnd) const; bool ContainsHWND(WXHWND hWnd) const;
void SendNotificationEvent(); void SendNotificationEvent();

View File

@@ -48,6 +48,9 @@ class WXDLLEXPORT wxRadioButton: public wxControl
virtual bool GetValue(void) const ; virtual bool GetValue(void) const ;
bool MSWCommand(WXUINT param, WXWORD id); 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); void Command(wxCommandEvent& event);
}; };

View File

@@ -115,6 +115,8 @@ public:
virtual void Command(wxCommandEvent& event); virtual void Command(wxCommandEvent& event);
virtual bool MSWCommand(WXUINT param, WXWORD id); 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 #if wxUSE_RICHEDIT
bool IsRich() const { return m_isRich; } bool IsRich() const { return m_isRich; }

View File

@@ -140,6 +140,7 @@ public:
void OnFileLoad(wxCommandEvent& event); void OnFileLoad(wxCommandEvent& event);
void OnSetEditable(wxCommandEvent& event); void OnSetEditable(wxCommandEvent& event);
void OnSetEnabled(wxCommandEvent& event);
void OnIdle( wxIdleEvent& event ); void OnIdle( wxIdleEvent& event );
@@ -178,7 +179,8 @@ enum
// text menu // text menu
TEXT_MOVE_ENDTEXT = 400, TEXT_MOVE_ENDTEXT = 400,
TEXT_MOVE_ENDENTRY, TEXT_MOVE_ENDENTRY,
TEXT_SET_EDITABLE TEXT_SET_EDITABLE,
TEXT_SET_ENABLED
}; };
bool MyApp::OnInit() 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_ENDTEXT, "Move cursor to the end of &text");
menuText->Append(TEXT_MOVE_ENDENTRY, "Move cursor to the end of &entry"); 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_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_EDITABLE, TRUE);
menuText->Check(TEXT_SET_ENABLED, TRUE);
menu_bar->Append(menuText, "&Text"); menu_bar->Append(menuText, "&Text");
frame->SetMenuBar(menu_bar); frame->SetMenuBar(menu_bar);
@@ -770,6 +774,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(TEXT_MOVE_ENDENTRY, MyFrame::OnMoveToEndOfEntry) EVT_MENU(TEXT_MOVE_ENDENTRY, MyFrame::OnMoveToEndOfEntry)
EVT_MENU(TEXT_SET_EDITABLE, MyFrame::OnSetEditable) EVT_MENU(TEXT_SET_EDITABLE, MyFrame::OnSetEditable)
EVT_MENU(TEXT_SET_ENABLED, MyFrame::OnSetEnabled)
EVT_IDLE(MyFrame::OnIdle) EVT_IDLE(MyFrame::OnIdle)
END_EVENT_TABLE() END_EVENT_TABLE()
@@ -850,6 +855,21 @@ void MyFrame::OnSetEditable(wxCommandEvent& WXUNUSED(event))
s_editable = !s_editable; s_editable = !s_editable;
m_panel->m_text->SetEditable(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) void MyFrame::OnFileSave(wxCommandEvent& event)

View File

@@ -337,3 +337,36 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
return TRUE; 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();
}

View File

@@ -139,6 +139,38 @@ LRESULT APIENTRY _EXPORT wxComboEditWndProc(HWND hWnd,
return ::CallWindowProc(CASTWNDPROC gs_wndprocEdit, hWnd, message, wParam, lParam); 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 // wxComboBox
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -239,7 +239,8 @@ WXHBRUSH wxControl::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
else else
SetBkMode(hdc, OPAQUE); SetBkMode(hdc, OPAQUE);
const wxColour& colBack = GetBackgroundColour(); wxColour& colBack = GetBackgroundColour();
::SetBkColor(hdc, wxColourToRGB(colBack)); ::SetBkColor(hdc, wxColourToRGB(colBack));
::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour()));

View File

@@ -773,6 +773,39 @@ long wxRadioBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
return wxControl::MSWWindowProc(nMsg, wParam, 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 // window proc for radio buttons
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@@ -163,6 +163,37 @@ void wxRadioButton::Command (wxCommandEvent & event)
ProcessCommand (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 // Not implemented
#if 0 #if 0

View File

@@ -355,10 +355,10 @@ void wxTextCtrl::AdoptAttributesFromHWND()
void wxTextCtrl::SetupColours() void wxTextCtrl::SetupColours()
{ {
wxColour bkgndColour; wxColour bkgndColour;
if (IsEditable() || (m_windowStyle & wxTE_MULTILINE)) // if (IsEditable() || (m_windowStyle & wxTE_MULTILINE))
bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW); bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW);
else // else
bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); // bkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
SetBackgroundColour(bkgndColour); SetBackgroundColour(bkgndColour);
SetForegroundColour(GetParent()->GetForegroundColour()); SetForegroundColour(GetParent()->GetForegroundColour());
@@ -530,12 +530,13 @@ void wxTextCtrl::SetEditable(bool editable)
HWND hWnd = GetHwnd(); HWND hWnd = GetHwnd();
SendMessage(hWnd, EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L); SendMessage(hWnd, EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L);
/*
if (editable != isEditable) if (editable != isEditable)
{ {
SetupColours(); SetupColours();
Refresh(); Refresh();
} }
*/
} }
void wxTextCtrl::SetInsertionPoint(long pos) void wxTextCtrl::SetInsertionPoint(long pos)
@@ -962,6 +963,38 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
return TRUE; 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() void wxTextCtrl::AdjustSpaceLimit()
{ {
#ifndef __WIN16__ #ifndef __WIN16__