From e558f9533e5e628efef8027b2434c00f3d4ed8cf Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Thu, 24 Sep 2009 13:33:41 +0000 Subject: [PATCH] Applied better/Win98-proof method of getting edit window git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62076 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/combobox.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index 7de89452e5..eda21ff9c6 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -443,16 +443,32 @@ WXHWND wxComboBox::GetEditHWNDIfAvailable() const // to keep one version of the code for all platforms and fix it later if // problems are discovered -#ifndef __WXWINCE__ - COMBOBOXINFO info; - info.cbSize = sizeof(COMBOBOXINFO); + typedef BOOL (WINAPI *GetComboBoxInfo_t)(HWND, COMBOBOXINFO*); + static GetComboBoxInfo_t s_pfnGetComboBoxInfo = NULL; + static bool s_triedToLoad = false; + if ( !s_triedToLoad ) + { + s_triedToLoad = true; + wxLoadedDLL dllUser32("user32.dll"); + wxDL_INIT_FUNC(s_pfn, GetComboBoxInfo, dllUser32); + } + + if ( s_pfnGetComboBoxInfo ) + { + WinStruct info; + (*s_pfnGetComboBoxInfo)(GetHwnd(), &info); + return info.hwndItem; + } + + if (HasFlag(wxCB_SIMPLE)) + { + POINT pt; + pt.x = pt.y = 4; + return (WXHWND) ::ChildWindowFromPoint(GetHwnd(), pt); + } - GetComboBoxInfo(GetHwnd(), & info); - return info.hwndItem; -#else // we assume that the only child of the combobox is the edit window return (WXHWND)::GetWindow(GetHwnd(), GW_CHILD); -#endif } WXHWND wxComboBox::GetEditHWND() const