|
MOUSE
PROGRAMMING IN C/C++ |
|
Mouse can be used in text mode as well as in graphics mode.
Usually it is used in graphics mode. Hence we must first
change over to graphics mode. In our program the function initgraph() is responsible
for switching the mode from text to graphics .DETECT is a
macro defined in 'graphics.h'. It requests initgraph() to
automatically determine which graphics driver to load in order
to switch to the highest resolution graphics mode. The
initgraph() function takes three parameters, the graphics
driver, the graphics mode and the path to the driver file.
|
|
Once the driver has been
loaded, initgraph() sets up the numeric values of the
graphics mode chosen in the variables gd and gm respectively.
Here we are assuming that the driver files are in the
directory 'c:\tc\bgi'. Hence the path passed to initgraph() is
'c:\tc\bgi'.
The various
mouse functions can be accessed by setting up the AX register
with different values (service number) and issuing interrupt
number 51. The functions are listed below.
|
|
|
|
Interrupt |
Service |
Purpose |
51
|
0
|
Reset mouse and get
status
Call with AX = 0
Returns: AX = FFFFh If mouse support is available
Ax = 0 If mouse support is not
available |
|
51 |
1 |
Show mouse pointer
Call with AX = 1
Returns: Nothing |
|
51 |
2 |
Hide mouse pointer
Call with AX = 2
Returns: Nothing |
|
51 |
3 |
Get mouse position and
button status
Call with AX = 3
Returns: BX = mouse button status
Bit Significance
0 button not pressed
1 left button is pressed
2 right button is pressed
3 center button is pressed
CX = x coordinate
DX = y coordinate |
|
51 |
4 |
Set mouse pointer
position
Call with AX = 4
CX = x coordinate
DX = y coordinate
Returns: Nothing |
|
51 |
7 |
Set horizontal limits
for pointer
Call with AX = 7
CX = minimum x coordinate
DX = maximum x coordinate
Returns: Nothing |
|
51 |
8 |
Set vertical limits
for pointer
Call with AX = 8
CX = minimum y coordinate
DX = maximum y coordinate
Returns: Nothing |
Let us consider a program
which makes use of the above functions.
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<dos.h>
union REGS in,out;
int callmouse()
{
in.x.ax=1;
int86(51,&in,&out);
return 1;
}
void mouseposi(int &xpos,int &ypos,int &click)
{
in.x.ax=3;
int86(51,&in,&out);
click=out.x.bx;
xpos=out.x.cx;
ypos=out.x.dx;
}
int mousehide()
{
in.x.ax=2;
int86(51,&in,&out);
return 1;
}
void setposi(int &xpos,int &ypos)
{
in.x.ax=4;
in.x.cx=xpos;
in.x.dx=ypos;
int86(51,&in,&out);
}
int main()
{
int x,y,cl,a,b;
clrscr();
int g=DETECT,m;
initgraph(&g,&m,"c:\tc\bgi");
a=100;
b=400;
setposi(a,b);
callmouse();
do
{
mouseposi(x,y,cl);
gotoxy(10,9);
printf("\n\tMouse Position is: %d,%d",x,y);
printf("\n\tClick: %d",cl);
printf("\n\tPress any key to hide
the mouse");
}while(!kbhit());
getch();
mousehide();
printf("\n\n\tPress any key to Exit");
getch();
} |
The above program makes use
of the following functions:
-
callmouse(
)
-
mouseposi(
)
-
mousehide(
)
-
setposi( )
callmouse() :- In this
function AX is set to "1". When this function is called in
main() it displays the mouse pointer. The position of the
pointer can be changed by using the mouse.
mousehide()
:- In this function AX is set to "2".When
this function is called in main() it hides the mouse
pointer. This function is useful while drawing figures,
first the mouse pointer is kept hidden, then the figure is
been drawn and again the mouse pointer is been called.
mouseposi() :- In this
function AX is set to "3". This function returns the
position of the mouse pointer. It contains three
parameters,they are xpos,ypos,click. xpos and ypos returns
the position of x co-ordinate and y co-ordinate
respectively. Click is the integer variable which returns
the values 1,2,3 corresponding to the button pressed on
the mouse and 0 for buttons being not pressed.
kbhit: If any key is pressed kbhit returns nonzero
integer; if not it returns zero
setposi() :- In this function
AX is set to "4". This function sets the mouse pointer to
specific position . CX is been loaded by x co-ordinate of
the mouse pointer and DX is been loaded with the y
co-ordinate of the mouse pointer.
Let us consider
another program
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<dos.h>
union REGS in,out;
int callmouse()
{
in.x.ax=1;
int86(51,&in,&out);
return 1;
}
void restrictmouseptr(int x1,int y1,int
x2,int y2)
{
in.x.ax=7;
in.x.cx=x1;
in.x.dx=x2;
int86(51,&in,&out);
in.x.ax=8;
in.x.cx=y1;
in.x.dx=y2;
int86(51,&in,&out);
}
int main()
{
int x,y,cl,a,b;
clrscr();
int g=DETECT,m;
initgraph(&g,&m,"c:\tc\bgi");
rectangle(100,100,550,400);
callmouse();
restrictmouseptr(100,100,550,400);
getch();
} |
The above program
makes use of the following functions:
-
Horizontal ( )
-
Vertical( )
Horizontal() :- In this
function AX is set to "7". Its sets the horizontal barrier
for the pointer which restricts the mouse pointer to pass
that limit. CX is been loaded with the minimum x
co-ordinate and Dx is been loaded with the maximum x
co-ordinate.
Vertical() :- In this
function AX is set to "8".Its sets the vertical barrier
for the pointer which restricts the mouse pointer to pass
that limit. CX is been loaded with the minimum y
co-ordinate and Dx is been loaded with the maximum y
co-ordinate.
Click here to download all example programs.
For queries on the above please
contact
ranjith@electrofriends.com
|
|
|
|
|