X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/79d26b329ee395e73d4dcc34d2519d15bf0dd280..5ed738a766bb06539893bd424759e75926c43e15:/src/msw/textctrl.cpp?ds=inline diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index 7d2875e37c..eb7c59e6ec 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -234,21 +234,6 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, if ( m_windowStyle & wxTE_NOHIDESEL ) msStyle |= ES_NOHIDESEL; - // we always want the characters and the arrows - m_lDlgCode = DLGC_WANTCHARS | DLGC_WANTARROWS; - - // we may have several different cases: - // 1. normal case: both TAB and ENTER are used for dialog navigation - // 2. ctrl which wants TAB for itself: ENTER is used to pass to the next - // control in the dialog - // 3. ctrl which wants ENTER for itself: TAB is used for dialog navigation - // 4. ctrl which wants both TAB and ENTER: Ctrl-ENTER is used to pass to - // the next control - if ( m_windowStyle & wxTE_PROCESS_ENTER ) - m_lDlgCode |= DLGC_WANTMESSAGE; - if ( m_windowStyle & wxTE_PROCESS_TAB ) - m_lDlgCode |= DLGC_WANTTAB; - // do create the control - either an EDIT or RICHEDIT wxString windowClass = wxT("EDIT"); @@ -525,7 +510,7 @@ DWORD CALLBACK wxRichEditStreamIn(DWORD dwCookie, BYTE *buf, LONG cb, LONG *pcb) return 0; } -extern long wxEncodingToCodepage(wxFontEncoding encoding); // from strconv.cpp +extern long wxEncodingToCodepage(wxFontEncoding encoding); // from utils.cpp #if wxUSE_UNICODE_MSLU bool wxTextCtrl::StreamIn(const wxString& value, @@ -552,9 +537,15 @@ bool wxTextCtrl::StreamIn(const wxString& value, // next translate to Unicode using this code page int len = ::MultiByteToWideChar(codepage, 0, value, -1, NULL, 0); + +#if wxUSE_WCHAR_T wxWCharBuffer wchBuf(len); +#else + wchar_t *wchBuf = (wchar_t *)malloc((len + 1)*sizeof(wchar_t)); +#endif + if ( !::MultiByteToWideChar(codepage, 0, value, -1, - (wchar_t *)wchBuf.data(), len) ) + (wchar_t *)(const wchar_t *)wchBuf, len) ) { wxLogLastError(_T("MultiByteToWideChar")); } @@ -576,10 +567,12 @@ bool wxTextCtrl::StreamIn(const wxString& value, (LPARAM)&eds) || eds.dwError ) { wxLogLastError(_T("EM_STREAMIN")); - - return FALSE; } +#if !wxUSE_WCHAR_T + free(wchBuf); +#endif // !wxUSE_WCHAR_T + return TRUE; } @@ -1094,7 +1087,7 @@ bool wxTextCtrl::MSWShouldPreProcessMessage(WXMSG* pMsg) // usual preprocessing for them if ( msg->message == WM_KEYDOWN ) { - WORD vkey = msg->wParam; + WORD vkey = (WORD) msg->wParam; if ( (HIWORD(msg->lParam) & KF_ALTDOWN) == KF_ALTDOWN ) { if ( vkey == VK_BACK ) @@ -1165,6 +1158,32 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) event.Skip(); } +long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) +{ + // we always want the characters and the arrows + if ( nMsg == WM_GETDLGCODE ) + { + // we always want the chars and the arrows + long lDlgCode = DLGC_WANTCHARS | DLGC_WANTARROWS; + + // we may have several different cases: + // 1. normal case: both TAB and ENTER are used for dialog navigation + // 2. ctrl which wants TAB for itself: ENTER is used to pass to the next + // control in the dialog + // 3. ctrl which wants ENTER for itself: TAB is used for dialog navigation + // 4. ctrl which wants both TAB and ENTER: Ctrl-ENTER is used to pass to + // the next control + if ( m_windowStyle & wxTE_PROCESS_ENTER ) + lDlgCode |= DLGC_WANTMESSAGE; + if ( m_windowStyle & wxTE_PROCESS_TAB ) + lDlgCode |= DLGC_WANTTAB; + + return lDlgCode; + } + + return wxTextCtrlBase::MSWWindowProc(nMsg, wParam, lParam); +} + bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) { switch (param) @@ -1418,7 +1437,7 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event) // EN_LINK processing // ---------------------------------------------------------------------------- -bool wxTextCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) +bool wxTextCtrl::MSWOnNotify(int WXUNUSED(idCtrl), WXLPARAM lParam, WXLPARAM *result) { NMHDR *hdr = (NMHDR* )lParam; if ( hdr->code == EN_LINK ) @@ -1693,18 +1712,18 @@ bool wxRichEditModule::Load(int version) // make it the index in the array version--; - if ( ms_hRichEdit[version] ) - { - // we've already got this one - return TRUE; - } - if ( ms_hRichEdit[version] == (HINSTANCE)-1 ) { // we had already tried to load it and failed return FALSE; } + if ( ms_hRichEdit[version] ) + { + // we've already got this one + return TRUE; + } + wxString dllname = version ? _T("riched20") : _T("riched32"); dllname += _T(".dll");