X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eedc82f4e96c7f8f0b24addbfd6b4429c9587631..118322a3dfcc1803bd13df8193ea1be9ae39e653:/src/msw/textctrl.cpp diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index c4c015a3df..00ff8362af 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -245,12 +245,9 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, #endif // base initialization - if ( !CreateBase(parent, id, pos, size, style, validator, name) ) + if ( !CreateControl(parent, id, pos, size, style, validator, name) ) return FALSE; - if ( parent ) - parent->AddChild(this); - // translate wxWin style flags to MSW ones WXDWORD msStyle = MSWGetCreateWindowFlags(); @@ -461,7 +458,12 @@ WXDWORD wxTextCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const if ( style & wxTE_DONTWRAP ) { // automatically scroll the control horizontally as necessary - msStyle |= WS_HSCROLL; + // + // NB: ES_AUTOHSCROLL is needed for richedit controls or they don't + // show horz scrollbar at all, even in spite of WS_HSCROLL, and as + // it doesn't seem to do any harm for plain edit controls, add it + // always + msStyle |= WS_HSCROLL | ES_AUTOHSCROLL; } if ( style & wxTE_READONLY ) @@ -1359,7 +1361,7 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const } wxTextCtrlHitTestResult -wxTextCtrl::HitTest(const wxPoint& pt, wxTextCoord *col, wxTextCoord *row) const +wxTextCtrl::HitTest(const wxPoint& pt, long *posOut) const { // first get the position from Windows LPARAM lParam; @@ -1438,11 +1440,8 @@ wxTextCtrl::HitTest(const wxPoint& pt, wxTextCoord *col, wxTextCoord *row) const else rc = wxTE_HT_ON_TEXT; - // finally translate to column/row - if ( !PositionToXY(pos, col, row) ) - { - wxFAIL_MSG( _T("PositionToXY() not expected to fail in HitTest()") ); - } + if ( posOut ) + *posOut = pos; return rc; } @@ -1533,6 +1532,11 @@ wxString wxTextCtrl::GetLineText(long lineNo) const void wxTextCtrl::SetMaxLength(unsigned long len) { +#if wxUSE_RICHEDIT + if (IsRich()) + ::SendMessage(GetHwnd(), EM_EXLIMITTEXT, 0, (LPARAM) (DWORD) len); + else +#endif ::SendMessage(GetHwnd(), EM_LIMITTEXT, len, 0); } @@ -1552,6 +1556,11 @@ void wxTextCtrl::Redo() { if (CanRedo()) { +#if wxUSE_RICHEDIT + if (GetRichVersion() > 1) + ::SendMessage(GetHwnd(), EM_REDO, 0, 0); + else +#endif // Same as Undo, since Undo undoes the undo, i.e. a redo. ::SendMessage(GetHwnd(), EM_UNDO, 0, 0); } @@ -1564,6 +1573,11 @@ bool wxTextCtrl::CanUndo() const bool wxTextCtrl::CanRedo() const { +#if wxUSE_RICHEDIT + if (GetRichVersion() > 1) + return ::SendMessage(GetHwnd(), EM_CANREDO, 0, 0) != 0; + else +#endif return ::SendMessage(GetHwnd(), EM_CANUNDO, 0, 0) != 0; } @@ -1927,7 +1941,7 @@ bool wxTextCtrl::AcceptsFocus() const wxSize wxTextCtrl::DoGetBestSize() const { int cx, cy; - wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); + wxGetCharSize(GetHWND(), &cx, &cy, GetFont()); int wText = DEFAULT_ITEM_WIDTH;