天天看點

如何得到 TextBox 或 richTextBox 的目前輸入光标的螢幕坐标

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 void GetCaretPos(int TextHwnd, ref int LineNo, ref int ColNo)

{

int i = 0, j = 0, lParam = 0, wParam = 0, k = 0;

i = SendMessage(TextHwnd, EM_GETSEL, wParam, ref lParam);

j = i / 65536;

LineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, ref lParam) + 1;

k = SendMessage(TextHwnd, EM_LINEINDEX, -1, ref lParam);

ColNo = j - k + 1;

}

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

int lineNo = 0, colNo = 0;

GetCaretPos(this.textBox1.Handle.ToInt32(), ref lineNo, ref colNo);

this.label1.Text = string.Format("Line:{0}, Col:{1}", lineNo, colNo);

}

}

繼續閱讀