|
|
1.1 ! root 1: #include <windows.h> ! 2: #include <string.h> ! 3: #include <malloc.h> ! 4: #include "console.h" ! 5: ! 6: /********************************************************************* ! 7: * FUNCTION: demoReadConChar(HANDLE hConOut) * ! 8: * * ! 9: * PURPOSE: demonstrate ReadConsoleOutputCharacter. Read the text on * ! 10: * line that the user clicks on and output it to the console * ! 11: * * ! 12: * INPUT: the console output handle to write to * ! 13: *********************************************************************/ ! 14: ! 15: void demoReadConChar(HANDLE hConOut) ! 16: { ! 17: BOOL bSuccess; ! 18: INPUT_RECORD inputBuffer; ! 19: DWORD dwStdInMode; ! 20: HANDLE hStdIn; ! 21: DWORD dwInputEvents; ! 22: COORD coordLine; /* coordinates of where to read characters from */ ! 23: CHAR *szLine; /* buffer to hold the line read from the console */ ! 24: DWORD dwCharsRead; ! 25: int i; ! 26: ! 27: setConTitle(__FILE__); ! 28: myPuts(hConOut, "Click on any line containing characters. I will use\n" ! 29: "ReadConsoleOutputCharacter to read that line of text into\n" ! 30: "a buffer, then print that buffer to the console at the\n" ! 31: "current cursor position. Hit ESC to return.\n\n"); ! 32: hStdIn = GetStdHandle(STD_INPUT_HANDLE); ! 33: PERR((int) hStdIn != -1,"GetStdHandle"); ! 34: /* save the console mode */ ! 35: bSuccess = GetConsoleMode(hStdIn, &dwStdInMode); ! 36: PERR(bSuccess, "GetConsoleMode"); ! 37: /* enable mouse input */ ! 38: bSuccess = SetConsoleMode(hStdIn, dwStdInMode | ENABLE_MOUSE_INPUT); ! 39: PERR(bSuccess, "SetConsoleMode"); ! 40: /* allocate space for one line */ ! 41: szLine = (char *) malloc(getConX(hConOut)); ! 42: PERR(szLine, "malloc"); ! 43: for(;;) ! 44: { ! 45: /* get a single input event */ ! 46: bSuccess = ReadConsoleInput(hStdIn, &inputBuffer, 1, &dwInputEvents); ! 47: PERR(bSuccess, "ReadConsoleInput"); ! 48: switch (inputBuffer.EventType) ! 49: { ! 50: case KEY_EVENT: ! 51: /* is it an ESC key? */ ! 52: if (inputBuffer.Event.KeyEvent.bKeyDown && ! 53: inputBuffer.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ! 54: { ! 55: /* set input mode back to what it was originally and return */ ! 56: bSuccess = SetConsoleMode(hStdIn, dwStdInMode); ! 57: PERR(bSuccess, "SetConsoleMode"); ! 58: free(szLine); /* free allocated space for a text line */ ! 59: return; ! 60: } ! 61: break; ! 62: case MOUSE_EVENT: ! 63: /* was this was a click event? Is any button down or not? */ ! 64: if (inputBuffer.Event.MouseEvent.dwEventFlags != MOUSE_MOVED && ! 65: inputBuffer.Event.MouseEvent.dwButtonState) ! 66: { ! 67: /* read the line where the mouse is, starting at column 0 */ ! 68: coordLine.X = 0; ! 69: coordLine.Y = inputBuffer.Event.MouseEvent.dwMousePosition.Y; ! 70: bSuccess = ReadConsoleOutputCharacter(hConOut, szLine, ! 71: getConX(hConOut), coordLine, &dwCharsRead); ! 72: PERR(bSuccess, "ReadConsoleOutputCharacter"); ! 73: /* strip trailing spaces */ ! 74: i = getConX(hConOut) - 1; ! 75: szLine[i--] = 0; /* null terminate */ ! 76: while (szLine[i] == ' ') ! 77: szLine[i--] = 0; ! 78: myPuts(hConOut, szLine); ! 79: } ! 80: } /* switch */ ! 81: } /* while */ ! 82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.