微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题如何在程序中设计使用鼠标
栏目软件大世界
作者许国平
发布1997-01-01
  下面这个程序设计了一个简单光条菜单,用键盘或鼠标都能操作该菜单。读者可以利用这个程序介绍的方法在你的应用程序中使用鼠标。
  程序清单如下:#include "dos.h"
  #include "bios.h"
  #include "graphics.h"
  #include "io.h"
  #define M-Pressed 1
  union REGS in,out;
  struct SREGS seg;
  char menu[4][12]={"menumenu-1","menumenu-2","menumenu-3","exit"};
  int chz;
  int m-exist=0;
  unsigned mx,my;
  /*鼠标当前位置*/
  main()
  { int mz,zt=1; 
  int gdrive=VGA,gmode=VGAHI; 
  initgraph(&gdrive,&gmode,"d:\tc "); 
  setfillstyle(1,BLUE); 
  bar(0,0,639,479); 
  m-exist=checkmouse(); 
  initm(1);
  while(1) 
  { initm(zt); 
  if((chz=mgetch())==M-Pressed && m-exist)  
  { delay(100); /*鼠标处理*/
  if(in-range(20,20,140,30)) zt=1;  
  if(in-range(20,40,140,50)) zt=2;  
  if(in-range(20,60,140,70)) zt=3;  
  if(in-range(20,80,140,90)) break;} 
  else{ if(chz==0x4800)
  /*键盘处理*/  
  if(zt>1) zt--;  
  else zt=4;  
  if(chz==0x5000)  
  if(zt<4) zt++;  
  else zt=1; 
  if(chz==0x000d && zt==4) break;  
  if(chz==0x001b) break;}} /*按ESC退出*/  
  closegraph();} /*菜单处理*/
  int initm(int par1)
  { int i; 
  if(m-exist) hidemouse();
  setfillstyle(1,RED); 
  for(i=0;i<4;i++)  
  { bar(20,20+i*20,140,30+i*20);  
  outtextxy(20,20+i*20,menu[i]);} 
  setfillstyle(1,GREEN); 
  bar(20,20*par1,140,30+20*(par1-1)); 
  outtextxy(20,20*par1,menu[par1-1]);} 
  int in-range(int mx1,int my1,int mx2,int my2) 
  { if(mx>my1 && mx<my2 &&my>mx1 && my<mx2)  
  return 1;  
  else return 0;}
  /*鼠标模拟键盘输入函数getch()*/
  int mgetch()
  { char ch;
  while(!bioskey(1)) 
  { showmouse();  
  in.x.bx=0; /*取鼠标当前位置*/
  in.x.ax=3;  
  int86(0x33,&in,&out);
  delay(30);  
  if(out.x.bx==1)  
  {mx=out.x.dx;  
  my=out.x.cx;  
  return M-Pressed;}}
  return(getchr());}  /*隐藏鼠标*/
  hidemouse()
  {in.x.ax=02;
  int86(0x33,&in,&out);}  /*显示鼠标*/
  showmouse()
  {in.x.ax=01;
  int86(0x33,&in,&out);}  /*检查鼠标是否存在,1-存在,0-不存在*/
  int checkmouse()
  {in.x.ax=0;
  int86(0x33,&in,&out);
  if(out.x.bx!=2)
  return 0;
  return 1; }
  int getchr()
  { int ch1,ch2; 
  ch1=getch(); 
  if(ch1==0) 
  {ch2=getch(); 
  ch2=ch2<<8; 
  ch2|=ch1; 
  return(ch2);} 
  else return (ch1);}