This shows you the differences between two versions of the page.
— |
c:graphics.h:mousex [2024/02/16 01:05] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== mousex ===== | ||
+ | |||
+ | |||
+ | ====Syntax of mousex ==== | ||
+ | <code c> | ||
+ | #include "graphics.h" | ||
+ | int mousex(void); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Description of mousex ==== | ||
+ | <code c> | ||
+ | The mousex function is available in the winbgim implementation of BGI | ||
+ | graphics. It returns the most recent x coordinate of the mouse within the | ||
+ | graphics window. X-coordinates start with 0 at the left edge of the | ||
+ | window and increase to getmaxx( ) at the right edge of the window. | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Example of mousex ==== | ||
+ | <code c> | ||
+ | /* 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( ); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== See also ==== | ||
+ | [[getmaxx]] | ||
+ | [[mousey]] | ||
+ | [[registermousehandler]] | ||
+ | |||
+ | |||
+ | ===== output of mousex example ===== | ||
+ | |||
+ | no output of example at the moment | ||
+ | do not hesitate and add it... | ||
+ | |||
+ | |||