首页  编辑  

MOUSE.CPP

Tags: /超级猛料/Hardware.硬件相关/键盘和鼠标/   Date Created:

]、。·ˉˇ¨〃々—~‖…’”〕〉》」』〗】∶!"'),.:;?]` #include

#include

#include

#include "MOUSE.H"

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

#define MOUSE_INT 0x33 //鼠标驱动中断号

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

static BOOL Mouse_Checked = FALSE; // 是否已经检查过鼠标的存在

static BOOL Mouse_Installed = FALSE; // 鼠标驱动器是否已经安装

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

// 设置光标最大列范围

static void Set_Cursor_X_Range( int Min_X, int Max_X );

// 设置光标最大行范围

static void Set_Cursor_Y_Range( int Min_Y, int Max_Y );

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/*****************************************************************/

/*-- 设置鼠标水平运动范围 程序开始 ------------------------------*/

static void Set_Cursor_X_Range( int Min_X, int Max_X )

{

if ( HaveMouse() )

{

union REGS inregs;

union REGS outregs;

inregs.x.ax = 0x0007;

inregs.x.cx = Min_X;

inregs.x.dx = Max_X;

int86( MOUSE_INT, &inregs, &outregs );

}

}

/*-- 设置鼠标水平运动范围 程序结束 ------------------------------*/

/*****************************************************************/

/*****************************************************************/

/*-- 设置鼠标垂直运动范围 程序开始 ------------------------------*/

static void Set_Cursor_Y_Range( int Min_Y, int Max_Y )

{

if ( HaveMouse() )

{

union REGS inregs;

union REGS outregs;

inregs.x.ax = 0x0008;

inregs.x.cx = Min_Y;

inregs.x.dx = Max_Y;

int86( MOUSE_INT, &inregs, &outregs );

}

}

}

/*-- 设置鼠标垂直运动范围 程序结束 ------------------------------*/

/*****************************************************************/

/*****************************************************************/

/*-- 显示光标 程序开始 ------------------------------------------*/

void ShowCursor( void )

{

if ( HaveMouse() )

{

union REGS regs;

regs.x.ax = 0x0001;

int86( MOUSE_INT, ?s, ?s );

}

}

/*-- 显示光标 程序结束 ------------------------------------------*/

/*****************************************************************/

/*****************************************************************/

/*-- 隐藏光标 程序开始 ------------------------------------------*/

void HideCursor( void )

{

{

if ( HaveMouse() )

{

union REGS regs;

regs.x.ax = 0x0002;

int86( MOUSE_INT, ?s, ?s );

}

}

/*-- 隐藏光标 程序结束 ------------------------------------------*/

/*****************************************************************/

/*****************************************************************/

/*-- 设置鼠标中断速率 程序开始 ----------------------------------*/

void SetMouseIntRate( unsigned int Rate )

{

if ( HaveMouse() )

{

if ( Rate > 4 )

Rate = 0;

union REGS regs;

regs.x.ax = 0x001C;

regs.x.bx = Rate;

int86( MOUSE_INT, ?s, ?s );

}

}

/*-- 设置鼠标中断速率 程序结束 ----------------------------------*/

/*****************************************************************/

/*****************************************************************/

/*-- 设置光标运动范围 程序开始 ----------------------------------*/

void SetCursorRange( int Min_X, int Max_X, int Min_Y, int Max_Y )

{

Set_Cursor_X_Range( Min_X, Max_X );

Set_Cursor_Y_Range( Min_Y, Max_Y );

}

/*-- 设置光标运动范围 程序结束 ----------------------------------*/

/*****************************************************************/

/*****************************************************************/

/*-- 设置光标位图及热点 程序开始 --------------------------------*/

void Set_Cursor_BitMap( int Hot_X, int Hot_Y,

unsigned int *BitMap )

{

if ( HaveMouse() )

{

union REGS inregs;

union REGS outregs;

struct SREGS segregs;

inregs.x.ax = 0x0009;

inregs.x.bx = Hot_X;

inregs.x.cx = Hot_Y;

inregs.x.dx = FP_OFF( BitMap );

segregs.es = FP_SEG( BitMap );

int86x( MOUSE_INT, &inregs, &outregs, &segregs );

}

}

/*-- 设置光标位图及热点 程序结束 ----------------------------------*/

/*******************************************************************/

/*******************************************************************/

/*-- 设置文本光标 程序开始 ----------------------------------------*/

void Set_Text_Cursor( unsigned int Begin_Scan_Line,

unsigned int End_Scan_Line )

{

if ( HaveMouse() )

{

union REGS regs;

regs.x.ax = 0x000A;

regs.x.bx = 0x0001;

regs.x.cx = Begin_Scan_Line;

regs.x.dx = End_Scan_Line;

int86( MOUSE_INT, ?s, ?s );

}

}

/*-- 设置文本光标 程序结束 ----------------------------------------*/

/*******************************************************************/

/*******************************************************************/

/*-- 检查是否安装了鼠标驱动器 程序开始 ----------------------------*/

BOOL HaveMouse( void )

{

if ( !Mouse_Checked )

{

void interrupt ( *Mouse_Handler )( __CPPARGS );

Mouse_Handler = getvect( MOUSE_INT );

if ( Mouse_Handler != NULL )

{

union REGS inregs;

union REGS outregs;

inregs.x.ax = 0;

int86( MOUSE_INT, &inregs, &outregs );

if ( outregs.x.ax == 0xFFFF )

Mouse_Installed = TRUE;

}

Mouse_Checked = TRUE;

}

return Mouse_Installed;

}

/*-- 检查是否安装了鼠标驱动器 程序结束 --------------------------*/

/*****************************************************************/

/*****************************************************************/

/*-- 取鼠标按钮事件 程序开始 ------------------------------------*/

// 其中Cursor_X,Cursor_Y表示发生鼠标事件的 x坐标和y坐标

// Mouse_Status 的意义见《PC中断大全》

BOOL GetMouseClick( int &Mouse_Status,

int &Cursor_X,

int &Cursor_Y )

{

if ( HaveMouse() )

{

{

union REGS inregs;

union REGS outregs;

inregs.x.ax = 3;

int86( MOUSE_INT, &inregs, &outregs );

if ( outregs.x.bx & 0x07 )

{

Mouse_Status = outregs.x.bx & 7;

Cursor_X = outregs.x.cx;

Cursor_Y = outregs.x.dx;

return TRUE;

}

else

return FALSE;

}

else

return FALSE;

}

/*-- 取鼠标按钮事件 程序结束 ------------------------------------*/

/*****************************************************************/

/*****************************************************************/

BOOL Mouse_Moved( void )

{

if ( HaveMouse() )

{

union REGS regs;

union REGS outregs;

regs.x.ax = 0x000B;

int86( MOUSE_INT, ?s, &outregs );

if ( ( outregs.x.cx != 0 ) || ( outregs.x.dx != 0 ) )

return TRUE;

else

return FALSE;

}

else

return FALSE;

}

/*****************************************************************/

/*****************************************************************/

BOOL GetMouseIRQ( unsigned char &MouseIRQ )

{

if ( HaveMouse() )

{

union REGS regs;

union REGS outregs;

regs.x.ax = 0x0024;

int86( MOUSE_INT, ?s, &outregs );

MouseIRQ = outregs.h.cl;

return TRUE;

}

else

return FALSE;

}

/*****************************************************************/

/*****************************************************************/

/*-- 全部函数结束 -----------------------------------------------*/

/*****************************************************************/

这样定义BOOL: enum BOOL { FALSE, TRUE };

在 MOUSE.H中声明所有非静态函数;需要使用鼠标的模块包

括MOUSE.H就可以了