首先定义API函数
const
int
EM_GETSEL
=
0xB0
;
const int EM_LINEFROMCHAR = 0xC9 ;
const int EM_LINEINDEX = 0xBB ;
[DllImport( " user32.dll " , EntryPoint = " SendMessage " )]
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
ref int lParam
);
const int EM_LINEFROMCHAR = 0xC9 ;
const int EM_LINEINDEX = 0xBB ;
[DllImport( " user32.dll " , EntryPoint = " SendMessage " )]
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
ref int lParam
);
获取位置的函数
private
Point GetCursorPos(
int
TextHwnd)
{
int i = 0 , j = 0 , k = 0 ;
int lParam = 0 , wParam = 0 ;
i = SendMessage(TextHwnd, EM_GETSEL, wParam, ref lParam);
j = i / 65536 ;
int lineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, ref lParam) + 1 ;
k = SendMessage(TextHwnd, EM_LINEINDEX, - 1 , ref lParam);
int colNo = j - k + 1 ;
Point ret = new Point(lineNo, colNo);
return ret;
}
{
int i = 0 , j = 0 , k = 0 ;
int lParam = 0 , wParam = 0 ;
i = SendMessage(TextHwnd, EM_GETSEL, wParam, ref lParam);
j = i / 65536 ;
int lineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, ref lParam) + 1 ;
k = SendMessage(TextHwnd, EM_LINEINDEX, - 1 , ref lParam);
int colNo = j - k + 1 ;
Point ret = new Point(lineNo, colNo);
return ret;
}
完整代码如下:
using
System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace CSWin
{
public partial class Form1 : Form
{
const int EM_GETSEL = 0xB0 ;
const int EM_LINEFROMCHAR = 0xC9 ;
const int EM_LINEINDEX = 0xBB ;
[DllImport( " user32.dll " , EntryPoint = " SendMessage " )]
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
ref int lParam
);
private Point GetCursorPos( int TextHwnd)
{
int i = 0 , j = 0 , k = 0 ;
int lParam = 0 , wParam = 0 ;
i = SendMessage(TextHwnd, EM_GETSEL, wParam, ref lParam);
j = i / 65536 ;
int lineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, ref lParam) + 1 ;
k = SendMessage(TextHwnd, EM_LINEINDEX, - 1 , ref lParam);
int colNo = j - k + 1 ;
Point ret = new Point(lineNo, colNo);
return ret;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click( object sender, EventArgs e)
{
Point p = GetCaretPos( this .textBox1.Handle.ToInt32());
this .label1.Text = string .Format( " Line:{0}, Col:{1} " , p.X, p.Y);
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace CSWin
{
public partial class Form1 : Form
{
const int EM_GETSEL = 0xB0 ;
const int EM_LINEFROMCHAR = 0xC9 ;
const int EM_LINEINDEX = 0xBB ;
[DllImport( " user32.dll " , EntryPoint = " SendMessage " )]
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
ref int lParam
);
private Point GetCursorPos( int TextHwnd)
{
int i = 0 , j = 0 , k = 0 ;
int lParam = 0 , wParam = 0 ;
i = SendMessage(TextHwnd, EM_GETSEL, wParam, ref lParam);
j = i / 65536 ;
int lineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, ref lParam) + 1 ;
k = SendMessage(TextHwnd, EM_LINEINDEX, - 1 , ref lParam);
int colNo = j - k + 1 ;
Point ret = new Point(lineNo, colNo);
return ret;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click( object sender, EventArgs e)
{
Point p = GetCaretPos( this .textBox1.Handle.ToInt32());
this .label1.Text = string .Format( " Line:{0}, Col:{1} " , p.X, p.Y);
}
}
}