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]=0;
}
void MsOn(int x,int y)
{ /* 鼠标光标施展剖析*/
int i,j;
int color[2];
color[0]=Mskind>>2;
color[1]=Mskind>>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 MsOff(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 Msread(int *px,int *py,int *buttons)
{ /* 读取鼠标及键盘形状*/
int but_old=*buttons;
int x_old=*px,y_old=*py;
struct time t;
struct date d;/* 今后时候信息*/
do{
if(kbhit()) return bioskey(0);
regs.x.ax=3;
int86(0x33,®s,®s);
*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 */
}
/指导指导指导指导指导指导指导指导指导指导指导奸骗**
简易绘图板
楼主写的引擎很不错哦!但是我而今也没找到符合的Mskind值描述鼠标,我感
觉是你的次序顺序题目?!楼主光写个鼠标引擎不写实歧许会让很多人看不懂,我用
你的引擎写了个简易绘画版。
批改人:cdmalcl
指导指导指导指导指导指导指导指导指导指导指导奸骗**/
/* ----- C言语图形形式编程,赋性鼠标。 -----*/
#include <graphics.h>
#include <dos.h>
#define WL -3 /* 鼠标绘制的横向宽度 */
#define HL 3 /* 鼠标绘制的纵向高度 */
#define LEFT_C 15 /* 鼠标左键绘制图形的颜色 */
#define RIGHT_C 0 /* 鼠标右键绘制图形的颜色 */
#define EXIT_X 450 /* 加入菜单的横坐标职位 */
#define EXIT_Y 350 /* 加入菜单的纵坐标职位 */
#define E_WL 60 /* 加入菜单的横向长度 */
#define E_HL 15 /* 加入菜单的纵向高度 */
int Init(); /*次序顺序初始化*/
int Run(); /*顺次序递主要进程*/
int DrawRectangle(int OutType ,int x ,int y); /*绘制一个矩形或线或点*/
int Msinit();
void MskindMath();
void MsOn(int x,int y);
void MsOff(int x,int y);
int Msread(int *px,int *py,int *buttons);
int Msinbox(int x1,int y1,int x2,int y2,int x,int y);
int End(); /*完毕次序顺序*/
int Mskind = 0xb;
long up[2][16]={0} ,down[2][16]={0};
long mouse_draw[16][16]={0} ,pixel_save[16][16]={0};
union REGS regs;
int main()
{
Init();
Run();
End();
}
int Init()
{
int gd = DETECT ,gm = 0;
initgraph(&gd ,&gm ,"");
rectangle(EXIT_X ,EXIT_Y ,EXIT_X E_WL ,EXIT_Y E_HL);
settextstyle(1 ,0 ,4);
outtextxy(EXIT_X E_WL/4 ,EXIT_Y E_HL/3 ,"EXIT");
Msinit();
MskindMath();
}
int Run()
{
int x ,y ,buttons = 0;
x = getmaxx()/2;
y = getmaxy()/2;
MsOn(x,y);
while(Msread(&x ,&y ,&buttons)!=283) /* 加入键加入次序顺序 */
{
if(Msinbox(EXIT_X ,EXIT_Y ,EXIT_X E_WL ,EXIT_Y E_HL ,x ,y)) /* 点击加当选项加入次序顺序 */
{
if(buttons == 1)
{
End();
}
}
else
{
if(buttons == 1)
{
DrawRectangle(0 ,x ,y);
}
if(buttons == 2)
{
DrawRectangle(1 ,x ,y);
}
}
}
return 1;
}
#if WL < 0
#define WL 0
#endif
#if HL < 0
#define HL 0
#endif
int DrawRectangle(int OutType ,int x ,int y)
{
MsOff(x ,y);
if(OutType)
{
#if HL > 1
setcolor(RIGHT_C);
rectangle(x ,y ,x WL ,y HL);
版权声明:
原创作品,许愿转载,转载时请务必以超链接情势标明文章 原始情由 、作者信息和本声明。否则将清查功令责任。