现在的位置: 首页 > 综合 > 正文

C#获取光标位置

2014年08月03日 ⁄ 综合 ⁄ 共 1861字 ⁄ 字号 评论关闭

/* 获得多文本光标位置
 * 本文转自  http://blog.163.com/yl32940@126/blog/static/50356084201312614191/
 */

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices; //引用钩子

namespace 测试版11
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.richTextBox1.Text = "sdfdsfsdfsdfsdg你\nsdkfopdksfo 

kldkf;lsdkf;ldsk;flkd;sk;dlsk;sdgsddddddddddddddddddd";
        }

        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(
           int hwnd,
           int wMsg,
           int wParam,
           ref int lParam
        );

        int EM_LINEINDEX = 0xBB;
        int EM_LINEFROMCHAR = 0xC9;
        int EM_GETSEL = 0xB0;
        int EM_GETLINE = 0xC4;

        /*
        private void button1_Click(object sender, EventArgs e)
        {
            Point p = GetCursorPos(this.richTextBox1.Handle.ToInt32());//文本句柄
            //this.textBox1.Text = string.Format("第:{0}行, 第:{1}列", p.X, p.Y);
            this.textBox1.Text = string.Format("Line:{0}, Col:{1}", p.X, p.Y);
        }  //*/

         //鼠标单击 richTextBox1.text事件
        private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            Point p = GetCursorPos(this.richTextBox1.Handle.ToInt32());
            this.textBox1.Text = string.Format("第:{0}行, 第:{1}列", p.X, p.Y);
        }

        //释放键时发生,键盘响应事件
        private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
        {
            Point p = GetCursorPos(this.richTextBox1.Handle.ToInt32());
            this.textBox1.Text = string.Format("第:{0}行, 第:{1}列", p.X, p.Y);
        }

        //获取位置的函数
        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;
        }

    }

}

如果这些都不是你想要的,请到
这里
看一下

抱歉!评论已关闭.