怎样能得到 TextBox 或 richTextBox 的当前输入光标的屏幕坐标??

解决方案 »

  1.   

    my god!
    这个问题也把我头搞痛了,
    我是定位FLEXCELL控件cell格子里光标的位置,建议你用FLEXCELL控件做TextBox,它可定位光标在什么位置(第几个字符),但光标的屏幕坐标
    e. 我没试成。FLEXCELL控件有点贵。扯远了。
      

  2.   

    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);
    }
    }
    }
      

  3.   

    控件银改提供了PointToScreen方法(c#的,比如this.PointToScreen)   
      如果没有使用ClientToScreen   这个api得到 当前控件在屏幕上的绝对座标~然后再计算在richTextBox的光标位置
    http://www.itwen.com/07prog/02cc/cc20060122/21995.html算出来屏幕座标