【20分】C语言程序 如何响应点击鼠标左键的操作 70
C语言程序如何响应点击鼠标左键的操作例如一个FlappyBirds游戏,想要响应鼠标左键的点击向上飞,类似于键盘的W键,这个该如何操作?越详细越好,3Q...
C语言程序 如何响应点击鼠标左键的操作
例如一个Flappy Birds游戏,想要响应鼠标左键的点击向上飞,类似于键盘的W键,这个该如何操作?
越详细越好,3Q 展开
例如一个Flappy Birds游戏,想要响应鼠标左键的点击向上飞,类似于键盘的W键,这个该如何操作?
越详细越好,3Q 展开
1个回答
展开全部
C语言中键盘扫描码 就是利用bioskey()得到的值。
参数为0时,bioskey()的返回值如果低八位非0,表示按下了普通键;如果低八位为0,表示按下了功能键。
参数为1时,检测有没有键被按下,如果返回值为0,表示没有键按下,相反有键按下。
参数为2时,表示获取变换键的状态,哪些是变换键呢?变换键包括双态键和控制键,双态键就是num lock、scroll lock、insert和caps lock,控制键就是左右shift、ctrl和alt,返回值的低八位反映了这些变换键的状态:
0x01 右边shift
0x02 左边shift
0x04 ctrl键
0x08 alt键
0x10 scroll lock打开
0x20 num lock打开
0x40 caps lock打开
0x80 insert打开
其实bioskey直接调用bios的int 16h键盘I/O中断,直接就是int 16h的完整翻版。
键盘扫描码大全
对程序进行键盘控制时,往往要用到一些键的扫描码,以前每次用时都得先扫下试试,实在麻烦,今天又搞了个小程序,用
到了扫描码,索性整了个测试程序,把所有键的扫描码全存入一个文件啦,以便以后编程时使用.在此跟大家分享一下,虽
然得来非常容易,但至少可以免得大家都像我以前那样用时再查
扫描码 键
0x011b ESC
0x3b00 F1
0x3c00 F2
0x3d00 F3
0x3e00 F4
0x3f00 F5
0x4000 F6
0x4100 F7
0x4200 F8
0x4300 F9
0x4400 F10
主键盘区:
0x2960 ~
0x0231 1
0x0332 2
0x0433 3
0x0534 4
0x0635 5
0x0736 6
0x0837 7
0x0938 8
0x0a39 9
0x0b30 0
0x0c2d -
0x0d3d =
0x2b5c \
0x0e08 退格键
0x0f09 Tab
0x1071 q
0x1177 w
0x1265 e
0x1372 r
0x1474 t
0x1579 y
0x1675 u
0x1769 i
0x186f o
0x1970 p
0x1a5b [
0x1b5d ]
0x1e61 a
0x1f73 s
0x2064 d
0x2166 f
0x2267 g
0x2368 h
0x246a j
0x256b k
0x266c l
0x273b ;
0x2827 '
0x1c0d 回车
0x2c7a z
0x2d78 x
0x2e63 c
0x2f76 v
0x3062 b
0x316e n
0x326d m
0x332c ,
0x342e .
0x352f /
0x3920 空格键
右边数字键盘:
0x5200 Insert
0x4700 Home
0x4900 Page UP
0x5300 Delete
0x4f00 End
0x5100 PageDown
0x4800 上箭头
0x4b00 左箭头
0x5000 下箭头
0x4d00 右箭头
0x352f /
0x372a *
0x4a2d - (注意,这是数字键盘的)
0x4737 7
0x4838 8
0x4939 9
0x4b34 4
0x4c35 5
0x4d36 6
0x4e2b +
0x4f31 1
0x5032 2
0x5133 3
0x5230 0
0x532e Del
Ctrl+字母: 在字母扫描码的基础上减去0x0060
alt+字母: 在字母的基础上,把最后两位变成00
shift+字母: 在字母的基础上减去0x0020
比如: a----0x1e61 Ctrl+a----0x1e01 Alt+a-----0x1e00
b----0x3062 Ctrl+b----0x3002 Alt+b-----0x3000
另加: Ctrl+Enter: 0x1c0a
可以直接用一个程序查看的 很简单的
#include <stdio.h>
#include <bios.h>
void main(void)
{
int key, modifiers;
while ((key=bioskey(0)) != 0 && key!=0x11b){
printf("0x%x \n",key);
}
}
*********************************************************************************************
参数为0时,bioskey()的返回值如果低八位非0,表示按下了普通键;如果低八位为0,表示按下了功能键。
参数为1时,检测有没有键被按下,如果返回值为0,表示没有键按下,相反有键按下。
参数为2时,表示获取变换键的状态,哪些是变换键呢?变换键包括双态键和控制键,双态键就是num lock、scroll lock、insert和caps lock,控制键就是左右shift、ctrl和alt,返回值的低八位反映了这些变换键的状态:
0x01 右边shift
0x02 左边shift
0x04 ctrl键
0x08 alt键
0x10 scroll lock打开
0x20 num lock打开
0x40 caps lock打开
0x80 insert打开
其实bioskey直接调用bios的int 16h键盘I/O中断,直接就是int 16h的完整翻版。
键盘扫描码大全
对程序进行键盘控制时,往往要用到一些键的扫描码,以前每次用时都得先扫下试试,实在麻烦,今天又搞了个小程序,用
到了扫描码,索性整了个测试程序,把所有键的扫描码全存入一个文件啦,以便以后编程时使用.在此跟大家分享一下,虽
然得来非常容易,但至少可以免得大家都像我以前那样用时再查
扫描码 键
0x011b ESC
0x3b00 F1
0x3c00 F2
0x3d00 F3
0x3e00 F4
0x3f00 F5
0x4000 F6
0x4100 F7
0x4200 F8
0x4300 F9
0x4400 F10
主键盘区:
0x2960 ~
0x0231 1
0x0332 2
0x0433 3
0x0534 4
0x0635 5
0x0736 6
0x0837 7
0x0938 8
0x0a39 9
0x0b30 0
0x0c2d -
0x0d3d =
0x2b5c \
0x0e08 退格键
0x0f09 Tab
0x1071 q
0x1177 w
0x1265 e
0x1372 r
0x1474 t
0x1579 y
0x1675 u
0x1769 i
0x186f o
0x1970 p
0x1a5b [
0x1b5d ]
0x1e61 a
0x1f73 s
0x2064 d
0x2166 f
0x2267 g
0x2368 h
0x246a j
0x256b k
0x266c l
0x273b ;
0x2827 '
0x1c0d 回车
0x2c7a z
0x2d78 x
0x2e63 c
0x2f76 v
0x3062 b
0x316e n
0x326d m
0x332c ,
0x342e .
0x352f /
0x3920 空格键
右边数字键盘:
0x5200 Insert
0x4700 Home
0x4900 Page UP
0x5300 Delete
0x4f00 End
0x5100 PageDown
0x4800 上箭头
0x4b00 左箭头
0x5000 下箭头
0x4d00 右箭头
0x352f /
0x372a *
0x4a2d - (注意,这是数字键盘的)
0x4737 7
0x4838 8
0x4939 9
0x4b34 4
0x4c35 5
0x4d36 6
0x4e2b +
0x4f31 1
0x5032 2
0x5133 3
0x5230 0
0x532e Del
Ctrl+字母: 在字母扫描码的基础上减去0x0060
alt+字母: 在字母的基础上,把最后两位变成00
shift+字母: 在字母的基础上减去0x0020
比如: a----0x1e61 Ctrl+a----0x1e01 Alt+a-----0x1e00
b----0x3062 Ctrl+b----0x3002 Alt+b-----0x3000
另加: Ctrl+Enter: 0x1c0a
可以直接用一个程序查看的 很简单的
#include <stdio.h>
#include <bios.h>
void main(void)
{
int key, modifiers;
while ((key=bioskey(0)) != 0 && key!=0x11b){
printf("0x%x \n",key);
}
}
*********************************************************************************************
更多追问追答
追问
亲,是鼠标的操作,不是键盘
追答
符号常量 十六进制值 指定的鼠标按键
VK_LBUTTON 01 鼠标左键 VK_RBUTTON 02 鼠标右键
VK_CANCEL 03 Control-break 过程 VK_MBUTTON 04 鼠标中键
===============================
首先了解一下鼠标的中断。
_AX=0x01 表示显示光标 _AX=0x02 停止显示光标
_A X=0x03 读取光标位置与案件 _AX=0x04 设置光标位置
所以啊。根据这四个中断,有以下几个函数
void MouseOn(void)//鼠标光标显示
{
_AX = 0x01;
geninterrupt(0x33);
}
void MouseOff(void)//鼠标光标隐藏
{
_AX = 0x02;
geninterrupt(0x33);
}
---------------------------------------------------
void MouseSetXY(int x,int y)//设置当前位置
{
_CX = x,
_CD = y;
_AX = 0x04;
geninterrupt(0x33);
}
---------------------------------------------------
int LeftPress(void)//鼠标左键按下
{
_AX = 0x33;
geninterrupt(0x33);
return(_BX&1);
}
-----------------------------------------------------
鼠标右键的应该也会了吧。不过要return(_BX&2);
-----------------------------------------------------
void MouseGetXY(void)//得到当前位置
{
_AX = 0x33;
geninterrupt(0x33);
MouseX = _CX;
MouseY = _DX;
}
---------------------------------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询