#include "graphics.h" void registermousehandler(int kind, void h(int, int));
registermousehandler
.
The first argument to registermousehandler
is
one of these constants from the graphics.h
file:
WM_MOUSEMOVE
WM_LBUTTONDBLCLK
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_MBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
WM_RBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP
registermousehandler
must be the name of the handler function that you wrote. This
function must be a void function with two int parameters.
Whenever the specified mouse event occurs, your handler will
be called and the two int parameters will be the x and y positions
where the event happened.
The middle mouse button handlers aren't working on my machine. I haven't yet tracked down the reason--it could be a broken mouse or it could be a bug in my programming.
/* mouse example */ #include "graphics.h" // The click_handler will be called whenever the left mouse button is // clicked. It checks copies the x,y coordinates of the click to // see if the click was on a red pixel. If so, then the boolean // variable red_clicked is set to true. Note that in general // all handlers should be quick. If they need to do more than a little // work, they should set a variable that will trigger the work going, // and then return. bool red_clicked = false; void click_handler(int x, int y) { if (getpixel(x,y) == RED) red_clicked = true; } // Call this function to draw an isosoles triangle with the given base and // height. The triangle will be drawn just above the botton of the screen. void triangle(int base, int height) { int maxx = getmaxx( ); int maxy = getmaxy( ); line(maxx/2 - base/2, maxy - 10, maxx/2 + base/2, maxy - 10); line(maxx/2 - base/2, maxy - 10, maxx/2, maxy - 10 - height); line(maxx/2 + base/2, maxy - 10, maxx/2, maxy - 10 - height); } void main(void) { int maxx, maxy; // Maximum x and y pixel coordinates int divisor; // Divisor for the length of a triangle side // Put the machine into graphics mode and get the maximum coordinates: initwindow(450, 300); maxx = getmaxx( ); maxy = getmaxy( ); // Register the function that handles a left mouse click registermousehandler(WM_LBUTTONDOWN, click_handler); // Draw a white circle with red inside and a radius of 50 pixels: setfillstyle(SOLID_FILL, RED); setcolor(WHITE); fillellipse(maxx/2, maxy/2, 50, 50); // Print a message and wait for a red pixel to be double clicked: settextstyle(DEFAULT_FONT, HORIZ_DIR, 2); outtextxy(20, 20, "Left click in RED to end."); setcolor(BLUE); red_clicked = false; divisor = 2; while (!red_clicked) { triangle(maxx/divisor, maxy/divisor); delay(500); divisor++; } cout << "The mouse was clicked at: "; cout << "x=" << mousex( ); cout << " y=" << mousey( ) << endl; // Switch back to text mode: closegraph( ); }