拖动图形对象

来源:互联网 发布:js获取手机软键盘高度 编辑:程序博客网 时间:2024/05/22 06:34

拖动图形对象

应用鼠标编程中,能够使用鼠标随心所欲地将所选的图形对象拖动到屏幕的任何地方,是非常具有成就感的。
一旦读取到鼠标左键被松开,所拖动的图形就被定位于当前的位置并且被显示或实线重画。

#include<graphics.h>
#include<stdlib.h>
#include<stdio.h>
#include<dos.h>
union REGS r;
int s=0;
int xtop,ytop,xbottom,ybottom;

void drawrh(int x,int y)
{line(x,y,x+15,y);
line(x+15,y-5,x+15,y+5);
line(x+15,y-5,x+35,y-5);
line(x+15,y+5,x+35,y+5);
line(x+35,y-5,x+35,y+5);
line(x+35,y,x+50,y);
}
void mouse(int x,int y)
{
line(x-5,y,x+5,y);
line(x,y-5,x,y+5);
}
void read(int *x,int *y,int *mbutt,int *oldx,int *oldy)
{
*oldx=*x;
*oldy=*y;
do
{r.x.ax=3;
int86(51,&r,&r); /*产生鼠标中断*/
*x=r.x.cx; /*光标当前X坐标*/
*y=r.x.dx; /*光标当前Y坐标*/
*mbutt=r.x.bx; /*按键状态*/
}while(*x==*oldx&&*y==*oldy&&*mbutt==0);
}
void tuo(int *butt,int *mx,int *my,int *ox,int *oy)
{
char *p;
while(*butt==1)
{
mouse(*ox,*oy);
if(s==0)
{
s=1;
drawrh(*mx,*my);
}
read(mx,my,butt,ox,oy);
drawrh(*ox,*oy);
drawrh(*mx,*my);
mouse(*mx,*my);
bar(5,5,100,25);
sprintf(p,"%d %d",*mx,*my);
outtextxy(10,10,p);
//outtextxy(60,10,stry);
}
xtop=(*mx);ytop=(*my-5);
xbottom=(*mx+50);ybottom=(*my+5);
}

void main()
{
int mx,my,ox,oy;
int butt;
char *strx,*stry;
int gd=DETECT,gm;
initgraph(&gd,&gm,"c://bc//bin//bgi");
drawrh(50,130); /*画出要拖动的图形对象*/
setwritemode(XOR_PUT); /*将画线方式设为异或*/
r.x.ax=3;
int86(51,&r,&r);
mx=r.x.dx;
my=r.x.cx;
butt=r.x.bx;
//mouse(mx,my);
setfillstyle(1,BLACK);
for(;;)
{
bar(5,5,100,25);
sprintf(strx,"%d",mx);
sprintf(stry,"%d",my);
outtextxy(10,10,strx);
outtextxy(60,10,stry);
read(&mx,&my,&butt,&ox,&oy); /*读取光标当前位置*/
mouse(mx,my); /*在当前位置画出光标图形*/
delay(20);
if((s==0)&&mx>50&&mx<100&&my>125&&my<135&&butt==1)
{

tuo(&butt,&mx,&my,&ox,&oy);

}
if(s==1&&mx>(xtop)&&mx<(xbottom)&&my<(ybottom)&&my>(ytop)&&butt==1)
{
drawrh(xtop,ytop+5);
s=0;
tuo(&butt,&mx,&my,&ox,&oy);

}
mouse(ox,oy);
mouse(mx,my);
if(butt==2)
{
closegraph();
exit(0);
}
}
}