Comment trouver le bouton de la souris ‘clic’ position x et y?

J’ai beaucoup essayé de chercher à obtenir la position x et y du clic de souris à l’intérieur de la console de Windows en C, mais je ne peux pas le trouver, alors je poste ici.

Je crée mon propre projet d’éditeur de texte (pour le plaisir) et je dois intégrer une fonctionnalité qui permet de déplacer le curseur lorsque je clique sur celle-ci (cliquez sur x, y). mais je veux savoir comment obtenir la position de clic .

C'est ce que j'ai fait jusqu'à maintenant

Ce code peut recevoir tous les événements souris et clavier et souris, même lorsque la souris est cliquée:

#include  #include  HANDLE hStdin; DWORD fdwSaveOldMode; VOID ErrorExit(LPSTR); VOID KeyEventProc(KEY_EVENT_RECORD); VOID MouseEventProc(MOUSE_EVENT_RECORD); VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD); int main(VOID) { DWORD cNumRead, fdwMode, i; INPUT_RECORD irInBuf[128]; int counter=0; // Get the standard input handle. hStdin = GetStdHandle(STD_INPUT_HANDLE); if (hStdin == INVALID_HANDLE_VALUE) ErrorExit("GetStdHandle"); // Save the current input mode, to be restored on exit. if (! GetConsoleMode(hStdin, &fdwSaveOldMode) ) ErrorExit("GetConsoleMode"); // Enable the window and mouse input events. fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; if (! SetConsoleMode(hStdin, fdwMode) ) ErrorExit("SetConsoleMode"); // Loop to read and handle the next 100 input events. while (counter++ <= 100) { // Wait for the events. if (! ReadConsoleInput( hStdin, // input buffer handle irInBuf, // buffer to read into 128, // size of read buffer &cNumRead) ) // number of records read ErrorExit("ReadConsoleInput"); // Dispatch the events to the appropriate handler. for (i = 0; i < cNumRead; i++) { switch(irInBuf[i].EventType) { case KEY_EVENT: // keyboard input KeyEventProc(irInBuf[i].Event.KeyEvent); break; case MOUSE_EVENT: // mouse input MouseEventProc(irInBuf[i].Event.MouseEvent); break; case WINDOW_BUFFER_SIZE_EVENT: // scrn buf. resizing ResizeEventProc( irInBuf[i].Event.WindowBufferSizeEvent ); break; case FOCUS_EVENT: // disregard focus events case MENU_EVENT: // disregard menu events break; default: ErrorExit("Unknown event type"); break; } } } // Restore input mode on exit. SetConsoleMode(hStdin, fdwSaveOldMode); return 0; } VOID ErrorExit (LPSTR lpszMessage) { fprintf(stderr, "%s\n", lpszMessage); // Restore input mode on exit. SetConsoleMode(hStdin, fdwSaveOldMode); ExitProcess(0); } VOID KeyEventProc(KEY_EVENT_RECORD ker) { printf("Key event: "); if(ker.bKeyDown) printf("key pressed\n"); else printf("key released\n"); } VOID MouseEventProc(MOUSE_EVENT_RECORD mer) { #ifndef MOUSE_HWHEELED #define MOUSE_HWHEELED 0x0008 #endif printf("Mouse event: "); switch(mer.dwEventFlags) { case 0: if(mer.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) { printf("left button press \n"); } else if(mer.dwButtonState == RIGHTMOST_BUTTON_PRESSED) { printf("right button press \n"); } else { printf("button press\n"); } break; case DOUBLE_CLICK: printf("double click\n"); break; case MOUSE_HWHEELED: printf("horizontal mouse wheel\n"); break; case MOUSE_MOVED: printf("mouse moved\n"); break; case MOUSE_WHEELED: printf("vertical mouse wheel\n"); break; default: printf("unknown\n"); break; } } VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD wbsr) { printf("Resize event\n"); printf("Console screen buffer is %d columns by %d rows.\n", wbsr.dwSize.X, wbsr.dwSize.Y); } 

J’ai entendu dire que cela ne pouvait pas être fait en C, mais si nous obtenons la position de la souris lorsque la souris bouge continuellement, je suis sûr que nous pourrons obtenir la position du clic. Mais je ne sais pas comment.

Par exemple, pour obtenir la position sur laquelle l’utilisateur a double-cliqué et que vous souhaitez remplacer:

 printf("double click\n"); 

par:

 printf("double clicked at x=%d, y=%d\n", mer.dwMousePosition.X, mer.dwMousePosition.Y);