# include <fstream>
#endif
-#if wxUSE_RICHEDIT && !defined(__GNUWIN32__)
+#if wxUSE_RICHEDIT && (!defined(__GNUWIN32__) || defined(wxUSE_NORLANDER_HEADERS))
#include <richedit.h>
#endif
const wxString& name)
{
// base initialization
- if ( !CreateBase(parent, id, pos, size, style, name) )
+ if ( !CreateBase(parent, id, pos, size, style, validator, name) )
return FALSE;
SetValidator(validator);
const wxChar *windowClass = _T("EDIT");
#if wxUSE_RICHEDIT
- // multiline edit controls are RICHEDITs except for those which have a
- // simple border (VZ: why??)
- if ( (m_windowStyle & wxTE_MULTILINE) &&
- !(m_windowStyle & wxSIMPLE_BORDER) )
+ if ( m_windowStyle & wxTE_RICH )
{
msStyle |= ES_AUTOVSCROLL;
m_isRich = TRUE;
return (long)(x + charIndex);
}
-void wxTextCtrl::PositionToXY(long pos, long *x, long *y) const
+bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const
{
HWND hWnd = GetHwnd();
// This gets the line number containing the character
- int lineNo = (int)SendMessage(hWnd, EM_LINEFROMCHAR, (WPARAM)pos, (LPARAM)0);
+ int lineNo;
+#if wxUSE_RICHEDIT
+ if ( m_isRich )
+ {
+ lineNo = (int)SendMessage(hWnd, EM_EXLINEFROMCHAR, 0, (LPARAM)pos);
+ }
+ else
+#endif // wxUSE_RICHEDIT
+ lineNo = (int)SendMessage(hWnd, EM_LINEFROMCHAR, (WPARAM)pos, 0);
+
+ if ( lineNo == -1 )
+ {
+ // no such line
+ return FALSE;
+ }
+
// This gets the char index for the _beginning_ of this line
int charIndex = (int)SendMessage(hWnd, EM_LINEINDEX, (WPARAM)lineNo, (LPARAM)0);
+ if ( charIndex == -1 )
+ {
+ return FALSE;
+ }
+
// The X position must therefore be the different between pos and charIndex
- *x = (long)(pos - charIndex);
- *y = (long)lineNo;
+ if ( x )
+ *x = (long)(pos - charIndex);
+ if ( y )
+ *y = (long)lineNo;
+
+ return TRUE;
}
void wxTextCtrl::ShowPosition(long pos)