#if wxUSE_COMBOBOX
+#include "wx/combobox.h"
+
#ifndef WX_PRECOMP
#include "wx/settings.h"
#include "wx/log.h"
// for wxEVT_COMMAND_TEXT_ENTER
#include "wx/textctrl.h"
+ #include "wx/app.h"
+ #include "wx/brush.h"
#endif
-#include "wx/app.h"
-#include "wx/combobox.h"
-#include "wx/brush.h"
#include "wx/clipbrd.h"
#include "wx/msw/private.h"
+// include <commctrl.h> "properly"
+#include "wx/msw/wrapcctl.h"
+
#if wxUSE_TOOLTIPS
- #if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__)
- #include <commctrl.h>
- #endif
#include "wx/tooltip.h"
#endif // wxUSE_TOOLTIPS
}
break;
- // deal with tooltips here
-#if wxUSE_TOOLTIPS && defined(TTN_NEEDTEXT)
- case WM_NOTIFY:
- {
- wxCHECK_MSG( win, 0, _T("should have a parent") );
-
- NMHDR* hdr = (NMHDR *)lParam;
- if ( hdr->code == TTN_NEEDTEXT )
- {
- wxToolTip *tooltip = win->GetToolTip();
- if ( tooltip )
- {
- TOOLTIPTEXT *ttt = (TOOLTIPTEXT *)lParam;
- ttt->lpszText = (wxChar *)tooltip->GetTip().c_str();
- }
-
- // processed
- return 0;
- }
- }
+ case WM_CUT:
+ case WM_COPY:
+ case WM_PASTE:
+ if( win->HandleClipboardEvent( message ) )
+ return 0;
break;
-#endif // wxUSE_TOOLTIPS
}
return ::CallWindowProc(CASTWNDPROC gs_wndprocEdit, hWnd, message, wParam, lParam);
if ( wParam == VK_RETURN )
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
- InitCommandEvent(event);
+
+ const int sel = GetSelection();
+ event.SetInt(sel);
event.SetString(GetValue());
- event.SetInt(GetSelection());
+ InitCommandEventWithItems(event, sel);
+
if ( ProcessCommand(event) )
{
// don't let the event through to the native control
// 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.SetEventObject(this);
event.SetInt(sel);
event.SetString(value);
+ InitCommandEventWithItems(event, sel);
+
ProcessCommand(event);
}
case CBN_EDITCHANGE:
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, GetId());
- event.SetEventObject(this);
// if sel != -1, value was already initialized above
if ( sel == -1 )
}
event.SetString(value);
+ InitCommandEventWithItems(event, sel);
+
ProcessCommand(event);
}
break;