论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

鼠标画点

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:42:57

#include<dos.h>
#include<graphics.h>
#include<conio.h>
union REGS regs;
int X__max,Y__max,x_max,y_max;
void Initgr(void) /*屏幕初始化成图形模式*/
{int w,h,grdriver=DETECT,grmode;
 initgraph(&grdriver,&grmode,"");/*在双引号中可加你tc放的路径,但要在tc里有EGAVGA.BGI这个来初始图形*/
 if(graphresult())/*若调用不成功,退出*/
     {printf("\n 在双引号中可加你tc放的路径,但要在tc里有EGAVGA.BGI这个来初始图形.\n");
     exit(1);
     }
 X__max=getmaxx();/*求横向象点坐标数*/
 Y__max=getmaxy();/*求纵向象点坐标数*/
 getaspectratio(&w,&h);/*求纵横比*/
 x_max=1000;                       /*设置屏幕坐标的宽度*/
 y_max=x_max*(float)Y__max*h/((float)X__max*w);
}

int Msinit(int Xlo,int Xhi,int Ylo,int Yhi)/*鼠标初始化*/
{int retcode;
 regs.x.ax=0;/*初始化鼠标*/
 int86(0x33,®s,®s);
 retcode=regs.x.ax;
 if(retcode==0) return 0;
 regs.x.ax=7;/*设置鼠标X方向的移动范围*/
 regs.x.cx=Xlo;
 regs.x.dx=Xhi;
 int86(0x33,®s,®s);
 regs.x.ax=8;/*设置鼠标Y方向的移动范围*/
 regs.x.cx=Ylo;
 regs.x.dx=Yhi;
 int86(0x33,®s,®s);
 regs.x.ax=15;/*设置mickey与象素的比,这各会影响鼠标移动速度*/
 regs.x.cx=(int)(x_max/X__max);
 regs.x.dx=(int)(y_max/Y__max);
 int86(0x33,®s,®s);
 return retcode;
}
int Msread(int *px,int *py,int *pbuttons)/*读鼠标位置及状态*/
{static int x0=320,y0=240,but0=0;
int xnew,ynew,ch;
 do{
    if(kbhit()){
 ch=getch();
 if(ch==13){
    *pbuttons=1;
    return -1;
   }
 else return ch;           /*返回键盘输入*/
     }
    regs.x.ax=3;            /*调用功能3,读鼠标位置及状态*/
    int86(0x33,®s,®s);
    xnew=regs.x.cx;/*返回鼠标当前的位置的X坐标*/
    ynew=regs.x.dx;/*返回鼠标当前的位置的Y坐标*/
    *pbuttons=regs.x.bx;/*返回鼠标当前的状态*/
   }while(xnew==x0&&ynew==y0&&*pbuttons==but0);
        /*当鼠标状态改变或位置改变终止循环*/
    but0=*pbuttons;/*将鼠标状态保存到静态变量中*/
    x0=xnew;y0=ynew;/*将鼠标位置保存到静态变量中*/
    *px=xnew;*py=(int)(y_max-ynew);
    return -1;
}
int Xpixel(int x)/*由象素坐标变换为屏幕坐标*/
{ return (int)((long)X__max*x/x_max);}
int Ypixel(int y)
{ return Y__max-(int)((long)Y__max*y/y_max);}
void Cursor(int x,int y)  /*显示十字光标*/
{int X=Xpixel(x),Y=Ypixel(y),color;
char *str="          \0";
 line(X-8,Y,X-3,Y);
 line(X,Y-8,X,Y-4);
 line(X+3,Y,X+8,Y);
 line(X,Y+4,X,Y+8);
 color=getcolor();
 setcolor(BLACK);
 outtextxy(X__max-100,10,str);/*删除前次显示值*/
 sprintf(str,"%d,%d",x,y);
 setcolor(WHITE);
 outtextxy(X__max-100,10,str);/*在屏幕右上角显示当前光标的坐标*/
 setcolor(color);
}
main()
{int buttons,X,Y,x,y,a,b;
char i;
Initgr();/*初始化图形屏幕*/
setcolor(EGA_LIGHTRED);/*设置屏幕前景色*/
line(1,1,X__max-1,1);  /*在屏幕四面画一矩形*/
line(1,1,1,Y__max-1);
line(X__max-1,1,X__max-1,Y__max-1);
line(1,Y__max-1,X__max-1,Y__max-1);
setcolor(EGA_WHITE);
printf("\n  按鼠标右键终止程序\n");
printf("  然后按任意键退出");
setwritemode(XOR_PUT);/*设置屏幕输出模式*/
Msinit(0,(int)x_max,0,(int)y_max);/*初始化鼠标*/
a=x_max;b=y_max;
x=0;
Cursor(a,b); /*在a=x_max;b=y_max;处画指针*/
while(x!=2)
{Msread(&X,&Y,&x);
 Cursor(a,b); /*删除之前的鼠标,因为屏幕输出模式的关系*/
 if(x==1){
    a=(int)(X*1.0/x_max*X__max);b=(int)((y_max-Y)*1.0/y_max*Y__max);
    circle(a,b,1); } /*画点*/
 Cursor(X,Y);
 a=X;b=Y;
  }
Cursor(X,Y);/*再调用一次把原来的指针削掉*/
getch();
closegraph();}

/*运行后在屏幕上移动鼠标并点左键,即可画点*/

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058