?? mshape.c
字號:
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 200
#define VGA256 0x13
#define TEXT_MODE 0x03
#include <dos.h>
#include <stdio.h>
#define MOUSE_INT 0x33
#define MOUSE_RESET 0x00
#define MOUSE_SHOW 0x01
#define MOUSE_HIDE 0x02
#define MOUSE_BUTT_POS 0x03
#define MOUSE_SET_SENSITIVITY 0x1A
#define MOUSE_MOTION_REL 0x0B
#define MOUSE_LEFT_BUTTON 0x01
#define MOUSE_RIGHT_BUTTON 0x02
#define MOUSE_CENTER_BUTTON 0x04
unsigned char far *video_buffer=(char far *)0xA0000000L;
typedef struct{
int mak[2][16];
int hor;
int ver;
}mscurstype;
mscurstype arrow={0x3fff,0x1fff,0x0fff,0x07ff,
0x03ff,0x01ff,0x00ff,0x007f,
0x003f,0x00ff,0x01ff,0x10ff,
0x30ff,0xf87f,0xf87f,0xfc3f,
0x0000,0x4000,0x6000,0x7000,
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180,0,0};
mscurstype lin={0xe3e3,0xe3e3,0xe3e3,0xe3e3,
0x8080, 0x8080,0x8080,0xe3e3,
0xc1c1, 0x8080,0x0000,0x2323,
0xe3e3,0xe3e3,0xe3e3, 0xe3e3,
0x0000,0x0808,0x0808,0x0808,
0x0808,0x3e3e,0x0808,0x0808,
0x1c1c,0x2a2a,0x4848,0x0808,
0x0808,0x0808,0x0808,0x0000,2,0};
mscurstype qi={0xff89,0xff88,0xff8e,0x8001,
0x8001,0x8001,0x8d8f,0x8c8c,
0x8d8c,0x8d88,0x8009,0x8983,
0x9542,0x1540,0x39b0,0x7d79,
0x0000,0x0020,0x0020,0x0020,
0x3ffc,0x2020,0x2020,0x2020,
0x2020,0x2020,0x2020,0x2020,
0x0000,0x4008,0x0004,0x0000,16,0};
mscurstype handcurs={-7681,-7681,-7681,-7681,-7681,-8192,-8192,-8192,
0, 0, 0, 0, 0, 0, 0, 0,
7680,4608,4608,4608,4608,5119,4681,4681,4681,
-28671,-28671,-28671,-22767,-32767,-32767,-1,4,0};
int Squeeze_Mouse(int command,int *x,int *y,int *buttons)
{
union REGS inregs,outregs;
switch(command)
{
case MOUSE_RESET:
{
inregs.x.ax=0x00;
int86(MOUSE_INT,&inregs,&outregs);
*buttons=outregs.x.bx;
return(outregs.x.ax);
}break;
case MOUSE_SHOW:
{
inregs.x.ax=0x01;
int86(MOUSE_INT,&inregs,&outregs);
return(1);
}break;
case MOUSE_HIDE:
{
inregs.x.ax=0x02;
int86(MOUSE_INT,&inregs,&outregs);
return(1);
}break;
case MOUSE_BUTT_POS:
{
inregs.x.ax=0x03;
int86(MOUSE_INT,&inregs,&outregs);
*x=outregs.x.cx;
*y=outregs.x.dx;
*buttons=outregs.x.bx;
return(1);
}break;
case MOUSE_MOTION_REL:
{
inregs.x.ax=0x03;
int86(MOUSE_INT,&inregs,&outregs);
*x=outregs.x.cx;
*y=outregs.x.dx;
return(1);
}break;
case MOUSE_SET_SENSITIVITY:
{
inregs.x.ax=0x04;
inregs.x.bx=*buttons;
inregs.x.cx=*x;
inregs.x.dx=*y;
int86(MOUSE_INT,&inregs,&outregs);
return(1);
}break;
default:break;
}
}
void setcurshape(mscurstype mask)
{
union REGS r;
struct SREGS s;
r.x.ax=9;
r.x.bx=mask.hor;
r.x.cx=mask.ver;
r.x.dx=FP_OFF(&mask);
s.es=FP_SEG(&mask);
int86x(0x33,&r,&r,&s);
}
void mscurson(mscurstype shape)
{
int msvisible;
union REGS r;
struct SREGS s;
setcurshape(shape);
r.x.ax=1;
msvisible=1;
int86x(0x33,&r,&r,&s);
}
void Set_Video_Mode(int mode)
{
union REGS inregs,outregs;
inregs.h.ah=0;
inregs.h.al=(unsigned char)mode;
int86(0x10,&inregs,&outregs);
}
void Fill_Screen(int value)
{
_fmemset(video_buffer,(char)value,SCREEN_WIDTH*SCREEN_HEIGHT+1);
}
void main(void)
{
int xmouse,ymouse,btnmouse,done=0,old=0,i=0,type=1;
Set_Video_Mode(VGA256);
Fill_Screen(2);
Squeeze_Mouse(MOUSE_RESET,0,0,0);
mscurson(handcurs);
Squeeze_Mouse(MOUSE_SHOW,0,0,0);
while(done==0)
{
Squeeze_Mouse(MOUSE_BUTT_POS,&xmouse,&ymouse,&btnmouse);
if(btnmouse==1&&old!=1)
{
type++;
old=1;
Squeeze_Mouse(MOUSE_HIDE,0,0,0);
if(type==1)
mscurson(handcurs);
if(type==2)
mscurson(arrow);
if(type==3)
mscurson(lin);
if(type==4)
{
mscurson(qi);
type=0;
}
Squeeze_Mouse(MOUSE_SHOW,0,0,0);
}
i++;
if(i==5000)
{
old=0;
i=0;
}
if(kbhit())
done=1;
}
Set_Video_Mode(TEXT_MODE);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -