C Board  

Go Back   C Board > General Programming Boards > C++ Programming

Reply
 
LinkBack Thread Tools Display Modes
Old 02-11-2002, 11:06 PM   #1
Registered User
 
Join Date: Feb 2002
Posts: 4
Question Just one Question?

Ok, I don't know if this exists. But...

Does any know of a "clear screen" function that will work in a Win32 console App?

any insight would be great.
Irish-Slasher is offline   Reply With Quote
Old 02-11-2002, 11:15 PM   #2
Code Goddess
 
Prelude's Avatar
 
Join Date: Sep 2001
Posts: 9,664
Indeed there is, just call clrscr().
Code:
void clrscr (void)
{
  HANDLE hstdout = STDOUT;
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  if (GetConsoleScreenBufferInfo (hstdout, &csbi))
  {
    COORD coordScreen = { 0, 0 };
    DWORD cCharsWritten;
    DWORD dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
    FillConsoleOutputCharacter (hstdout, ' ', dwConSize, coordScreen, &cCharsWritten);
    FillConsoleOutputAttribute (hstdout, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
    SetConsoleCursorPosition   (hstdout, coordScreen);
  }
}
-Prelude
__________________
My best code is written with the delete key.
Prelude is offline   Reply With Quote
Old 02-11-2002, 11:18 PM   #3
Registered User
 
Join Date: Feb 2002
Posts: 10
//I have a header file I use.. Just name this confx2.h

/*
* ConFX2.h (Advanced Textform)
*
* Console Effects
*
* Original Idea by David Piegrass
*
* Version 2.6 created by Johnny Gozde
* (used original textform function names)
*
*
* Includes:
* initscreen()
* clrscr()
* settitlebar()
* textcolor()
* textbackground()
* temptextcolor()
* temptextbackground()
* Highlight()
* unHighlight()
* gotxy()
* HideCursor()
* ShowCursor()
* SetTabSize()
* Error()
* uninitscreen()
*
* Johnny's cOoL commands:
* SetTitleLine()
* SetStatusBar()
* In-Depth Comments
*
* Doesn't Include:
* ConFX class (this version only)
* Pause() -- Sleep() made this redundant (windows.h)
* tprintf() -- Redundant because of default color values
* SetDefColor... -- These commands were blended with textcolor and textbackground
* SetCurFolMouse()-- Not needed
* InputLoop() -- Not working fully
* GetMouseClick() -- Not working fully
*/

#ifndef ConFXH
#define ConFXH

#if !defined(__CONSOLE__) && !defined(_CONSOLE)
#error Target application must be 32-bit Windows console
#endif

#if _MSC_VER > 1000
#pragma once
#endif

#include <stdio.h> // Standard I/O
#include <conio.h> // Console and port I/O
#include <stdlib.h> // Needed for _getch()
#include <windows.h> // Header file for Windows console commands (and others)
#include <string.h> // Needed for memset()
//#include "menu.h" // Contains menu paramaters

/* Not needed because tprintf is not needed

#include <stdarg.h> // Variable argument functions

*/

/* Not needed because of the Sleep() command in windows.h

#include <time.h> // Required for Pause function

*/

int textpos_x = 0; // Starting horizontal text position
int textpos_y = 0; // Starting vertical text position
int tabsize = 5; // Set initial tab size
int ifColor; // Integer for foreground color
int ibColor; // Integer for background color

WORD fColor; // Set foreground color variable
WORD bColor; // Set background color variable
WORD Color; // Combination of foreground color and background color

DWORD cCharsWritten; // Number of characters written

CONSOLE_SCREEN_BUFFER_INFO csbi; // Buffer info variable

DWORD dwConWidth; // Width of the console buffer
DWORD dwConHeight; // Height of the console buffer
DWORD dwConSize; // Number of character cells in the current buffer

HANDLE hConsole; // Handle to the console window

enum efColors // Defines foreground colors
{
fgHigh = FOREGROUND_INTENSITY,

fgBlack = 0,
fgRed = FOREGROUND_RED,
fgBlue = FOREGROUND_BLUE,
fgGreen = FOREGROUND_GREEN,
fgPurple = fgRed | fgBlue,
fgYellow = fgRed | fgGreen,
fgLtGrey = fgRed | fgBlue | fgGreen,
fgTeal = fgBlue | fgGreen,

fgBlackHigh = fgBlack | fgHigh,
fgDkGrey = fgBlackHigh,
fgRedHigh = fgRed | fgHigh,
fgBlueHigh = fgBlue | fgHigh,
fgGreenHigh = fgGreen | fgHigh,
fgPurpleHigh = fgPurple | fgHigh,
fgYellowHigh = fgYellow | fgHigh,
fgWhite = fgLtGrey | fgHigh,
fgAqua = fgTeal | fgHigh,
};

enum ebColors // Defines background colors
{
bgHigh = BACKGROUND_INTENSITY,

bgBlack = 0,
bgRed = BACKGROUND_RED,
bgGreen = BACKGROUND_GREEN,
bgBlue = BACKGROUND_BLUE,
bgPurple = bgRed | bgBlue,
bgYellow = bgRed | bgGreen,
bgLtGrey = bgRed | bgBlue | bgGreen,
bgTeal = bgBlue | bgGreen,

bgBlackHigh = bgBlack | bgHigh,
bgDkGrey = bgBlackHigh,
bgRedHigh = bgRed | bgHigh,
bgBlueHigh = bgBlue | bgHigh,
bgGreenHigh = bgGreen | bgHigh,
bgPurpleHigh = bgPurple | bgHigh,
bgYellowHigh = bgYellow | bgHigh,
bgWhite = bgLtGrey | bgHigh,
bgAqua = bgTeal | bgHigh,
};


char *mCommands[] =
{
""
};

enum mCmds
{
Temp = 1
};

struct HIGHLIGHT
{
WORD oldfColor;
WORD oldbColor;
short oldX;
short oldY;
short oldLength;
} H;


// Prototypes

void initscreen(); // Run this at the start of the program
void clrscr(); // Clears the console buffer
void settitlebar(char *title); // Sets the title of the console
void textcolor(WORD color); // Sets the foreground color
void textbackground(WORD color); // Sets the background color
void temptextcolor(WORD color); // Sets temporary colors for tprintf
void temptextbackground(WORD color); // Sets temporary colors for tprintf
void Highlight(WORD wfColor, WORD wbColor,
short nLine, short nStart, short nLength); // Highlights a selected region
void unHighlight(); // Removes highlighted information
void gotoxy(short x, short y); // Moves the cursor to a specific location
void HideCursor(); // Hides the console cursor if visible
void ShowCursor(); // Shows the console cursor if hidden
void SetTabSize(int size); // Sets the tab size
void Error(char error[100]); // Displays an error message
void uninitscreen(); // Run this at the end of the program
void tprintf(char *Text, ...); // Prints formatted text

/* This command is redundant because of the Sleep() command in "windows.h"

void Pause(double seconds); // Delays for a specified number of seconds

*/

// Classes

class cOoLCommands
{
public:

/* Removed to accomodate for loss of tprintf

void SetDefForeColor(int color); // Sets the default foreground color
void SetDefBackColor(int color); // Sets the default background color

*/

void SetTitleLine(char *buffer, short); // Displays a string at the top line of the console
void SetStatusBar(char *buffer, short); // Displays a string at the bottom line of the console

/* Removed because they don't fully work... yet
void SetCurFolMouse(bool bSCFL); // Enables/disables the cursor following the mouse
bool GetMouseClick(short start, char *string); // Gets a mouse click and returns a char from (start) position
int InputLoop(); // A do...while loop to get input
*/

bool bTopLine; // Is there a top line?
bool bBotLine; // Is there a bottom line?
// bool bCurFolMouse; // Should the cursor follow the mouse around?

char *cOldStatus; // Storage for the old status bar line
short nOldAlign; // Storage for the old alignment

} CCmd;

// Functions

void initscreen() // Run this at the start of the program
{
COORD StartCoord = {0,0};

OSVERSIONINFO osVer; // For GetVersionEx()

osVer.dwOSVersionInfoSize = sizeof(osVer); // Check if Win32s, if so, display notice and terminate
GetVersionEx(&osVer);

if (osVer.dwPlatformId == VER_PLATFORM_WIN32s)
{
MessageBox(NULL,
"This application cannot run on Windows 3.1.\n"
"This application will now terminate.",
"Error: Windows NT or Windows 95 Required to Run", MB_OK );
return;
}

hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // Sets the output handle to hConsole

GetConsoleScreenBufferInfo(hConsole, &csbi); // Get the number of character cells in the current buffer
dwConSize = csbi.dwSize.X * csbi.dwSize.Y; // Set the variable for the number of character cells
dwConWidth = csbi.dwSize.X; // Set the variable for the width of the console
dwConHeight = csbi.dwSize.Y; // Set the variable for the height of the console

SetConsoleActiveScreenBuffer(hConsole); // Sets the active screen buffer

SetConsoleCursorPosition(hConsole, StartCoord); // Set the cursor position to 0,0

fColor = fgLtGrey;
bColor = bgBlack;

ifColor = 6;
ibColor = 0;

CCmd.bTopLine = false; // There isn't a top line...yet
CCmd.bBotLine = false; // There isn't a bottom line...yet
// CCmd.bCurFolMouse = false; // The cursor won't follow the mouse around by default
}


void Error(char error[100])
// Displays an error message
{
int oldfColor = ifColor;
int oldbColor = ibColor;
textcolor(15);
textbackground(0);
printf("%s\n\n", error);
printf("Press any key to continue");
_getch();
textcolor(oldfColor);
textbackground(oldbColor);
}


void clrscr()
// Clears the console buffer
{
COORD StartCoord;

if (!CCmd.bTopLine)
{
StartCoord.X = 0;
StartCoord.Y = 0;
}
else
{
StartCoord.X = 0;
StartCoord.Y = 1;
}

FillConsoleOutputCharacter(hConsole, (TCHAR) ' ',
dwConSize, StartCoord, &cCharsWritten);

if (CCmd.bBotLine)
CCmd.SetStatusBar(CCmd.cOldStatus, CCmd.nOldAlign);
}


void settitlebar(char *title)
// Sets the title of the console
{
SetConsoleTitle(title);
}


void textcolor(WORD color)
// Sets the foreground color
{
COORD StartCoord;

if (!CCmd.bTopLine)
{
StartCoord.X = 0;
StartCoord.Y = 0;
}
else
{
StartCoord.X = 0;
StartCoord.Y = 1;
}

fColor = (efColors)color;

Color = fColor | bColor;
ifColor = color;

FillConsoleOutputAttribute(hConsole, Color, dwConSize,
StartCoord, &cCharsWritten);

SetConsoleTextAttribute(hConsole, Color);
}


void textbackground(WORD color)
// Sets the background color
{
COORD StartCoord;

if (!CCmd.bTopLine)
{
StartCoord.X = 0;
StartCoord.Y = 0;
}
else
{
StartCoord.X = 0;
StartCoord.Y = 1;
}

bColor = (ebColors)color;

Color = fColor | bColor;
ibColor = color;

FillConsoleOutputAttribute(hConsole, Color, dwConSize,
StartCoord, &cCharsWritten);

SetConsoleTextAttribute(hConsole, Color);
}


void temptextcolor(WORD color)
// Sets the foreground color
{
COORD StartCoord;

if (!CCmd.bTopLine)
{
StartCoord.X = 0;
StartCoord.Y = 0;
}
else
{
StartCoord.X = 0;
StartCoord.Y = 1;
}

fColor = (efColors)color;

Color = fColor | bColor;
ifColor = color;

FillConsoleOutputAttribute(hConsole, Color, dwConSize,
StartCoord, &cCharsWritten);
}


void temptextbackground(WORD color)
// Sets the background color
{
COORD StartCoord;

if (!CCmd.bTopLine)
{
StartCoord.X = 0;
StartCoord.Y = 0;
}
else
{
StartCoord.X = 0;
StartCoord.Y = 1;
}

bColor = (ebColors)color;

Color = fColor | bColor;
ibColor = color;

FillConsoleOutputAttribute(hConsole, Color, dwConSize,
StartCoord, &cCharsWritten);
}


void Highlight(WORD wfColor, WORD wbColor,
short nLine, short nStart, short nLength)
// Highlights a specified region
{
COORD coord;

if ((nLine < 0) || (nLine > csbi.dwMaximumWindowSize.Y))
{
Error("Invalid nLine paramater for Highlight()");
return;
}
if ((CCmd.bTopLine) && (nLine < 1))
{
Error("Invalid nLine paramater for Highlight()");
return;
}
if ((CCmd.bBotLine)
&& (nLine > csbi.dwMaximumWindowSize.Y - 1))
{
Error("Invalid nLine paramater for Highlight()");
return;
}

if ((nStart < 0) || (nStart > csbi.dwMaximumWindowSize.X))
{
Error("Invalid nStart paramater for Highlight()");
return;
}

if (nLength < 1)
{
Error("Invalid nLength paramater for Highlight()");
return;
}

if ((nLength + nStart) > csbi.dwMaximumWindowSize.X)
{
Error("nStart and nLength are too large (Highlight())");
}

coord.X = nStart;
coord.Y = nLine;

H.oldbColor = bColor;
H.oldfColor = fColor;
H.oldLength = nLength;
H.oldX = nStart;
H.oldY = nLine;

FillConsoleOutputAttribute(hConsole, wfColor |
wbColor, nLength, coord, &cCharsWritten);
}


void unHighlight()
// Removes highlighted information
{
Highlight(H.oldfColor, H.oldbColor, H.oldY, H.oldX,
H.oldLength);
}


void gotoxy(short x, short y)
// Moves the cursor to a specific location
{
if ((x > csbi.dwMaximumWindowSize.X) || (x < 0))
{
Error("Invalid x coordinate for gotoxy()");
return;
}
if (!CCmd.bTopLine)
{
if ((y > csbi.dwMaximumWindowSize.Y) || (y < 0))
{
Error("Invalid y coordinate for gotoxy()");
return;
}
}
else
{
if ((y > csbi.dwMaximumWindowSize.Y) || (y < 2))
{
Error("Invalid y coordinate for gotoxy()");
return;
}
}

COORD coord = {x, y};

SetConsoleCursorPosition(hConsole, coord);

textpos_x = x;
textpos_y = y;
}


void tprintf(char *Text, ...)
// Prints formatted text
{
static char buffer[2000];
COORD coord = {textpos_x, textpos_y};
COORD coordDest = {0, 0};

SMALL_RECT srScrollRect;

CHAR_INFO chiFill;

va_list arglist;
va_start(arglist, Text); // Sets up the arglist
vsprintf(buffer, Text, arglist); // Stores the output into the buffer variable

for (int i = 0; buffer[i] != '\0'; i++)
{
if (buffer[i] == '\a')
{
printf ("\a");
}
else if (buffer[i] == '\b')
{
coord.X--;
if (coord.X < 0)
{
coord.X += 80;
coord.Y--;
}
}
else if (buffer[i] == '\n')
{
coord.X = 0;
coord.Y++;
}
else if (buffer[i] == '\t')
{
coord.X = coord.X + tabsize;
}
else
{
WriteConsoleOutputCharacter (hConsole, &buffer[i],
1, coord, &cCharsWritten); // Write the character to the screen
WriteConsoleOutputAttribute (hConsole, &Color,
1, coord, &cCharsWritten); // Format the character
coord.X++;

if (coord.X >= 80) // Move down a line if needed
{
coord.X = 0;
coord.Y++;
}

GetConsoleScreenBufferInfo(hConsole, &csbi);
if ((csbi.dwSize.Y-1) == csbi.dwCursorPosition.Y)
{
srScrollRect.Top = 1;
srScrollRect.Bottom = csbi.dwSize.Y - 1;
srScrollRect.Left = 0;
srScrollRect.Right = csbi.dwSize.X - 1;

coordDest.X = 0;
coordDest.Y = 0;
chiFill.Attributes = csbi.wAttributes;
chiFill.Char.AsciiChar = ' ';

ScrollConsoleScreenBuffer(hConsole,
&srScrollRect, NULL, coordDest, &chiFill); // Scroll the screen buffer
}
}
}
textpos_x = coord.X;
textpos_y = coord.Y;
SetConsoleCursorPosition(hConsole, coord);

va_end(arglist); // Finish using the arglist
}


void HideCursor()
// Hides the console cursor
{
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hConsole, &cci);
cci.bVisible = FALSE;
SetConsoleCursorInfo(hConsole, &cci);
}


void ShowCursor()
// Shows the console cursor
{
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hConsole, &cci);
cci.bVisible = TRUE;
SetConsoleCursorInfo(hConsole, &cci);
}


void SetTabSize(int size)
// Sets the tab size
{
tabsize = size;
}

void cOoLCommands::SetTitleLine(char *buffer, short align) // Displays a string at the top line of the console
{
COORD StartCoord = {0, 0}; // Position the status line at (0, 0)
COORD NewCoord = {0, 2};
int len; // The length of the input string parameter
int left; // Used for calculating how far the string is from the left of the screen
char szTemp[256];
short sWidth; // Console width
sWidth = (short)dwConWidth;

if (align == 1)
{
strcpy(szTemp, buffer); // Add the title
len = strlen(szTemp); // Get the length of the buffer
memset(szTemp + len, ' ', sWidth - len); // Blank out rest of line
}
else if (align == 2)
{
strcpy(szTemp, buffer);
len = strlen(szTemp); // Get the length
left = ((sWidth - len) / 2); // Figure out where to place the title
strcpy(szTemp, " ");
for (int i = 1; i < left; i++)
strcat(szTemp, " "); // Fill the left side with spaces
strcat(szTemp, buffer); // Put the title in
for (i = 1; i <= (sWidth - len - left); i++)
strcat(szTemp, " "); // Fill the right side with spaces
}
else if (align == 3)
{
strcpy(szTemp, buffer);
len = strlen(szTemp); // Get the length
left = (sWidth - len); // Get the length of the left side
strcpy(szTemp, " ");
for (int i = 1; i < left; i++)
strcat(szTemp, " "); // Fill the left side with spaces
strcat(szTemp, buffer); // Now add the title
}

WriteConsoleOutputCharacter(hConsole, szTemp, sWidth,
StartCoord, &cCharsWritten); // Write the string to the console at the correct position

FillConsoleOutputAttribute(hConsole, fgRed |
bgWhite, sWidth, StartCoord, &cCharsWritten); // Color the status line so it stands out

CCmd.bTopLine = true; // There is a top line

if (csbi.dwCursorPosition.Y < 2)
SetConsoleCursorPosition(hConsole, NewCoord);
}


void cOoLCommands::SetStatusBar(char *buffer, short align) // Displays a string at the bottom line of the console
{
COORD StartCoord = {0, (short)dwConHeight -1}; // Position the status line at (0, 0)
int len; // The length of the input string parameter
int left; // Used for calculating how far the string is from the left of the screen
char szTemp[256];
short sWidth; // Console width
sWidth = (short)dwConWidth;

if (align == 1)
{
strcpy(szTemp, buffer); // Add the title
len = strlen(szTemp); // Get the length of the buffer
memset(szTemp + len, ' ', sWidth - len); // Blank out rest of line
}
else if (align == 2)
{
strcpy(szTemp, buffer);
len = strlen(szTemp); // Get the length
left = ((sWidth - len) / 2); // Figure out where to place the title
strcpy(szTemp, " ");
for (int i = 1; i < left; i++)
strcat(szTemp, " "); // Fill the left side with spaces
strcat(szTemp, buffer); // Put the title in
for (i = 1; i <= (sWidth - len - left); i++)
strcat(szTemp, " "); // Fill the right side with spaces
}
else if (align == 3)
{
strcpy(szTemp, buffer);
len = strlen(szTemp); // Get the length
left = (sWidth - len); // Get the length of the left side
strcpy(szTemp, " ");
for (int i = 1; i < left; i++)
strcat(szTemp, " "); // Fill the left side with spaces
strcat(szTemp, buffer); // Now add the title
}

WriteConsoleOutputCharacter(hConsole, szTemp, sWidth,
StartCoord, &cCharsWritten); // Write the string to the console at the correct position

FillConsoleOutputAttribute(hConsole, fgRed |
bgWhite, sWidth, StartCoord, &cCharsWritten); // Color the status line so it stands out

CCmd.cOldStatus = buffer; // Set the old status info
CCmd.nOldAlign = align; // Set the old align info

CCmd.bBotLine = true; // There is a bottom line
}

void uninitscreen() // Run this at the end of the program
{
CloseHandle(hConsole); // Closes the handle to the console
}

#endif // ConFXH
SlimDady is offline   Reply With Quote
Old 02-11-2002, 11:48 PM   #4
Seņor Member
 
tim545666's Avatar
 
Join Date: Jan 2002
Posts: 561
A more common way to do it would be to do:
Code:
#include <conio.h>
//other includes
...
int main ()
{
   //code here
   clrscr(); //clears screen
   //more code here
   return 0;
}
__________________
"Freedom's just another word for not caring about the quality of your work"
-Dilbert
tim545666 is offline   Reply With Quote
Old 02-11-2002, 11:49 PM   #5
Seņor Member
 
tim545666's Avatar
 
Join Date: Jan 2002
Posts: 561
Oh yeah include conio.c instead of .h if you are using Bloodshed Dev C++ (why can't they do .h like everyone else?).
__________________
"Freedom's just another word for not caring about the quality of your work"
-Dilbert
tim545666 is offline   Reply With Quote
Old 02-12-2002, 12:15 AM   #6
Code Goddess
 
Prelude's Avatar
 
Join Date: Sep 2001
Posts: 9,664
Just on a side note, conio.h isn't a standard header and anything contained in it isn't a standard function so not all compilers will have it.

-Prelude
__________________
My best code is written with the delete key.
Prelude is offline   Reply With Quote
Old 02-12-2002, 10:19 AM   #7
Registered User
 
Join Date: Feb 2002
Posts: 4
Thumbs up Thanks for the Help!

Thanks, I got to compile and work.
Irish-Slasher is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Alice.... Lurker General Discussions 16 06-20-2005 02:51 PM
Debugging question o_0 C Programming 9 10-10-2004 05:51 PM
Question about pointers #2 maxhavoc C++ Programming 28 06-21-2004 12:52 PM
Question... TechWins A Brief History of Cprogramming.com 16 07-28-2003 09:47 PM
Question, question! oskilian A Brief History of Cprogramming.com 5 12-24-2001 01:47 AM


All times are GMT -6. The time now is 08:04 PM.


Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22