Я пытаюсь использовать следующий код для получения индекса символа по позиции в RichTextBox . Я знаю, что могу использовать метод GetCharIndexFromPosition , предоставленный RichTextBox Class, но я хочу знать, что не так с кодом:
SendMessage это импорт:
[DllImport("User32.dll", EntryPoint = "SendMessage", CharSet= CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, ref POINTL lParam);
А потом этот звонок:
int returnVal = (int)WinUser.SendMessage(this._textBox.Handle, (int)WinUser.Message.EM_CHARFROMPOS, 0, ref p);
где p - экземпляр POINTL , содержащий координаты экрана с верхним левым углом RichTextBox в качестве источника.
Структура POINTL определяется как
[StructLayout(LayoutKind.Sequential)]
public struct POINTL
{
public long x;
public long y;
}
POINTL p было инициализировано как:
WinUser.POINTL p;
p.x = 0;
p.y = 0;
СЕЙЧАС ПРОБЛЕМА:
Если p инициализируется, как указано выше, returnVal равно 0
Если p - это что-то вроде { x = 10, y = 10} или { x = 1 и y = 1} returnVal равно 1
В обоих случаях функция GetCharIndexFromPosition дает правильный индекс.