EGL--鼠标类函数实现文件 MOUSE.INC

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

/*

MOUSE.INC

*/

void pascal set_event_handler(int call_mask,void far( *location)())

{

union REGS r;

struct SREGS sr;

if(MOUSE_THERE){ /* THE MOUSE FUNCTION 12 */

r.x.ax=12;

r.x.cx=call_mask;

r.x.dx=FP_OFF( location );

sr.es=FP_SEG( location );

int86x(0x33,&r,&r,&sr);

}

}

/*---------------------------------------------------------------------*/

void near event_processor(int event_status,int button_status,int x,int y)

/* LOAD THE MOUSE EVENT PROGRAGM */

{

if(MOUSE_THERE){

if( (CMX!=x) || (CMY!=y) ){

MOUSE_MOVED=1;

CMX=x; CMY=y;

}

else

MOUSE_MOVED=0;

BSTATE=button_status;

if(event_status & 2){ LBUTTON_DOWN=1; LBUTTON_UP=0; }

if(event_status & 8){ RBUTTON_DOWN=1; RBUTTON_UP=0; }

if(event_status & 4){ LBUTTON_UP=1; LBUTTON_DOWN=0; }

if(event_status & 16){ RBUTTON_UP=1; RBUTTON_DOWN=0; }

}

}

/*--------------------------------------------------------------------*/

int reset_mouse(void) /* THE MOUSE FUNCTION 0 */

{

_AX=0;

geninterrupt(0x33);

if(_AX>0){

MOUSENUM=_AX;

MOUSE_THERE=1;

mouse_on();

return(OK);

}

else{

MOUSE_THERE=0;

return(ERROR);

}

}

/*-------------------------------------------------------------------*/

void mouse_off(void) /* THE MOUSE FUNCTION 2 */

{

if( !MOUSE_THERE || MOUSE_VISIBLE==0 ) return;

_AX=2;

geninterrupt(0x33);

MOUSE_VISIBLE=0;

}

/*-------------------------------------------------------------------*/

void mouse_on(void) /* THE MOUSE FUNCTION 1 */

{

if( !MOUSE_THERE || MOUSE_VISIBLE==1 ) return;

_AX=1;

geninterrupt(0x33);

MOUSE_VISIBLE=1;

}

/*-------------------------------------------------------------------*/

void mouse_shape(int shape[32],int hotx,int hoty)

{

union REGS regs;

struct SREGS sregs;

mouse_off();

regs.x.ax=9;

regs.x.bx=hotx;

regs.x.cx=hoty;

regs.x.dx=FP_OFF(shape);

sregs.es=FP_SEG(shape);

int86x(0x33,&regs,&regs,&sregs);

mouse_on();

}

/*------------------------------------------------------------------*/

void set_mouse_position(int x,int y)

{

_AX=4;

_CX=x;

_DX=y;

geninterrupt(0x33);

}

/*-------------------------------------------------------------------*/

/*

调用双击的条件为判断是否为左键下

当调用双击不成时,再检查一次左键按下否,如下,{则说明刚才为单击,将左键状态消去}

即:每次调用双击后,必须再调用一次单击,否则有可能丢失键击状态

if( LBUTTON_DOWN ){

if( get_double_press() ) ... 双击如何

else ...单击如何

}

*/

int get_double_press(void); /* get if lbutton was pressed twice */

int get_double_press(void)

{

int x,y;

if( LBUTTON_DOWN ){

LBUTTON_DOWN=0;

x=CMX; y=CMY;

Delay(DOUBLE_CLICK_TIME);

if(LBUTTON_DOWN && x==CMX && y==CMY){

LBUTTON_DOWN=0;

LBUTTON_UP=0;

return(1);

}

else{

LBUTTON_DOWN=1;

return(0);

}

}

}

/*--------------------------------------------------------------------*/

void set_text_cursor(int groundmask,int textmask)

{

_AX=10;

_BX=0;

_CX=groundmask;

_DX=textmask;

geninterrupt(0x33);

}

/*--------------------------------------------------------------------*/

void InstallEvent(void)

{

set_event_handler(127,event_handler);

}

/*-----------------------------------------------------------*/

void reset_event_status(void)

{

MOUSE_MOVED=0; LBUTTON_DOWN=0;

RBUTTON_DOWN=0; LBUTTON_UP=0;

RBUTTON_UP=0; BSTATE=0;

}

/*------------------------------------------------------------------------*/

void set_mousex(int minx,int maxx)

{

_AX=7;

_CX=minx; _DX=maxx;

geninterrupt(0x33);

}

/*-----------------------------------------------------------------------*/

void set_mousey(int miny,int maxy)

{

_AX=8;

_CX=miny; _DX=maxy;

geninterrupt(0x33);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航