📄 mouse.cpp
字号:
/*********************************************************************
* 鼠标的实现:
* 调用33H中断得到有关鼠标的信息,如鼠标当前位置,鼠标的按健状态等信息。
*********************************************************************/
//定义鼠标类
class MouseClass
{
private:
char cMousePresent;
unsigned char cPrex,cPrey,cCurx,cCury;
unsigned char cButton;
int iBuf;
public:
MouseClass();
~MouseClass();
int MouseMove(Msg &TheMsg);
void Refresh();
};
//定义构造函数
MouseClass::MouseClass()
{
//检测鼠标是否存在
REGS r;
r.x.ax=0;
int86(0x33,&r,&r);
cMousePresent=r.x.ax;
//设定鼠标的活动范围
r.x.ax=7;
r.x.cx=8;
r.x.dx=640;
int86(0x33,&r,&r);
r.x.ax=8;
r.x.cx=8;
r.x.dx=200;
int86(0x33,&r,&r);
//设定鼠标最初出现的位置
r.x.ax=4;
r.x.cx=0;
r.x.dx=0;
int86(0x33,&r,&r);
cPrex=cPrey=0;
cButton=0;
}
//定义析构函数
MouseClass::~MouseClass()
{
REGS r;
r.x.ax=0;
int86(0x33,&r,&r);//鼠标复位
}
//定义鼠标操作函数
//鼠标若有操作,向系统发鼠标有操作的消息。
int MouseClass::MouseMove(Msg &TheMsg)
{
//如果鼠标不存在,直接返回
REGS r;
if(!cMousePresent) return 0;
//检测鼠标按健状态
r.x.ax=3;
int86(0x33,&r,&r);
cCurx=r.x.cx>>3;cCury=r.x.dx>>3;
//向系统发送消息
TheMsg.DestItem=NULL;
TheMsg.iAgu1=(cCurx<<8)|cCury;
//如果鼠标移动
if(cCurx!=cPrex||cCury!=cPrey)
{
//恢复原先鼠标位置的内容
puttext(cPrex,cPrey,cPrex,cPrey,&iBuf);
//获取鼠标当前位置的显示模式
gettext(cCurx,cCury,cCurx,cCury,&iBuf);
//颜色取反再显示
iBuf^=0x7f00;
puttext(cCurx,cCury,cCurx,cCury,&iBuf);
//保存当前位置显示模式
iBuf^=0x7f00;
//返回鼠标移动消息
TheMsg.iOpera=mMOUSEMOVE;
TheMsg.iAgu2=r.x.bx;
cPrex=cCurx;cPrey=cCury;
return mMOUSEMOVE;
}
//如果鼠标左键松开
if(!(r.x.bx&0x1)&&(cButton&0x1))
{
//返回鼠标点击消息
TheMsg.iOpera=mMOUSECLICK;
TheMsg.iAgu2=cButton;
cButton=r.x.bx;
return mMOUSECLICK;
}
//如果鼠标左键按下
if((r.x.bx&0x1)&&!(cButton&0x1))
{
//返回按键按下消息
TheMsg.iOpera=mMOUSEBUTTONDOWN;
TheMsg.iAgu2=r.x.bx;
cButton=r.x.bx;
return mMOUSEBUTTONDOWN;
}
Refresh();
return 0;
}
//定义鼠标当前覆盖内容刷新的函数
//鼠标没有任何操作,但其覆盖的内容有变化时需要刷新
void MouseClass::Refresh()
{
int ibuf;
//获取当前位置显示信息
gettext(cCurx,cCury,cCurx,cCury,&ibuf);
//与已经存储的数据比较,如果相同则返回
if((ibuf^0x7f00)==iBuf) return;
//如果不同,刷新存储数据并绘制鼠标
iBuf=ibuf;
ibuf^=0x7f00;
puttext(cCurx,cCury,cCurx,cCury,&ibuf);
}
//定义鼠标对象
MouseClass MyMouse;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -