• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dlfen
博客园    首页    新随笔    联系   管理    订阅  订阅

在tc环境下使用鼠标

#include #include union REGS reg; void MouseReset() // 鼠标初始化
#include<dos.h>
#include<stdio.h>

union 
REGS reg;

void MouseReset() // 鼠标初始化
{
    
reg.x.ax = 0x00;
    
int86(0x33,&reg,&reg);
    
// 此时 reg.x.bx 中是鼠标按键的情况(那些键被按下)
        // reg.x.ax 是此次中断的结果(基本不用理会)
}
void MouseShow() // 显示鼠标
{
    
reg.x.ax = 0x01;
    
int86(0x33,&reg,&reg); // 没有返回值
}
void MouseHide() //  隐藏鼠标
{
    
reg.x.ax = 0x02;
    
int86(0x33,&reg,&reg);
}
void CheckMousePos() // 查询 x,y 的位置和按键情况
{
    
reg.x.ax = 0x03;
    
int86(0x33,reg,reg);
    
// 此时 reg.x.cx 是 x 坐标的位置
        // reg.x.dx 是 y 坐标的位置
        // reg.x.bx 是按键的情况
}

unsigned int sign,s2; // 用于存放按键情况

void main()
{
    
MouseReset(); // 鼠标初始化
    
  MouseShow(); // 显示鼠标
        
while(1) // 循环检测事件
        
{
        
sign = reg.x.bx; // 保存原来的情况
                
CheckMousePos(); // 得到新的情况
        
    s2 = reg.x.bx; // 保存新的情况
                
if (sign!=s2) // 如果原来的情况不等于新的情况
        
    {
        
    if ((s2>>1)!=(sign>>1)) // 测试左键
                        
{
            
    if ((s2>>1)==1) 
                    printf("lpress\n"); // 1 表示按下,0表示放开
                                
else 
                    printf("lrelease\n");
            }
        
    if (((s2&1))!=((sign&1))) // 右键
                
    {
            
    if (((s2&1))==1) 
                    printf("rpress\n");
            
    else 
                    printf("rrelease\n");
            }
            
// 此处的判断情况请见下
                
}
        
printf("x=%d,y=%d\n",r.x.cx,r.x.dx); // 坐标
        
}
}
//  通用寄存器 BX 共有 16 位
//  000000000000000
//  当按下左键时
//  000000000000010 -> 第2位变为1
//  通过右位移一位后变为
//  000000000000001 -> 此时检测 = 1 还是 = 0 即可得知是否按下左键
//  当按下右键时
//  000000000000001 -> 第1位变为1
//  &1 后变为(除第1位都归零,此时能排除)
//  000000000000001 -> 此时检测 = 1 还是 = 0 即可得知是否按下右键
//  左右一块按的情况类似,不再叙述
posted @ 2008-07-12 18:20  七夜鱼  阅读(349)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3