注册 登录
编程论坛 VC++/MFC

yu版进来瞧瞧 这个textbox控件的keypress事件 为啥只响应主键盘的事件呢,我想让它响应副键盘的建 怎么做 比如 上下左右 四个方向键

wp231957 发布于 2013-08-15 10:17, 2025 次点击
程序代码:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            int EM_LINEFROMCHAR = 0xC9;
            int Row = (int)SendMessage(textBox1.Handle, EM_LINEFROMCHAR, -1, 0);
            int j = (int)SendMessage(textBox1.Handle, 0xB0, 0, 0) / 65536;
            int k = (int)SendMessage(textBox1.Handle, 0xBB, -1, 0);
            int m = j - k + 1;
            this.toolStripStatusLabel1.Text = "当前光标:" + Row + "" + " " + m + "";
        }


[ 本帖最后由 wp231957 于 2013-8-15 10:18 编辑 ]
9 回复
#2
yuccn2013-08-15 12:33
你这个是什么代码?不像是c、VC的,C#?,表示不懂

1 、会不会是你的副键盘 没有开启状态?
2 、textBox1_KeyPress 这个是被封装过了的吧,我不确定是否所有的键盘时间都会进入这个函数

可以用Spy++来抓取一下窗口消息,设置指抓取键盘消息就行了,按键盘时候看看Spy++能够抓取到副键盘的消息,如果不能抓去到,就说明窗口根本没有收到消息了。如果能够抓去到,估计那消息事件是没有进入该函数了。如果这样,可以试试自己接管窗口的消息来捕获,通过自己过滤键盘消息来相应你的事件了
#3
wp2319572013-08-15 12:53
c#   谢谢了  我再看看   

我想做的事情就是模仿记事本  在文本编辑框里  移动鼠标 或键盘移动光标  能再状态栏里显示当前的行 列 值

现在鼠标的能做到了  主键盘输入也能做到了  但是 方向键的移动却是实现不了
#4
yuccn2013-08-15 12:54
这有一篇文章,看看是否你想找的:
http://www.

[ 本帖最后由 yuccn 于 2013-8-15 12:59 编辑 ]
#5
wp2319572013-08-15 12:58
以下是引用yuccn在2013-8-15 12:54:01的发言:

这有一篇文章,看看是否你想找的:
http://www.
   嗯  还真是那么回事   以后再研究了  (暂时有点看不懂  呵呵)
#6
yuccn2013-08-15 13:00
回复 5楼 wp231957
http://hi.baidu.com/caixiexin/item/0baac4cab5da91d497445221

C#我 不懂,读书时候看过一点点语法,之后没有碰过 了
#7
yuccn2013-08-15 13:02
建议万版 如果实现了,写一些心得在C#板块,以后说不定给后来人少走点弯路
#8
wp2319572013-08-15 13:11
程序代码:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            int EM_LINEFROMCHAR = 0xC9;
            int Row = (int)SendMessage(textBox1.Handle, EM_LINEFROMCHAR, -1, 0) + 1;
            int j = (int)SendMessage(textBox1.Handle, 0xB0, 0, 0) / 65536;
            int k = (int)SendMessage(textBox1.Handle, 0xBB, -1, 0);
            int m = j - k + 1;
            this.toolStripStatusLabel1.Text = "当前光标:" + Row + "" + " " + m + "";

        }

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            int EM_LINEFROMCHAR = 0xC9;
            int Row = (int)SendMessage(textBox1.Handle, EM_LINEFROMCHAR, -1, 0) + 1;
            int j = (int)SendMessage(textBox1.Handle, 0xB0, 0, 0) / 65536;
            int k = (int)SendMessage(textBox1.Handle, 0xBB, -1, 0);
            int m = j - k + 1;
            this.toolStripStatusLabel1.Text = "当前光标:" + Row + "" + " " + m + "";

        }
也没啥心得了   把这2个事件都写上  就实现 目标了  可以用方向键移动位置的同时   状态栏的行列位置也跟随改变
#9
yuccn2013-08-15 13:50
回复 8楼 wp231957
#10
yuccn2013-08-15 13:54
有个疑问:
如果你通过相应键盘事件来设置 this.toolStripStatusLabel1.Text,那么:

1 这样,岂不是也要对鼠标事件进行处理?如果在3行3列的时候,直接用鼠标把关闭挪到4行4列, this.toolStripStatusLabel1.Text能否显示正常?
2 通过拷贝数据之后粘贴到记事本的窗口, 行和列也会改变了的,你的 this.toolStripStatusLabel1.Text 会不会别改变?
1