请c语言高手相助,在TC30下,关于图形和鼠标驱动的程序。
hanyh 2001-10-17 11:19:07 我的程序的本意是用鼠标在屏幕上点击,点左键3次,然后就画一个三角形,点右
键便退出。点左键50次的时候,点任意键也退出。可是程序运行的时候有问题,
画三角形的时候总怪怪的,请高手帮我一下!
******graph.h******//图形初始化,结束头文件
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <graphics.h>
#include <dos.h>
void InitGraphics();
void CloseGraphics();
void InitGraphics()
{
int gdriver = VGA, gmode=VGAHI, errorcode;
if (!(registerbgidriver(EGAVGA_driver)<0))
{
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode == grOk)
return;
}
cout << "Error detected when initialize graphics...\n";
cout << "No VGA compatible graphics card is found...\n";
getch();
exit(1);
}
void CloseGraphics() {
getch();
cleardevice();
closegraph();
}
******mouse.h******//鼠标驱动头文件
#include <dos.h>
enum MouseDisplayMode {
MOUSE_OFF, MOUSE_ON,
};
int x, y;
int mDispStatus, mNumKeys, mKey;
int mKeyPressed, mInstalled;
union REGS inregs, outregs;
int GetX() { return x; }
int GetY() { return y; }
void GetXY(int& px, int& py) { px = x; py = y; }
void Reset(void);
void ShowCursor(void);
void HideCursor(void);
void GetButtonStatus(void);
void SetMinMaxHorzCursPos(int min,int max);
void SetMinMaxVertCursPos(int min,int max);
int LeftButtonPressed(void);
int RightButtonPressed(void);
void Reset(void)
{
inregs.x.ax = 0x00;
int86(0x33, &inregs, &outregs);
mInstalled = (outregs.x.ax > 0);
if(mInstalled)
mNumKeys = outregs.x.bx;
else
mNumKeys = 0;
mDispStatus = MOUSE_OFF;
}
void ShowCursor(void)
{
if(mDispStatus == MOUSE_OFF) {
inregs.x.ax = 0x01;
int86(0x33, &inregs, &outregs);
mDispStatus = MOUSE_ON;
}
}
void HideCursor(void)
{
if (mDispStatus) {
inregs.x.ax = 0x02;
int86(0x33, &inregs, &outregs);
mDispStatus = MOUSE_OFF;
}
}
void GetButtonStatus()
{
inregs.x.ax = 0x03;
int86(0x33, &inregs, &outregs);
mKey = outregs.x.bx;
x = outregs.x.cx;
y = outregs.x.dx;
}
int LeftButtonPressed(void)
{
delay(50);
GetButtonStatus();
mKeyPressed = (mKey == 1);
return mKeyPressed;
}
int RightButtonPressed(void)
{
delay(50);
GetButtonStatus();
mKeyPressed = (mKey == 2);
return mKeyPressed;
}
void SetMinMaxHorzCursPos(int min, int max)
{
inregs.x.ax = 0x07;
inregs.x.cx = min;
inregs.x.dx = max;
int86(0x33, &inregs, &outregs);
}
void SetMinMaxVertCursPos(int min, int max)
{
inregs.x.ax = 0x08;
inregs.x.cx = min;
inregs.x.dx = max;
int86(0x33, &inregs, &outregs);
}
******main.cpp******
#include"graph.h"
#include"mouse.h"
main()
{
int a,b,i,gx[50],gy[50],flag;
InitGraphics();
Reset();
SetMinMaxHorzCursPos(0,639);
SetMinMaxVertCursPos(0,479);
ShowCursor();
for(a=1;a<50;a++)
{
flag=1;
while(flag)
{
if(LeftButtonPressed()) //点左键
{
GetXY(gx[a],gy[a]);
flag=0;
}
if(RightButtonPressed()) //点右键退出
{
sound(2000);
delay(500);
nosound();
closegraph();
exit(0);
}
}
if(a%3==0) //如果点左键是3的倍数,就连接最近3个点成一
//三角形
{
HideCursor();
for(b=a,i=1;i<3;i++,b--)
line(gx[b],gy[b],gx[b-1],gy[b-1]);
line(gx[b],gy[b],gx[b+2],gy[b+2]);
ShowCursor();
}
}
sound(2000);
delay(500);
nosound();
CloseGraphics();
return 0;
}