?? 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 + -