📄 mouse_sharp.c
字号:
int far Hand_Shape[2][16] =
{
0xf3ff,0xe1ff,0xe1ff,0xe1ff,
0xe001,0xe000,0xe000,0xe000,
0x8000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x8001,0xc003,
0x0000,0x0c00,0x0c00,0x0c00,
0x0c00,0x0db6,0x0db6,0x0db6,
0x0db6,0x6ffe,0x6ffe,0x6ffe,
0x7ffe,0x7ffe,0x3ffc,0x0000
};
int far Arrow_Shape[2][16] =
{
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0x0000,0x4000,0x6000,0x7000,
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180
};
int far Aim_Shape[2][16] =
{
{0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff},
{0x0100,0x0fe0,0x0100,0x0100,
0x4104,0x4104,0x4104,0xfffe,
0x4104,0x4104,0x4104,0x0100,
0x0100,0x0fe0,0x0100,0x0000,
}
};
// 挂接用户鼠标中断处理程序
// 输入参数: AX=0ch
// CX=事件屏蔽(event_mask)
// bit0-鼠标移动
// bit1-鼠标左键按下
// bit2-鼠标左键释放
// bit3-鼠标右键按下
// bit4-鼠标右键释放
// bit5-鼠标中键按下 (Mouse Systems/Logitech mouse)
// bit6-鼠标中键释放 (Mouse Systems/Logitech mouse)
// 各位置1 - 发生相应动作时调用用户程序
// DX=指向中断子程序的远指针的偏移地址
// ES=指向中断子程序的远指针的段移地址
// 返回值: 无
// 注释:当子程序被调用, 它会传递以下参数:
// AX = 发生的事件 (与定义事件屏蔽相对应)
// BX = 按键状态
// CX = 当前鼠标光标X轴坐标
// DX = 当前鼠标光标Y轴坐标
// SI = 水平移动计数增量(mickey)
// DI = 垂直移动计数增量(mickey)
// 某些版本的Microsoft的驱动程序返回错误的状态─CX bit 0 表示鼠标移动
// 并且交换了SI和DI的内容
void MyMouse::Mouse_Setup_User_Application(void far User_App(),unsigned Event_Mask)
{
REGPACK regs;
if (Mouse)
{
unsigned Sega=FP_SEG(User_App),Offa=FP_OFF(User_App);
regs.r_ax=0x000c;
regs.r_cx=Event_Mask; // 0x1F;
regs.r_dx=Offa;
regs.r_es=Sega;
intr(MOUSE_INTERRUPT,®s);
// regs.r_ax=0x0003;
// intr(MOUSE_INTERRUPT,®s);
// Mouse_Get_Status(Mouse_Now_Status);
}
}
void MyMouse::Mouse_Unload_User_Application()
{ REGPACK regs;
if (Mouse)
{
regs.r_ax=0x000c;
regs.r_cx=0;
intr(MOUSE_INTERRUPT,®s);
}
}
void MyMouse::Mouse_Setup_Cursor(int Mode_Num)
{
REGPACK regs;
regs.r_ax=9;
switch(Mode_Num)
{
case 2: regs.r_bx=7;
regs.r_cx=7;
regs.r_dx=FP_OFF(&::Aim_Shape);
regs.r_es=FP_SEG(&::Aim_Shape);
break;
case 1:
regs.r_bx=4;
regs.r_cx=0;
regs.r_dx=FP_OFF(&::Hand_Shape);
regs.r_es=FP_SEG(&::Hand_Shape);
break;
case 0:
default: regs.r_bx=0;
regs.r_cx=0;
regs.r_dx=FP_OFF(&::Arrow_Shape);
regs.r_es=FP_SEG(&::Arrow_Shape);
break;
}
intr(MOUSE_INTERRUPT,®s);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -