X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c64755ed1ad825e3a5b6ddc71bc77e8f25fc5999..ce7208d49d5ce2ca1dc0b3b83f14f1d04f29c4bf:/src/msw/combobox.cpp?ds=sidebyside diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index 2648bd8024..c85fcede27 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -29,6 +29,7 @@ #include "wx/combobox.h" #ifndef WX_PRECOMP + #include "wx/msw/wrapcctl.h" // include "properly" #include "wx/settings.h" #include "wx/log.h" // for wxEVT_COMMAND_TEXT_ENTER @@ -41,9 +42,6 @@ #include "wx/msw/private.h" #if wxUSE_TOOLTIPS - #if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__) - #include - #endif #include "wx/tooltip.h" #endif // wxUSE_TOOLTIPS @@ -265,6 +263,9 @@ bool wxComboBox::MSWProcessEditMsg(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam) // when Enter is pressed if ( wParam == VK_RETURN ) { + if (SendMessage(GetHwnd(), CB_GETDROPPEDSTATE, 0, 0)) + return false; + wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); const int sel = GetSelection(); @@ -321,6 +322,12 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) // CBN_EDITCHANGE below sel = GetSelection(); value = GetStringSelection(); + + // this string is going to become the new combobox value soon but + // we need it to be done right now, otherwise the event handler + // could get a wrong value when it calls our GetValue() + ::SetWindowText(GetHwnd(), value); + { wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, GetId()); event.SetInt(sel); @@ -411,8 +418,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, // edit control, we must subclass it as well if ( !(style & wxCB_READONLY) ) { - gs_wndprocEdit = wxSetWindowProc((HWND)GetEditHWND(), - wxComboEditWndProc); + gs_wndprocEdit = wxSetWindowProc((HWND)GetEditHWND(), wxComboEditWndProc); } // and finally, show the control @@ -589,11 +595,13 @@ bool wxComboBox::IsEditable() const return !HasFlag(wxCB_READONLY); } -void wxComboBox::SetEditable(bool WXUNUSED(editable)) +void wxComboBox::SetEditable(bool editable) { - // Can't implement in MSW? -// HWND hWnd = GetHwnd(); -// SendMessage(hWnd, EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L); + HWND hWnd = (HWND)GetEditHWND(); + if ( !::SendMessage(hWnd, EM_SETREADONLY, !editable, 0) ) + { + wxLogLastError(_T("SendMessage(EM_SETREADONLY)")); + } } void wxComboBox::SetInsertionPoint(long pos) @@ -601,7 +609,6 @@ void wxComboBox::SetInsertionPoint(long pos) if ( GetWindowStyle() & wxCB_READONLY ) return; -#ifdef __WIN32__ HWND hWnd = GetHwnd(); ::SendMessage(hWnd, CB_SETEDITSEL, 0, MAKELPARAM(pos, pos)); HWND hEditWnd = (HWND) GetEditHWND(); @@ -612,7 +619,6 @@ void wxComboBox::SetInsertionPoint(long pos) // Why is this necessary? (Copied from wxTextCtrl::SetInsertionPoint) SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM) wxEmptyString); } -#endif // __WIN32__ } void wxComboBox::SetInsertionPointEnd()