如何find鼠标button“点击”位置x和y?

我尝试了很多关于在C的窗口控制台中获取鼠标点击的x和y位置,但我找不到,所以我在这里发布。

我正在创build我自己的文本编辑器项目(为了好玩),我必须集成一个function,无论何时在控制台内单击,光标移动到它(单击x,y)我不想知道如何移动光标但我想知道如何获得点击位置

这是我迄今为止所做的

这个代码甚至可以接收所有的鼠标,键盘和鼠标事件,甚至鼠标点击:

#include <windows.h> #include <stdio.h> 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); } 

我听说C中不能完成,但是如果当鼠标持续移动的时候我们得到鼠标的位置,那么我相信我们可能会得到点击的位置。 但我不知道如何。

例如要获取用户双击您想要替换的位置:

 printf("double click\n"); 

通过:

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