FILLCHAR.C


/******************************************************************************\
* This is a part of the Microsoft Source Code Samples.
* Copyright 1993 - 1998 Microsoft Corporation.
* All rights reserved.
* This source code is only intended as a supplement to
* Microsoft Development Tools and/or WinHelp documentation.
* See these sources for detailed information regarding the
* Microsoft samples programs.
\******************************************************************************/

#include <windows.h>
#include "console.h"

/*******************************************************************
* FUNCTION: demoFillChar(HANDLE hConOut) *
* *
* PURPOSE: demonstrate FillConsoleOutputCharacter. Fill the entire *
* console with the character that the user hits *
* *
* INPUT: the output console to fill with characters *
********************************************************************/

void demoFillChar(HANDLE hConOut)
{
HANDLE hStdIn;
INPUT_RECORD inputBuf;
CHAR c; /* ascii character read from the console */
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD coordScreen = {0, 1}; /* location to start the attribute fill */
DWORD cCharsWritten;
BOOL bSuccess;
DWORD cInputEvents;

setConTitle(__FILE__);
myPuts(hConOut, "Let's fill the console buffer with a given character by\n"
"using the FillConsoleOutputCharacter API. Hit a key to \n"
"fill the buffer with (hit ESC to return):");
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
PERR(hStdIn != INVALID_HANDLE_VALUE, "GetStdHandle");
for(;;)
{
do
{
/* get input events until you get a key-down event */
bSuccess = ReadConsoleInput(hStdIn, &inputBuf, 1, &cInputEvents);
PERR(bSuccess, "ReadConsoleInput");
} while (inputBuf.EventType != KEY_EVENT ||
!inputBuf.Event.KeyEvent.bKeyDown);
c = (char) inputBuf.Event.KeyEvent.uChar.AsciiChar;
if (inputBuf.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)
break;
/* we need to get the console buffer size */
bSuccess = GetConsoleScreenBufferInfo(hConOut, &csbi);
PERR(bSuccess, "GetConsoleScreenBufferInfo");
bSuccess = FillConsoleOutputCharacter(hConOut, /* screen buffer handle */
c, /* character to write */
(csbi.dwSize.X * csbi.dwSize.Y) - csbi.dwSize.X, /* number of chars */
coordScreen, /* x and y coordinates of first cell */
&cCharsWritten); /* receives number of cells written to */
PERR(bSuccess, "FillConsoleOutputCharacter");
}
return;
}