⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mouse.h

📁 这个版本修正了已知的Bug,同时添加了部分函数
💻 H
字号:
#include<dos.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#ifndef _MOUSE_H_INCLUDED
#define _MOUSE_H_INCLUDED
#if !defined(_ENABLE_AUTODEPEND)
  #pragma read_only_file;
#endif
#ifdef __cplusplus
extern "C" {
#endif

// This is Mouse msg
#define WAITING        0x00
#define MOUSEMOVE      0x01
#define LEFTPRESS      0x02
#define LEFTCLICK      0x03
#define RIGHTPRESS     0x04
#define RIGHTCLICK     0x05
char event1=FALSE;
extern short mouse_x=0,mouse_y=0;
extern char  mouse_b=0;
void mouse_drive();
//鼠标形状定义

unsigned char mouse_cursor_bak_shap[16][16]=
{
   CYAN, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   BLACK, WHITE, WHITE, CYAN, WHITE, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   CYAN, BLACK, CYAN, CYAN, BLACK, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   CYAN, CYAN, CYAN, CYAN, CYAN, BLACK, WHITE, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   CYAN, CYAN, CYAN, CYAN, CYAN, BLACK, WHITE, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, 
   CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, BLACK, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN, CYAN
};

void _loadds far hook_mouse( short max, short mbx, short mcx, short mdx)
{
int i,j;
static unsigned char shap_bak[16][16];
_disable();
grp_mouse.msg=0;
grp_mouse.x=mcx;
grp_mouse.y=mdx;

unsigned char ccol;
if(grp_mouse.event&&event1)
{
for(i=0;i<16;i++)
for(j=0;j<16;j++)
putpixel(screen,grp_mouse.oldx+j,grp_mouse.oldy+i,shap_bak[i][j]);
grp_mouse.msg=1;
}

   if(grp_mouse.event)
    {
      for(i=0;i<16;i++)
      for(j=0;j<16;j++)
       {shap_bak[i][j]=getpixel(screen,grp_mouse.x+j,grp_mouse.y+i);
       ccol=grp_mouse.mouse_shap[i][j];
       if(ccol!=CYAN)putpixel(screen,grp_mouse.x+j,grp_mouse.y+i,ccol);
       }
      event1=TRUE;
      }
if(mbx&1){grp_mouse.click_left=TRUE;grp_mouse.msg=0x02;}
else {
if(grp_mouse.click_left){grp_mouse.msg=0x03;grp_mouse.click_left=FALSE;}
}

if(mbx&2){grp_mouse.click_right=TRUE;grp_mouse.msg=0x04;}
else {
if(grp_mouse.click_right){grp_mouse.msg=0x05;grp_mouse.click_right=FALSE;}
}
if(grp_mouse.oldx!=grp_mouse.x||grp_mouse.oldy!=grp_mouse.y)grp_mouse.msg=0x01;

grp_mouse.oldx=grp_mouse.x;
grp_mouse.oldy=grp_mouse.y;
mouse_x=grp_mouse.x;
mouse_y=grp_mouse.y;
mouse_b=mbx;
_enable();

}

#pragma aux hook_mouse parm  [EAX]  [EBX]  [ECX]  [EDX]


void mouse_reset()
{union REGS r;
r.w.ax=0;
int386(0x33,&r,&r);
if(mouse_cursor_bak_shap!=NULL)delete []mouse_cursor_bak_shap;
}

void setmouse_xy(int x,int y)
{union REGS r;
r.w.ax=4;
r.w.cx=x;
r.w.dx=y;
int386(0x33,&r,&r);
}

char mouse_init()
{
union REGS r;
r.w.ax=0;
int386(0x33,&r,&r);
if(!r.w.ax){return 0;}
mouse_drive();
memcpy(grp_mouse.mouse_shap,mouse_cursor_bak_shap,256);
set_mouse_range(0,0,SCREEN_W,SCREEN_H);
grp_mouse.event=FALSE;
grp_mouse.click_left=FALSE;
grp_mouse.click_right=FALSE;
setmouse_xy(SCREEN_W>>1,SCREEN_H>>1);
atexit(mouse_reset);
return 1;
}

void show_mouse()
{grp_mouse.event=TRUE;
}

void hide_mouse()
{grp_mouse.event=FALSE;
event1=FALSE;
}


void set_mouse_cursor(unsigned char mouse_cursor[16][16])
{
if(mouse_cursor!=NULL)
{
memcpy(grp_mouse.mouse_shap,mouse_cursor,256);
}
else
{
memcpy(grp_mouse.mouse_shap,mouse_cursor_bak_shap,256);
}
}

void set_mouse_range(int x,int y,int x1,int y1)
{union REGS r;
r.w.ax=7;
r.w.cx=x;
r.w.dx=x1;
int386(0x33,&r,&r);
r.w.ax=8;
r.w.cx=y;
r.w.dx=y1;
int386(0x33,&r,&r);
}

void mouse_drive()
{union REGS r;
struct SREGS sr;
r.w.ax=0x0c;
r.w.cx=0xff;
r.x.edx=FP_OFF(hook_mouse);
segread( &sr );
sr.es=FP_SEG(hook_mouse);
int386x(0x33,&r,&r,&sr);
}

char mouse_xy(short x,short y,short x1,short y1)
{if(grp_mouse.x>=x&&grp_mouse.x<=x1&&grp_mouse.y>y&&grp_mouse.y<=y1)
return 1;
else
return 0;
}

#ifdef __cplusplus
};
#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -