C言语图形情势编程,赋性鼠标(4)
*px=regs.x.cx;
*py=regs.x.dx;
*buttons=regs.x.bx;
}while(*px==x_old&&*py==y_old&&*buttons==but_old);
MsOff(x_old,y_old);
but_old=*buttons;
x_old=*px;
y_old=*py;
MsOn(x_old,y_old);
return -1;
}
int Msinbox(int x1,int y1,int x2,int y2,int x,int y)
{
return((x>=x1&&x<=x2&&y>=y1&&y<=y2)?1:0); /* 若在预定区域就前往 1 */
}
int End()
{
closegraph();
exit(0);
}
不盛情思,没例子几乎难懂,以下是一个复杂的例子(把鼠标移到长条框就可以变化鼠标了):
/*-----------------------------------------------------------*/
/*--- ---*/
/*--- C 言语"箭头鼠标"与"手形鼠标"的切换 ---*/
/*--- ---*/
/*--- --- 2007.03.18 ---*/
/*-----------------------------------------------------------*/
#include <stdio.h>
#include <graphics.h>
#include <dos.h>
/*======================= 必需的全局变量 ===================*/
union REGS regs;
int up[16][16],down[16][16];
int mouse_draw[16][16];
int pixel_save[16][16]; /* 保管被鼠标笼盖的区域颜色*/
int Mousekind=0 1*2 15*4 2*64;
/* "形状(0和1)","标志核心或内部颜色(此中的 15 和 2)"*/
/*===========================================================*/
void MouseMath() /* 计算鼠标的样子*/
{ /*Point hotspot[]={{0,11},{0,0},{4,0},{4,0}};热点*/
int i,j,jj,k;
int full,kind;
long UpNum[2][16] = { /* hand */
0xf3ff,0xe1ff,0xe1ff,0xe1ff,
0xe001,0xe000,0xe000,0xe000,
0x8000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x8001,0xc003,
0x3fff,0x1fff,0x0fff,0x07ff,/* arrow箭头 */
0x03ff,0x01ff,0x00ff,0x007f,
0x003f,0x00ff,0x01ff,0x10ff,
0x30ff,0xf87f,0xf87f,0xfc3f,
};
long DownNum[2][16]={ /* hand */
0x0c00,0x1200,0x1200,0x1200,
0x13fe,0x1249,0x1249,0x1249,
0x7249,0x9001,0x9001,0x9001,
0x8001,0x8001,0x4002,0x3ffc,
0x0000,0x4000,0x6000,0x7000,/* arrow箭头 */
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180,
};
kind = (Mousekind>>1)%2; /* 手形仍是箭头*/
full = Mousekind%2; /* 能否空心*/
for(i=0;i<16;i )
{
j=jj=15;
while(UpNum[kind][i]!=0)
{
up[i][j]=UpNum[kind][i]%2;
j--;
UpNum[kind][i]/=2;
}
while(DownNum[kind][i]!=0)
{
down[i][jj--]=DownNum[kind][i]%2;
DownNum[kind][i]/=2;
}
for(k=j ;k>=0;k--) up [i][k]=0;
for(k=jj;k>=0;k--) down[i][k]=0;
for(k=0;k<16;k )
{ /*四种组合体式格式*/
if(up[i][k]==0&&down[i][k]==0)
{ /* 能否为空心*/
if(full) mouse_draw[i][k]=1;
else mouse_draw[i][k]=2;
}
else if(up[i][k]==0&&down[i][k]==1)
{
if(full) mouse_draw[i][k]=2;
else mouse_draw[i][k]=1;
}
else if(up[i][k]==1&&down[i][k]==0) mouse_draw[i][k]=3;
else mouse_draw[i][k]=4;
}
}
if(kind==1) mouse_draw[1][2]=0;/*不凡点*/
else mouse_draw[1][2]=4;
}
void MouseOn(int x,int y)
{ /* 鼠标光标表现*/
int i,j;
int color[2];
color[0]=Mousekind>>2;
color[1]=Mousekind>>6;
for(i=0;i<16;i )
{
for(j=0;j<16;j )
{
pixel_save[i][j]=getpixel(x j,y i);/* 保管原来的颜色*/
if(mouse_draw[i][j]==1)
putpixel(x j,y i,color[0]);
else if(mouse_draw[i][j]==2) /* 画鼠标*/
putpixel(x j,y i,color[1]);
}
}
}
void MouseOff(int x,int y)
{ /* 隐蔽鼠标*/
int i,j,color;
for(i=0;i<16;i )
for(j=0;j<16;j )
{
if(mouse_draw[i][j]==3||mouse_draw[i][j]==4) continue;
color=getpixel(x j,y i);
putpixel(x j,y i,color^color); /* 原位置异或消去*/
putpixel(x j,y i,pixel_save[i][j]);/* 复原原后台*/
}
}
int MouseRead(int *px,int *py,int *buttons)
版权声明:
原创作品,答理转载,转载时请务必以超链接方式标明文章 原始出处 、作者信息和本声明。不然将清查法律责任。