How would you do mouse input? And is there a way to get it to check "real time", so that you can be running other things while it does that, or is that extremely complex?
Thanks abunch!
This is a discussion on Win32 Console App- Mouse input within the Windows Programming forums, part of the Platform Specific Boards category; How would you do mouse input? And is there a way to get it to check "real time", so that ...
How would you do mouse input? And is there a way to get it to check "real time", so that you can be running other things while it does that, or is that extremely complex?
Thanks abunch!
Here's an example taken mainly from MSDN
Code:#include <stdio.h> #include <windows.h> void MouseEventProc(MOUSE_EVENT_RECORD); VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD); VOID KeyEventProc(KEY_EVENT_RECORD); VOID GetInputEvents(VOID); void gotoxy(int, int); void MyErrorExit(char *s) { printf ("Fatal: %s\n", s); exit (1); } int main(void) { HANDLE hStdin; DWORD cNumRead, fdwMode, fdwSaveOldMode, i; INPUT_RECORD irInBuf[128]; // Get the standard input handle. hStdin = GetStdHandle(STD_INPUT_HANDLE); if (hStdin == INVALID_HANDLE_VALUE) MyErrorExit("GetStdHandle"); // Save the current input mode, to be restored on exit. if (! GetConsoleMode(hStdin, &fdwSaveOldMode) ) MyErrorExit("GetConsoleMode"); // Enable the window and mouse input events. fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; if (! SetConsoleMode(hStdin, fdwMode) ) MyErrorExit("SetConsoleMode"); // Loop to read and handle the input events. while (1) { // 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 MyErrorExit("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: MyErrorExit("unknown event type"); break; } } } return 0; } VOID MouseEventProc(MOUSE_EVENT_RECORD ir) { if (ir.dwEventFlags == MOUSE_MOVED) gotoxy (ir.dwMousePosition.X,ir.dwMousePosition.Y); } VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD dummy){return;}; VOID KeyEventProc(KEY_EVENT_RECORD dummy){return;}; VOID GetInputEvents(VOID){return;}; void gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), coord); }
When all else fails, read the instructions.
If you're posting code, use code tags: [code] /* insert code here */ [/code]
Great! I'll mess around with that.
But how can I make it check constantly without making it slow down a lot?
Thats perfect though... the constant thing was so I could create my own "ctrl+c"