📄 mymouse.h
字号:
/* ==================================================== */
/* */
/* 学生宿舍管理系统Ver 1.00.1 源代码 */
/* 文件名: MyMouse.cpp */
/* 作用: 该部分负责处理鼠标的相关操作,包括鼠标的箭头的 */
/* 描绘等等 */
/* 版权所有 (c) 2007 张元龙 保留所有权利 */
/* */
/* ==================================================== */
#include <dos.h>
#include <graphics.h>
#include "MyChn.h"
#ifndef MouseDefined
#define MouseDefined
int MouseX=-1,MouseY=-1; /*鼠标坐标*/
bool Left_Pressed; /*鼠标左键是否按下*/
bool Right_Pressed; /*鼠标右键是否按下*/
bool MouseDestroyed=true; /*是否已经消除鼠标光标*/
bool MouseShowed=false; /*是否已经显示鼠标光标*/
int mouse_draw[16][16];
byte pixsave[16][16];
void MouseMath() /*计算鼠标箭头的样子*/
{
int i,j,jj,k;
int up[16][16],down[16][16];
long UpNum[16]={
0x3fff,0x1fff,0x0fff,0x07ff,
0x03ff,0x01ff,0x00ff,0x007f,
0x003f,0x00ff,0x01ff,0x10ff,
0x30ff,0xf87f,0xf87f,0xfc3f
};
long DownNum[16]={
0x0000,0x7c00,0x6000,0x7000,
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180
};
for(i=0;i<16;i++){
j=jj=15;
while(UpNum[i]!=0){
up[i][j]=UpNum[i]%2;
j--;
UpNum[i]/=2;
}
while(DownNum[i]!=0){
down[i][jj--]=DownNum[i]%2;
DownNum[i]/=2;
}
for (k=j;k>=0;k--)
up[i][k]=0;
for (k=jj;k>=0;k--)
down[i][k]=0;
for (k=0;k<16;k++){ /*四种组合方式*/
if (up[i][k]==0&&down[i][k]==0)
mouse_draw[i][k]=1;
else if(up[i][k]==0&&down[i][k]==1)
mouse_draw[i][k]=2;
else if(up[i][k]==1&&down[i][k]==0)
mouse_draw[i][k]=3;
else
mouse_draw[i][k]=4;
}
}
mouse_draw[1][2]=4; /*特殊点*/
}
void DestroyMouse(){
if (MouseDestroyed) return;
MouseShowed=false;
MouseDestroyed=true;
if (MouseX<MAXX-16 && MouseY<MAXY-16)
putimage(MouseX,MouseY,pixsave,0);
else {
int i,j;
for (i=0;i<16;i++)
for (j=0;j<16;j++)
if (mouse_draw[i][j]==1 || mouse_draw[i][j]==2)
putpixel(MouseX+j,MouseY+i,pixsave[i][j]);
}
}
void DrawMouse(){
int i,j;
if (MouseShowed) return;
MouseDestroyed=false;
MouseShowed=true;
if (MouseX<MAXX-16 && MouseY<MAXY-16)
getimage(MouseX,MouseY,MouseX+15,MouseY+15,pixsave);
else{
for (i=0;i<16;i++)
for (j=0;j<16;j++)
if (mouse_draw[i][j]==1 || mouse_draw[i][j]==2)
pixsave[i][j]=getpixel(MouseX+j,MouseY+i);
}
for (i=0;i<16;i++)
for (j=0;j<16;j++)
if (mouse_draw[i][j]==1){
putpixel(MouseX+j,MouseY+i,0);
}
else if (mouse_draw[i][j]==2){
putpixel(MouseX+j,MouseY+i,15);
}
}
void MouseUpdate(){ /*更新鼠标状态*/
int NewMouseX,NewMouseY;
_AX=0x03;
geninterrupt(0x33);
NewMouseX=_CX;
NewMouseY=_DX; /*获取鼠标坐标*/
Left_Pressed=(_BX&1); /*获取鼠标左键状态*/
Right_Pressed=(_BX&2)>>1; /*获取鼠标右键状态*/
if (MouseX!=NewMouseX || MouseY!=NewMouseY){ /*当鼠标发生移动时重绘鼠标*/
DestroyMouse();
MouseX=NewMouseX;
MouseY=NewMouseY;
DrawMouse();
}
}
/*设置鼠标可移动的矩形区域*/
void SetMouseRect(int x1,int y1,int x2,int y2){
_CX=x1;
_DX=x2;
_AX=0x07; /*设置X的边界*/
geninterrupt(0x33);
_CX=y1;
_DX=y2;
_AX=0x08; /*设置Y的边界*/
geninterrupt(0x33);
}
void MouseInit(){ /*鼠标初始化*/
static AlreadyInit=false; /*确保初始化工作只执行一次*/
if (AlreadyInit) return;
AlreadyInit=true;
MouseMath();
_AX=0x00;
geninterrupt(0x33); /*Mouse Reset*/
SetMouseRect(0,0,MAXX,MAXY);
_CX=300;
_DX=250;
_AX=0x04;
geninterrupt(0x33);
MouseUpdate();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -