Recognize this control as part of wxComboBox and so handle WM_CTLCOLOR for it.
To do this, override ContainsHWND() in wxComboBox and use it, on the parent
window, in wxControl::DoMSWControlColor(), if we fail to find the window
directly.
Closes #811.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72468
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
wxMSW:
+- Fix setting colours for the text part of wxComboBox (Igor Korot).
- Add support for CURRENCY and SCODE types to OLE Automation helpers (PB).
- Allow setting LCID used by wxAutomationObject (PB).
- Fix calling Iconize(false) on hidden top level windows (Christian Walther).
virtual void SetSelection(long from, long to)
{ wxTextEntry::SetSelection(from, to); }
virtual int GetSelection() const { return wxChoice::GetSelection(); }
+ virtual bool ContainsHWND(WXHWND hWnd) const;
virtual void GetSelection(long *from, long *to) const;
virtual bool IsEditable() const;
wxTextEntry::Clear();
}
+bool wxComboBox::ContainsHWND(WXHWND hWnd) const
+{
+ return hWnd == GetEditHWNDIfAvailable();
+}
+
void wxComboBox::GetSelection(long *from, long *to) const
{
if ( !HasFlag(wxCB_READONLY) )
WXHBRUSH hbr = 0;
if ( !colBg.IsOk() )
{
- if ( wxWindow *win = wxFindWinFromHandle(hWnd) )
+ wxWindow *win = wxFindWinFromHandle( hWnd );
+ if ( !win )
+ {
+ // If this HWND doesn't correspond to a wxWindow, it still might be
+ // one of its children for which we need to set the background
+ // brush, e.g. this is the case for the EDIT control that is part
+ // of wxComboBox. Check for this by asking the parent if it has it:
+ HWND parent = ::GetParent(hWnd);
+ if ( parent )
+ {
+ wxWindow *winParent = wxFindWinFromHandle( parent );
+ if( winParent && winParent->ContainsHWND( hWnd ) )
+ win = winParent;
+ }
+ }
+
+ if ( win )
hbr = win->MSWGetBgBrush(pDC);
// if the control doesn't have any bg colour, foreground colour will be