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 |
51 | 1 |
Show mouse pointer |
51 | 2 |
Hide mouse pointer |
51 | 3 |
Get mouse position and button status |
51 | 4 |
Set mouse pointer position |
51 | 7 |
Set horizontal limits for pointer |
51 | 8 |
Set vertical limits for pointer |
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.
Please help…
I am planning to make a mouse interactive program in C++ for my project. I would like to know the basics od using and creating buttons in C++ and how to write the function for detecting mouse clicks and relating them to switch case operations… PLease reply at the earliest as it is absolutely urgent…
Thanx
I am thankful for the new things I learned reading your post. Thanks.
Ultimate website boss……………..