鼠标----用过计算机的人,不会陌生吧~~
现在的操作系统都支持图形化,都已经离不开鼠标了,电脑的普及也是随着鼠标的
发明而开始的----至少可以这么说~
一般我们用鼠标,都是安装驱动程序,然后装上鼠标,设置一些参数(这一步当然装
时自动处理的).
但是我们这里讨论的不是怎么样安装鼠标驱动程序,而是用C来写也相关的操作,
然后把相关的操作应用到应用程序里.这
是对着应用程序来说的,比如说我们编一个程序,如何来把鼠标的应用放进来?
这就是一个应用上的问题了~(如果你编的是Windows程序,就免了)
在dos里,程序是通过中断33H可取鼠光标的位置和鼠标器的按钮状态,同时还能改变
鼠光标的颜色和形状......等等,其他相关操作,对于经常使用的功能有四个,四
个参数分别放在ax,bx,cx和dx四个寄存器内,从而使驱动程序的接口变得简单而
又规范.下面看一些具体实践,我们先设置一些函数,并规定其功能:
extern void mouse(int *m1,int *m2,int *m3,int *m4); //C语言直接调用鼠标驱动程序的办法
extern int check_mouse_driver(int need_mouse);//检查操作系统是否已经安装了鼠标
extern int init_mouse(int need_mouse,int gd,int gm);//初始化鼠标
extern int mouse_reset(void);//复位鼠标,如果鼠标是开的,关闭
extern void move_mouse(intx,inty);//把鼠标光标移到指定的屏幕文本位置上
//下面这两个函数等下说明:)
extern void mouse_on(int code);
extern void mouse_off(int code);
extern void move_grph_posn(int *x,int *y);//如果鼠标已经初始化,返回光标的图形坐标,没有初始化就返回(0,0)
extern void move_txt_posn(int *x,int *y);
/*C语言的文本座标从(1,1)开始 ,鼠标驱动程序返回的是图形座标,起点(0,0) 该鼠标函数总是把屏幕看成640*200像素*/
extern int mouse_in_box(int graphflay,int left,int right,int top,int bottom);//判断鼠标是否在指定的矩形框内
/*
下面三个函数的具体用途,用一个实例来表示:
一种典型的拖动鼠标的的过程总是通过函数button_press()开始,
在拖动过程中,不断通过函数button_state()检查状态,
最后通过函数button_release()结束过程
*/
extern int button_release(int b);
extern int button_press(int b);
extern int button_state(void);
/*
该函数查看键盘上的键是否按下,鼠标按钮是否曾经按过,或释放过,如果同时,
键盘优于鼠标,鼠标在操作过程中,左按钮优于右按钮
*/
extern int mouse_trigger(int button_dir);
通过说明,我们对上面的函数除了
extern void mouse_on(int code);
extern void mouse_off(int code);
不了解其功能外,其他的都应该能知道一点点了吧~~
下面就开始着手写相关操作了:
在写之前先定义一些宏,对于大部分人不必知道这些宏是什么意思
#include
#include
#include
#include
#include
#define lo(f) ((f)&0xff)
#define hi(f) ((lo(f>>8)
#define CTRLC 0x2E03
#define CTRLH 0x2308
#define CTRLI 0x1709
#define CTRLL 0x260C
#define CTRLK 0x250B
#define CTRLJ 0x260C
#define CTRLU 0x1615
#define CTRLR 0x1312
#define CRKEY 0x1C0D
#define CTRLCRKEY 0x1C0A
#define UPKEY 0x4800
#define DOWNKEY 0x5000
#define LEFTKEY 0x4B00
#define RIGHTKEY 0x4D00
#define SHIFTLEFT 0x4D34
#define SHIFTRIGHT 0x4D36
#define DELKEY 0x5300
#define INSKEY 0x5200
#define BSKEY 0x0E08
#define SPACEBAR 0x3920
#define PGUPKEY 0x4900
#define PGDNKEY 0x5100
#define SHFTUPKEY 0x4838
#define SHFTDNKEY 0x5032
#define SHFTGUPKEY 0x4939
#define SHFTGDNKEY 0x5133
#define HOMEKEY 0x4700
#define ENDKEY 0x4F00
#define ESCKEY 0x011B
#define ALT_D 0x2000
#define ALT_E 0x1200
#define ALT_I 0x1700
#define ALT_R 0x1300
#define ALT_S 0x1F00
#define ALT_T 0x1400
#define ALT_X 0x2D00
#define F10KEY 0x4400
#define LEFT_MOUSE_PRESS 0xFF01
#define RIGHT_MOUSE_PRESS 0xFF02
#define LEFT_MOUSE_REL 0xFF11
#define RIGHT_MOUSE_REL 0xFF12
#define M_RESET 0
#define M_SHOW_CURS 1
#define M_HIDE_CURS 2
#define M_GET_STATUS 3
#define M_SET_CURS 4
#define M_GET_PRESS 5
#define M_GET_REL 6
#define M_SET_X_BOUNDS 7
#define M_SET_Y_BOUNDS 8
#define M_SET_G_CURS 9
#define M_SET_T_CURS 10
#define MOUSE_NEEDED 1
#define MOUSE_OPTIONAL 0
#define MOUSE_TEXT_MODE 0
再定义一些变量:
extern int mouse_text_x;
extern int mouse_text_y;
extern int mouse_grph_x;
extern int mouse_grph_y;
extern int mouse_initialized;
int mouse_text_x;
int mouse_text_y;
int mouse_grph_x;
int mouse_grph_y;
int mouse_initialized;
static int prev_cursor_state=0;
static char far*bios_video_area=(char far*)0x00400049L;
static int low_resolution=0;
static int low_res_mode(int gd,int gm);
下面我们开始着手写相关函数的实现,按着上面给出程序的顺序,有不对或需要初充的请指出:)
//------------------------------------------------------
//01
void mouse(int *m1,int *m2,int *m3,int *m4)
{
union REGS inregs,outregs;
inregs.x.ax=*m1;
inregs.x.bx=*m2;
inregs.x.cx=*m3;
inregs.x.dx=*m4;
int86(0x33,&inregs,&outregs);
*m1=outregs.x.ax;
*m2=outregs.x.bx;
*m3=outregs.x.cx;
*m4=outregs.
现在的操作系统都支持图形化,都已经离不开鼠标了,电脑的普及也是随着鼠标的
发明而开始的----至少可以这么说~
一般我们用鼠标,都是安装驱动程序,然后装上鼠标,设置一些参数(这一步当然装
时自动处理的).
但是我们这里讨论的不是怎么样安装鼠标驱动程序,而是用C来写也相关的操作,
然后把相关的操作应用到应用程序里.这
是对着应用程序来说的,比如说我们编一个程序,如何来把鼠标的应用放进来?
这就是一个应用上的问题了~(如果你编的是Windows程序,就免了)
在dos里,程序是通过中断33H可取鼠光标的位置和鼠标器的按钮状态,同时还能改变
鼠光标的颜色和形状......等等,其他相关操作,对于经常使用的功能有四个,四
个参数分别放在ax,bx,cx和dx四个寄存器内,从而使驱动程序的接口变得简单而
又规范.下面看一些具体实践,我们先设置一些函数,并规定其功能:
extern void mouse(int *m1,int *m2,int *m3,int *m4); //C语言直接调用鼠标驱动程序的办法
extern int check_mouse_driver(int need_mouse);//检查操作系统是否已经安装了鼠标
extern int init_mouse(int need_mouse,int gd,int gm);//初始化鼠标
extern int mouse_reset(void);//复位鼠标,如果鼠标是开的,关闭
extern void move_mouse(intx,inty);//把鼠标光标移到指定的屏幕文本位置上
//下面这两个函数等下说明:)
extern void mouse_on(int code);
extern void mouse_off(int code);
extern void move_grph_posn(int *x,int *y);//如果鼠标已经初始化,返回光标的图形坐标,没有初始化就返回(0,0)
extern void move_txt_posn(int *x,int *y);
/*C语言的文本座标从(1,1)开始 ,鼠标驱动程序返回的是图形座标,起点(0,0) 该鼠标函数总是把屏幕看成640*200像素*/
extern int mouse_in_box(int graphflay,int left,int right,int top,int bottom);//判断鼠标是否在指定的矩形框内
/*
下面三个函数的具体用途,用一个实例来表示:
一种典型的拖动鼠标的的过程总是通过函数button_press()开始,
在拖动过程中,不断通过函数button_state()检查状态,
最后通过函数button_release()结束过程
*/
extern int button_release(int b);
extern int button_press(int b);
extern int button_state(void);
/*
该函数查看键盘上的键是否按下,鼠标按钮是否曾经按过,或释放过,如果同时,
键盘优于鼠标,鼠标在操作过程中,左按钮优于右按钮
*/
extern int mouse_trigger(int button_dir);
通过说明,我们对上面的函数除了
extern void mouse_on(int code);
extern void mouse_off(int code);
不了解其功能外,其他的都应该能知道一点点了吧~~
下面就开始着手写相关操作了:
在写之前先定义一些宏,对于大部分人不必知道这些宏是什么意思
#include
#include
#include
#include
#include
#define lo(f) ((f)&0xff)
#define hi(f) ((lo(f>>8)
#define CTRLC 0x2E03
#define CTRLH 0x2308
#define CTRLI 0x1709
#define CTRLL 0x260C
#define CTRLK 0x250B
#define CTRLJ 0x260C
#define CTRLU 0x1615
#define CTRLR 0x1312
#define CRKEY 0x1C0D
#define CTRLCRKEY 0x1C0A
#define UPKEY 0x4800
#define DOWNKEY 0x5000
#define LEFTKEY 0x4B00
#define RIGHTKEY 0x4D00
#define SHIFTLEFT 0x4D34
#define SHIFTRIGHT 0x4D36
#define DELKEY 0x5300
#define INSKEY 0x5200
#define BSKEY 0x0E08
#define SPACEBAR 0x3920
#define PGUPKEY 0x4900
#define PGDNKEY 0x5100
#define SHFTUPKEY 0x4838
#define SHFTDNKEY 0x5032
#define SHFTGUPKEY 0x4939
#define SHFTGDNKEY 0x5133
#define HOMEKEY 0x4700
#define ENDKEY 0x4F00
#define ESCKEY 0x011B
#define ALT_D 0x2000
#define ALT_E 0x1200
#define ALT_I 0x1700
#define ALT_R 0x1300
#define ALT_S 0x1F00
#define ALT_T 0x1400
#define ALT_X 0x2D00
#define F10KEY 0x4400
#define LEFT_MOUSE_PRESS 0xFF01
#define RIGHT_MOUSE_PRESS 0xFF02
#define LEFT_MOUSE_REL 0xFF11
#define RIGHT_MOUSE_REL 0xFF12
#define M_RESET 0
#define M_SHOW_CURS 1
#define M_HIDE_CURS 2
#define M_GET_STATUS 3
#define M_SET_CURS 4
#define M_GET_PRESS 5
#define M_GET_REL 6
#define M_SET_X_BOUNDS 7
#define M_SET_Y_BOUNDS 8
#define M_SET_G_CURS 9
#define M_SET_T_CURS 10
#define MOUSE_NEEDED 1
#define MOUSE_OPTIONAL 0
#define MOUSE_TEXT_MODE 0
再定义一些变量:
extern int mouse_text_x;
extern int mouse_text_y;
extern int mouse_grph_x;
extern int mouse_grph_y;
extern int mouse_initialized;
int mouse_text_x;
int mouse_text_y;
int mouse_grph_x;
int mouse_grph_y;
int mouse_initialized;
static int prev_cursor_state=0;
static char far*bios_video_area=(char far*)0x00400049L;
static int low_resolution=0;
static int low_res_mode(int gd,int gm);
下面我们开始着手写相关函数的实现,按着上面给出程序的顺序,有不对或需要初充的请指出:)
//------------------------------------------------------
//01
void mouse(int *m1,int *m2,int *m3,int *m4)
{
union REGS inregs,outregs;
inregs.x.ax=*m1;
inregs.x.bx=*m2;
inregs.x.cx=*m3;
inregs.x.dx=*m4;
int86(0x33,&inregs,&outregs);
*m1=outregs.x.ax;
*m2=outregs.x.bx;
*m3=outregs.x.cx;
*m4=outregs.
DOS环境下鼠标操作的C语言实现

本文介绍了如何在DOS系统中使用C语言直接操作鼠标,包括获取鼠标位置、状态、设置光标以及与键盘事件的处理,详细解析了相关函数的实现和用法。
最低0.47元/天 解锁文章
154





