FLUSH.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /******************************************************************************
  2. *       This is a part of the Microsoft Source Code Samples. 
  3. *       Copyright (C) 1993-1997 Microsoft Corporation.
  4. *       All rights reserved. 
  5. *       This source code is only intended as a supplement to 
  6. *       Microsoft Development Tools and/or WinHelp documentation.
  7. *       See these sources for detailed information regarding the 
  8. *       Microsoft samples programs.
  9. ******************************************************************************/
  10. #include <windows.h>
  11. #include "console.h"
  12. /*********************************************************************
  13. * FUNCTION: demoFlush(HANDLE hConOut)                                *
  14. *                                                                    *
  15. * PURPOSE: demonstrate FlushConsoleInputBuffer. Slowly read from the *
  16. *          iput queue, allowing a backlog of input events to start   *
  17. *          filling the queue. Flush the input queue after outputting *
  18. *          every fifth character.                                    *
  19. *                                                                    *
  20. * INPUT: the output console handle to write to                       *
  21. *********************************************************************/
  22. void demoFlush(HANDLE hConOut)
  23. {
  24.   HANDLE hStdIn;
  25.   INPUT_RECORD InputBuffer;
  26.   DWORD dwInputEvents;
  27.   int i = 0;
  28.   BOOL bSuccess;
  29.   DWORD dwBytesWritten;
  30.   setConTitle(__FILE__);
  31.   hStdIn = GetStdHandle(STD_INPUT_HANDLE);
  32.   PERR(hStdIn != INVALID_HANDLE_VALUE, "GetStdHandle");
  33.   myPuts(hConOut, "Type a number of characters quickly. I will read 5n"
  34.                   "characters from the input buffer with a Sleep() delayn"
  35.                   "which will allow it to fill with characters. After 5n"
  36.                   "characters I will flush the input buffer withn"
  37.                   "FlushConsoleInputBuffer and restart the sequence. Noten"
  38.                   "that any characters you've typed that haven't been readn"
  39.                   "yet are lost due to the flush.n"
  40.                   "Enter characters (hit ESC to return):");
  41.   for(;;)
  42.     {
  43.     bSuccess = ReadConsoleInput(hStdIn, &InputBuffer, 1, &dwInputEvents);
  44.     PERR(bSuccess, "ReadConsoleInput");
  45.     /* is it a key down event? */
  46.     if (InputBuffer.EventType == KEY_EVENT && 
  47.         InputBuffer.Event.KeyEvent.bKeyDown)
  48.       {
  49.       if (InputBuffer.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)
  50.         return;
  51.       /* write the ascii character out to the console */
  52.       bSuccess = WriteFile(hConOut,
  53.           &InputBuffer.Event.KeyEvent.uChar.AsciiChar,
  54.           1, &dwBytesWritten, NULL);
  55.       PERR(bSuccess, "WriteFile");
  56.       Sleep(1000); /* pause for 1s */
  57.       i++;
  58.       if (i > 5)
  59.         {
  60.         /* flush the input buffer */
  61.         bSuccess = FlushConsoleInputBuffer(hStdIn);
  62.         PERR(bSuccess, "FlushConsoleInputBuffer");
  63.         i = 0;
  64.         }
  65.       } /* if */
  66.     } /* while */
  67.   return;
  68. }