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

📄 tcmouse.c

📁 推荐刚刚开始学C语言的同志们看下
💻 C
字号:
#include <stdio.h>
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <dos.h>
#include <math.h>

#define  TRUE       1
#define  FALSE      0
#define  LEFT       1
#define  RIGHT      2

void InitGra();
void Cross();
int  InitMouse();
void ShowMouse();
void HideMouse();
void ReadMouse(int *f, int *x, int *y);
void ErrMsg();
void Quit();

int  main()
{
    int Button, x, y;
    InitGra();						/* 图形初始化 */
    if (! InitMouse()) ErrMsg();	/* 如果没安装鼠标, 则退出 */
    ShowMouse();
    while (Button != LEFT)			/*当没有点击左键时一直循环*/
    {
	ReadMouse(&Button, &x, &y);		/*读取鼠标状态*/	
	printf("\r%3d,%3d",x,y);		/*顶格输出鼠标的坐标*/	
    }
    delay(300);
    Cross();						/*点击左键后转为十字光标模式*/
    Quit();
    return 0;
}

void InitGra()     /* 初始化屏幕为图形方式 */
{
    int  GarphDriver, GarphMode;
    GarphDriver = DETECT;
    registerbgidriver(EGAVGA_driver);
    initgraph(&GarphDriver, &GarphMode, "..\\bgi");
}

void Cross()
{
    int  Button, Oldx, Oldy;
    int  x, y, First = TRUE;
    Button = Oldx = Oldy = 0;
    setwritemode(XOR_PUT);               /* 设置向屏幕写方式: 异或 */
    HideMouse();                         /* 隐去鼠标器光标         */
    setcolor(15);
    while (Button != LEFT)               /* 等待鼠标器的左键被按下 */
    {
	ReadMouse(&Button, &x, &y);
	if (Oldx != x || Oldy != y)      /* 如果鼠标有移动               */
	{
	    if (! First)                 /* 如果不是第一次画出是十字光标 */
	    {
	       line(Oldx, 0, Oldx, 479); /* 擦去原位置的十字光标         */
	       line(0, Oldy, 639, Oldy);
	    }
	    line(x, 0, x, 479);          /* 新位置重画十字光标 */
	    line(0, y, 639, y);
	    Oldx = x;                    /* 保存新位置的坐标值 */
	    Oldy = y;
	    First = FALSE;
	}
	printf("\r%3d,%3d",x,y);
    }
    delay(300);              /* 延时300毫秒, 以虑掉多余的按键信号 */
    line(x, 0, x, 479);      /* 擦掉十字光标                      */
    line(0, y, 639, y);
    setwritemode(COPY_PUT);  /* 写方式还原, 即设置为覆盖方式 */
}

void Quit()
{
   closegraph();
   exit (0);
}

int InitMouse()
{
   union REGS Inr, Outr;
   Inr.x.ax = 0;
   int86(0x33, &Inr, &Outr);
   return Outr.x.ax;
}

void ShowMouse()
{
   union REGS Inr, Outr;
   Inr.x.ax = 1;
   int86(0x33, &Inr, &Inr);
}
void HideMouse()
{
   union REGS Inr, Outr;
   Inr.x.ax = 2;
   int86(0x33, &Inr, &Inr);
}

/*
   读取鼠标的按键信息并返回按键时光标的屏幕坐标.
   f:    按键标志,
   x, y: 返回按键时光标的屏幕坐标.
*/
void ReadMouse(int *f, int *x, int *y)
{
   union REGS Inr, Outr;
   Inr.x.ax = 3;
   int86(0x33, &Inr, &Outr);
   *f = Outr.x.bx;
   *x = Outr.x.cx;
   *y = Outr.x.dx;
}

void ErrMsg()
{
    printf("No Mouse Error!");
    getch();
    Quit();
}



⌨️ 快捷键说明

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