?? mouse5.c
字號:
/* WIN-TC BGI 圖形編程模板 */
/*
BLACK 0 黑色 DARKGRAY 8 深灰
BLUE 1 蘭色 LIGHTBLUE 9 深蘭
GREEN 2 綠色 LIGHTGREEN 10 淡綠
CYAN 3 青色 LIGHTCYAN 11 淡青
RED 4 紅色 LIGHTRED 12 淡紅
MAGENTA 5 洋紅 LIGHTMAGENTA 13 淡洋紅
BROWN 6 棕色 YELLOW 14 黃色
LIGHTGRAY 7 淡灰 WHITE 15 白色
setlinestyle(int linestyle,unsigned upattern,int thickness);設置線格式(線形狀 0 線寬)
upattern參數只有在USERBIT_LINE模式下有用
linestyle 類型
SOLID_LINE 0 實線
DOTTED_LINE 1 點線
CENTER_LINE 2 中心線
DASHED_LINE 3 點畫線
USERBIT_LINE 4 用戶定義線
thickness 類型
NORM_WIDTH 1 一點寬
THIC_WIDTH 3 三點寬
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
setfillstyle(int pattern, int color); /設置填充方式/
填充式樣pattern
EMPTY_FILL 0 以背景顏色填充
SOLID_FILL 1 以實填充
LINE_FILL 2 以直線填充
LTSLASH_FILL 3 以斜線填充(陰影線)
SLASH_FILL 4 以粗斜線填充(粗陰影線)
BKSLASH_FILL 5 以粗反斜線填充(粗陰影線)
LTBKSLASH_FILL 6 以反斜線填充(陰影線)
HATCH_FILL 7 以直方網格填充
XHATCH_FILL 8 以斜網格填充
INTTERLEAVE_FILL 9 以間隔點填充
WIDE_DOT_FILL 10 以稀疏點填充
CLOSE_DOS_FILL 11 以密集點填充
USER_FILL 12 以用戶定義式樣填充
line(int x,int y,int x+dx,int y+dy); /直線/
circle(int x,int y,int radius); /圓/
arc(int x,int y,int stangle,int endangle,int radius); /圓弧/
ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius); /橢圓弧線/
rectangle(int x1, int y1, int x2, inty2); /矩形/
drawpoly(int numpoints, int far *polypoints); /頂點數 坐標數組/
*/
#include "Conio.h"
#include "graphics.h"m
#include "dos.h"
#define MX 16
#define MY 16
#define BACKCOLOR BLACK
#define LINECOLOR BLUE
#define MOUSECOLOR RED
int num[MY][MX]={0};
int mousenum[MY][MX]={0};
int x=0,y=0,x1=0,y1=0;
long mouse[MY]={
0x8000,0x43e0,0x242c,0x7802,
0x2001,0x1001,0x0802,0x1002,
0x2001,0x4001,0x2002,0x1004,
0x0804,0x0408,0x03e0,0x0080,
};
void initgr()
{ /* BGI初始化 */
int gd,gm; /* 和gd = VGA,gm = VGAHI是同樣效果 */
detectgraph(&gd,&gm); /*返回系統圖形驅動模式*/
registerbgidriver(EGAVGA_driver); /*注冊BGI驅動 可以不用BGI文件*/
initgraph(&gd,&gm,"");
}
void get_num()
{
int i,j,n;
for(i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1)num[i][j]=getpixel(x+j,y+i);
}
void put_num()
{
int i,j,n;
for( i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1)putpixel(x1+j,y1+i,num[i][j]);
}
void make_num()
{
int i,j;
for(i=0;i<MY;i++)
for(j=MX-1;j>=0;j--)
{
mousenum[i][j]=mouse[i]%2;
mouse[i]/=2;
}
}
void put_mouse()
{
int i,j;
for(i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1) putpixel(x+j,y+i,MOUSECOLOR);
}
void off_mouse()
{
int i,j;
for(i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1) putpixel(x1+j,y1+i,BACKCOLOR);
}
/*0x33是DOS中斷,是在DOS下通過調用中斷來對鼠標進行操作.*/
void mousereset()
{
_AX=0x00;
geninterrupt(0x33);
}
/*獲取鼠標當前位置*/
void mousegetxy()
{
_AX=0x03;
geninterrupt(0x33);
x=_CX;
y=_DX;
}
int ifmove()
{
if(x==x1&&y==y1) return 0;
else return 1;
}
void mousesetx(int lx,int rx)
{
_CX=lx;
_DX=rx;
_AX=0x07;
geninterrupt(0x33);
}
/*設置鼠標上下邊界
uy:上邊界
dy:下邊界 */
void mousesety(int uy,int dy)
{
_CX=uy;
_DX=dy;
_AX=0x08;
geninterrupt(0x33);
}
void make_line()
{
line(x1,y1,x,y);
}
/*返回值: 1=按下 0=釋放*/
int leftpress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&1);
}
main()
{
int i,j;
initgr(); /*BGI初始化*/
/*加入代碼*/
setbkcolor(BACKCOLOR);
setcolor(LINECOLOR);
mousereset();
mousesetx(0,getmaxx());
mousesety(0,getmaxy());
mousegetxy();
x1=x;y1=y;
get_num();
make_num();
put_mouse();
while(!kbhit())
{
mousegetxy();
if(ifmove())
{
off_mouse();
put_num();
if(leftpress()) make_line();
get_num();
put_mouse();
x1=x;
y1=y;
}
}
closegraph();
/*恢復TEXT屏幕模式*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -