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

📄 例5-2.c

📁 王为青 刘变红 编著《C语言高级编程及实例剖析》源代码
💻 C
字号:
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <graphics.h>
#include <io.h>
#include <dos.h>   
#include <conio.h>
#define MOUSE_ID 0x33

dpkeybf(int x,int y)  /*显示键盘缓冲区函数 */
{
	unsigned char i,p;
	textcolor(7);        /* 预置字符显示的前景色 */
	gotoxy(x+1,y+2); 
	cprintf("0040:001e(L)"); /* 显示键盘缓冲区的第一地址(字的低字节) */            
	gotoxy(x+1,y+3); 
	cprintf("0040:001e(H)"); /* 显示键盘缓冲区的第一地址(字的高字节) */ 
	
	for(i=0;i<32;i=i+2)
	{
		gotoxy(x+16+((4*i)>>1),y); 
		cprintf("%3d",i);         /* 显示键盘缓冲区变换的字地址指示 */
	}
	for(i=0x1e;i<0x3e;i++)       /* 显示键盘缓冲区从41E~42D的所有内容 */
	{    
		textcolor(7); 
		gotoxy(x+16+4*((i-0x1e)>>1),y+2+(((i-0x1e))&0x01));   /* 定义显示位置 */
		p=peekb(0x40,i);          /* 读键盘缓冲区单元 */
		cprintf("%3hx",p);        /* 显示键盘缓冲区单元内容 */ 
		
		textcolor(14); 
		gotoxy(x+16+2*(peekb(0x40,0x1a)-0x1e),y+2);  
		cprintf(">");       /* 显示键盘缓冲区首指针,用“>”表示 */
		
		textcolor(15); 
		gotoxy(x+16+2*(peekb(0x40,0x1c)-0x1e),y+2);
		cprintf("<");      /* 显示键盘缓冲区首指针,用“<”表示 */
	}
}

mosdrv(int functno,int *mb,int *mc,int *md)
{                         /* 鼠标驱动程序INT 33H函数 */
	union REGS regs;
	regs.h.ax=functno;     /* 令AX=functno */
	regs.h.bx=&mb;  
	regs.h.cx=&mc;
	regs.h.dx=&md; 
	int86(MOUSE_ID,&regs,&regs);   /* INT 33H */
	*mb=regs.h.bx;
	*mc=regs.h.cx;
	*md=regs.h.dx;   
}

main()                       /* 主程序 */
{
	int ma,mb,mc,md,mmb,mmc,mmd,flag,m;
	mosdrv(0,0,0,0);    /* 开启鼠标程序 */
	clrscr();           /* 清屏幕 */
	gotoxy(25,6);
	textcolor(11);
	cprintf("*** KEY BUFFER ***");   /* 显示键盘缓冲区的标题 */ 
	
	gotoxy(50,23);
	textcolor(11);
	cprintf("*** CONDITION OF MOUSE ***");   /* 显示鼠标状态的标题 */  
	
	while(1)
	{
		mmb=mb;          /* 保存上次鼠标状态,按键(mb),位置(mc,md) */
		mmc=mc;
		mmd=md;
		
		mosdrv(3,&mb,&mc,&md);  /* 读鼠标状态,按键(mb),位置(mc,md) */
		if(mb==1)             /* mb==1表示左键按下 */
		{
			mosdrv(1,0,0,0);  /* 打开鼠标光标显示功能 */
			m=peek(0x40,0x1c);
			poke(0x40,0x1a,m);   /* 清键盘缓冲区,令首指针=尾指针 */
		}
		
		if(mb==2)              /* mb==2表示右键按下 */
		{
			flag=1;
			gotoxy(1,1);
			printf("Left key:Cursor On,Clear KeyBuffer,\nRight Key:Help,\nDouble Key:Cursor off and exit.");
		}                    /* 显示帮助信息 */
		else if(flag==1)
		{
			flag=0;    
			gotoxy(1,1);
			printf("\n\n");  /* 清除刚才显示的帮助信息 */
		}  
		if(mb==3)            /* mb==3表示左右键均被按下 */
		{
			mosdrv(2,0,0,0);   /* 关闭鼠标光标显示功能 */
			exit(1);           /* 退出循环,程序结束 */
		}
		if((mc!=mmc)||(md!=mmd)||(mb!=mmb))
		{
			gotoxy(50,25);   /* 如果鼠标状态发生变化,则在(50,25)处暗示鼠标状态的变化 */
			printf("x:%3d,y:%3d,1/r button:%4d",mc/8,md/8,mb);
		}
		dpkeybf(0,8);    /* 在(0,8)的位置显示键盘缓冲区的内容  */
	}
}

⌨️ 快捷键说明

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