♂ 死后定当长眠,生前何须久睡。♀
。。。。。
首先 我不知道你写的是什么~
16,10,8,2进制之间的转换用鼠标干嘛?
也不知道你的那部分是鼠标~~
呵呵 还有 就是转换~ 没看明白什么地方是转换!
理解你想写模块化程序! 但是 劝你先做好扎实的基本工在说!
至少鼠标是:
int pmx,pmy,brea,breb;
void Initgr(void) /*鼠标参数初始化*/
{
setviewport(ZTSX, ZTSY, ZTXX, ZTXY, 1);
x_max=X__max=ZTXX-ZTSX;
y_max=Y__max=ZTXY-ZTSY;
/*x_max,y_max:屏幕坐标的宽度 w,h纵横比 X__max,Y__max横纵向象点坐标数*/
Msinit(0,ZTXX-ZTSX,0,ZTXY-ZTSY);/*初始化鼠标*/
brea=x_max;
breb=y_max;
}
int Msinit(int Xlo,int Xhi,int Ylo,int Yhi)/*鼠标初始化*/
{
int retcode;
regs.x.ax=0;/*初始化鼠标*/
int86(0x33,®s,®s);
retcode=regs.x.ax;
if(retcode==0) return 0;
regs.x.ax=7;/*设置鼠标X方向的移动范围*/
regs.x.cx=Xlo;
regs.x.dx=Xhi;
int86(0x33,®s,®s);
regs.x.ax=8;/*设置鼠标Y方向的移动范围*/
regs.x.cx=Ylo;
regs.x.dx=Yhi;
int86(0x33,®s,®s);
regs.x.ax=15;/*设置mickey与象素的比,这各会影响鼠标移动速度*/
regs.x.cx=(int)(x_max/X__max);
regs.x.dx=(int)(y_max/Y__max);
int86(0x33,®s,®s);
return retcode;
}
int Msread(int *px,int *py,int *pbuttons)/*读鼠标位置及状态*/
{
static int x0=320,y0=240,but0=0;
int xnew,ynew,ch;
do{
if(kbhit())
{
ch=getch();
if(ch==13)
{
*pbuttons=1;
return 13;
}
else
return ch; /*返回键盘输入*/
}
regs.x.ax=3; /*调用功能3,读鼠标位置及状态*/
int86(0x33,®s,®s);
xnew=regs.x.cx;/*返回鼠标当前的位置的X坐标*/
ynew=regs.x.dx;/*返回鼠标当前的位置的Y坐标*/
*pbuttons=regs.x.bx;/*返回鼠标当前的状态*/
}while(xnew==x0&&ynew==y0&&*pbuttons==but0);
/*当鼠标状态改变或位置改变终止循环*/
but0=*pbuttons;/*将鼠标状态保存到静态变量中*/
x0=xnew;y0=ynew;/*将鼠标位置保存到静态变量中*/
*px=xnew;*py=(int)(y_max-ynew);
return -1;
}
int Xpixel(int x)/*由象素坐标变换为屏幕坐标*/
{
return (int)((long)X__max*x/x_max);
}
int Ypixel(int y)
{
return Y__max-(int)((long)Y__max*y/y_max);
}
void Cursor(int x,int y) /*显示十字光标*/
{
int X=Xpixel(x),Y=Ypixel(y);
setcolor(color0);
line(X-8,Y,X-3,Y);
line(X,Y-8,X,Y-4);
line(X+3,Y,X+8,Y);
line(X,Y+4,X,Y+8);
}
/*光标移动(任意键确认退出)*/
char mymouse(void)
{
int buttons,fztx,fzty=-1;
setwritemode(XOR_PUT);/*设置屏幕输出模式*/
Cursor(brea,breb); /*在a=x_max;b=y_max;处画指针*/
fztx=0;
while(fzty == -1)
{
fzty=Msread(&pmx,&pmy,&fztx);
Cursor(brea,breb); /*删除之前的鼠标,因为屏幕输出模式的关系*/
Cursor(pmx,pmy);
brea=pmx;
breb=pmy;
x=(int)(pmx*1.0/x_max*X__max);
y=(int)((y_max-pmy)*1.0/y_max*Y__max);
if(fztx==1)
{
fzty = 13;
}
}
Cursor(pmx,pmy);/*再调用一次把原来的指针削掉*/
setwritemode(0);
setcolor(color1);
return fzty;
}
/*画图工具内部光标移动(点左键确认退出)*/
void mygmous(void)
{
int buttons,fztx,fzty=1;
setwritemode(XOR_PUT);/*设置屏幕输出模式*/
Cursor(brea,breb); /*在a=x_max;b=y_max;处画指针*/
fztx=0;
while(fztx != 1)
{
Msread(&pmx,&pmy,&fztx);
Cursor(brea,breb); /*删除之前的鼠标,因为屏幕输出模式的关系*/
Cursor(pmx,pmy);
brea=pmx;
breb=pmy;
x=(int)(pmx*1.0/x_max*X__max);
y=(int)((y_max-pmy)*1.0/y_max*Y__max);
}
Cursor(pmx,pmy);/*再调用一次把原来的指针削掉*/
setwritemode(0);
setcolor(color1);
}
还有数值转换用不着这样!
几个位运算就搞定了!
这个是我写的一个画图软件的鼠标模块~
整个程序在:http://impact.ik8.com/mysoft.rar
要原代,可加我MSN 或者给我写信(QQ也成,不过我不怎么用QQ)