X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a2634d81408605044dc10f711a1df4ee9a7f87e2..0bd2681966523df88ad5cf8e505b532843e58d74:/src/msw/combobox.cpp diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index c85fcede27..9a3f40c653 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -87,7 +87,7 @@ wxBEGIN_FLAGS( wxComboBoxStyle ) wxEND_FLAGS( wxComboBoxStyle ) -IMPLEMENT_DYNAMIC_CLASS_XTI(wxComboBox, wxControl,"wx/combobox.h") +IMPLEMENT_DYNAMIC_CLASS_XTI(wxComboBox, wxChoice,"wx/combobox.h") wxBEGIN_PROPERTIES_TABLE(wxComboBox) wxEVENT_PROPERTY( Select , wxEVT_COMMAND_COMBOBOX_SELECTED , wxCommandEvent ) @@ -108,7 +108,7 @@ wxCONSTRUCTOR_5( wxComboBox , wxWindow* , Parent , wxWindowID , Id , wxString , #else -IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl) +IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxChoice) #endif @@ -265,7 +265,7 @@ bool wxComboBox::MSWProcessEditMsg(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam) { if (SendMessage(GetHwnd(), CB_GETDROPPEDSTATE, 0, 0)) return false; - + wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); const int sel = GetSelection(); @@ -326,7 +326,7 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) // 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); + ::SetWindowText(GetHwnd(), value.wx_str()); { wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, GetId()); @@ -364,7 +364,31 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) // skip wxChoice version as it would generate its own events for // CBN_SELENDOK - return wxControl::MSWCommand(param, id); + return true; +} + +bool wxComboBox::MSWShouldPreProcessMessage(WXMSG *pMsg) +{ + // prevent command accelerators from stealing editing + // hotkeys when we have the focus + if (wxIsCtrlDown()) + { + WPARAM vkey = pMsg->wParam; + + switch (vkey) + { + case 'C': + case 'V': + case 'X': + case VK_INSERT: + case VK_DELETE: + case VK_HOME: + case VK_END: + return false; + } + } + + return wxChoice::MSWShouldPreProcessMessage(pMsg); } WXHWND wxComboBox::GetEditHWND() const @@ -656,7 +680,7 @@ void wxComboBox::Replace(long from, long to, const wxString& value) Remove(from, to); // Now replace with 'value', by pasting. - wxSetClipboardData(wxDF_TEXT, (wxObject *)(const wxChar *)value, 0, 0); + wxSetClipboardData(wxDF_TEXT, (wxObject *)value.wx_str(), 0, 0); // Paste into edit control SendMessage(GetHwnd(), WM_PASTE, (WPARAM)0, (LPARAM)0L);