⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mouse5.c

📁 c语言鼠标的创建使用 可绘制图形 不支持擦出
💻 C
字号:
/* WIN-TC BGI 图形编程模板 */
/*
   BLACK          0       黑色         DARKGRAY        8      深灰
   BLUE           1       兰色         LIGHTBLUE       9      深兰 
   GREEN          2       绿色         LIGHTGREEN      10     淡绿 
   CYAN           3       青色         LIGHTCYAN       11     淡青 
   RED            4       红色         LIGHTRED        12     淡红 
   MAGENTA        5       洋红         LIGHTMAGENTA    13     淡洋红 
   BROWN          6       棕色         YELLOW          14     黄色 
   LIGHTGRAY      7       淡灰         WHITE           15     白色

setlinestyle(int linestyle,unsigned upattern,int thickness);设置线格式(线形状 0 线宽)
     upattern参数只有在USERBIT_LINE模式下有用
     linestyle   类型
     SOLID_LINE        0           实线 
     DOTTED_LINE       1           点线 
     CENTER_LINE       2           中心线 
     DASHED_LINE       3           点画线 
     USERBIT_LINE      4           用户定义线 
     thickness  类型
     NORM_WIDTH        1           一点宽 
     THIC_WIDTH        3           三点宽 
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
setfillstyle(int pattern, int color); /设置填充方式/
   填充式样pattern
        EMPTY_FILL          0        以背景颜色填充 
        SOLID_FILL          1        以实填充 
        LINE_FILL           2        以直线填充 
        LTSLASH_FILL        3        以斜线填充(阴影线) 
        SLASH_FILL          4        以粗斜线填充(粗阴影线) 
        BKSLASH_FILL        5        以粗反斜线填充(粗阴影线) 
        LTBKSLASH_FILL      6        以反斜线填充(阴影线) 
        HATCH_FILL          7        以直方网格填充 
        XHATCH_FILL         8        以斜网格填充 
        INTTERLEAVE_FILL    9        以间隔点填充 
        WIDE_DOT_FILL       10       以稀疏点填充 
        CLOSE_DOS_FILL      11       以密集点填充 
        USER_FILL           12       以用户定义式样填充 


  line(int x,int y,int x+dx,int y+dy);                                   /直线/
  circle(int x,int y,int radius);                                        /圆/
  arc(int x,int y,int stangle,int endangle,int radius);                  /圆弧/
  ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius); /椭圆弧线/
  rectangle(int x1, int y1, int x2, inty2);                              /矩形/
  drawpoly(int numpoints, int far *polypoints);                          /顶点数 坐标数组/
*/


#include "Conio.h"
#include "graphics.h"m
#include "dos.h"

#define MX   16
#define MY   16
#define BACKCOLOR  BLACK
#define LINECOLOR  BLUE
#define MOUSECOLOR RED
int num[MY][MX]={0};
int mousenum[MY][MX]={0};
int x=0,y=0,x1=0,y1=0;
long mouse[MY]={
   0x8000,0x43e0,0x242c,0x7802,
   0x2001,0x1001,0x0802,0x1002,
   0x2001,0x4001,0x2002,0x1004,
   0x0804,0x0408,0x03e0,0x0080,
};
void initgr()
{                        /* BGI初始化 */
  int gd,gm;                          /* 和gd = VGA,gm = VGAHI是同样效果 */
  detectgraph(&gd,&gm);               /*返回系统图形驱动模式*/
  registerbgidriver(EGAVGA_driver);   /*注册BGI驱动 可以不用BGI文件*/
  initgraph(&gd,&gm,"");
}
void get_num()
{
  int i,j,n;
  for(i=0;i<MY;i++)
    for(j=0;j<MX;j++)
      if(mousenum[i][j]==1)num[i][j]=getpixel(x+j,y+i);
}
void put_num()
{
  int i,j,n;
  for(  i=0;i<MY;i++)
    for(j=0;j<MX;j++)
      if(mousenum[i][j]==1)putpixel(x1+j,y1+i,num[i][j]);
}
void make_num()
{
  int i,j;
  for(i=0;i<MY;i++)
    for(j=MX-1;j>=0;j--)
    {
     mousenum[i][j]=mouse[i]%2;
     mouse[i]/=2;
   }
}
void put_mouse()
{
  int i,j;
  for(i=0;i<MY;i++)
    for(j=0;j<MX;j++)
      if(mousenum[i][j]==1) putpixel(x+j,y+i,MOUSECOLOR);

}
void off_mouse()
{
  int i,j;
  for(i=0;i<MY;i++)
    for(j=0;j<MX;j++)
      if(mousenum[i][j]==1) putpixel(x1+j,y1+i,BACKCOLOR);
}
/*0x33是DOS中断,是在DOS下通过调用中断来对鼠标进行操作.*/
void mousereset() 
{ 
_AX=0x00; 
geninterrupt(0x33);
}
/*获取鼠标当前位置*/ 
void mousegetxy()
{ 
_AX=0x03; 
geninterrupt(0x33); 
x=_CX;
y=_DX;
}
int ifmove()
{
  if(x==x1&&y==y1) return 0;
  else return 1;
}
void mousesetx(int lx,int rx)
{ 
_CX=lx; 
_DX=rx; 
_AX=0x07; 
geninterrupt(0x33); 
} 

/*设置鼠标上下边界 
uy:上边界 
dy:下边界 */ 
void mousesety(int uy,int dy)
{ 
_CX=uy; 
_DX=dy; 
_AX=0x08; 
geninterrupt(0x33); 
}
void make_line()
{
  line(x1,y1,x,y);
}
/*返回值: 1=按下 0=释放*/
int leftpress() 
{ 
_AX=0x03; 
geninterrupt(0x33); 
return(_BX&1); 
} 
main()
{
  int i,j;

  initgr();                           /*BGI初始化*/
  /*加入代码*/
  setbkcolor(BACKCOLOR);
  setcolor(LINECOLOR);


  mousereset();
  mousesetx(0,getmaxx());
  mousesety(0,getmaxy());

  mousegetxy();
  x1=x;y1=y;
  get_num();
  make_num();
  put_mouse();
  while(!kbhit())
  {
    mousegetxy();
    if(ifmove())
    {
      off_mouse();
      put_num();
      if(leftpress()) make_line();
      get_num();
      put_mouse();
      x1=x;
      y1=y;
    }
  }

  closegraph();
                       /*恢复TEXT屏幕模式*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -