Z zmodem Medlem sedan apr. 2002 77 inlägg Frågan 10 okt. 2002 19:15 #1 De första frågorna som dykt upp på programmeringskursen nu är hur man gör schyssta grejor i konsolen...
Typ, rensar skrämen, byter för- och bakgrundsfärg, flyttar markören o.s.v....
Coper här har redan varit igång och frågat lite :bire
Hur är det, kan man lösa detta med nån sorts escape-koder och i så fall hur? Finns det nåt schysst library man kan använda, det lär väl knappast ingå några användbara prylar för användamålet i STL?
Tacksam för all info jag kan få :)
P PeW Medlem sedan juni 2000 10 432 inlägg Är det console i *nix är ncurses ett vettigt lib med en hel del features.
Annars är conio.h nog det du söker.
STL har inget med presentationen (kosmetikan) att göra.
C Coord Medlem sedan okt. 2002 11 inlägg ConsoleAPI.h:
#pragma once
#include <windows.h>
#include <iostream>
class ConsoleAPI
{
public:
ConsoleAPI();
bool gotoxy(int x, int y);
bool clrscr();
bool setbackgcolor(int color);
bool setforecolor(int color);
private:
HANDLE m_hOut;
WORD m_forecolor;
WORD m_backcolor;
int m_x, m_y;
};
ConsoleAPI.cpp:
#include <windows.h>
#include <iostream>
#include "consoleAPI.h"
using namespace std;
ConsoleAPI::ConsoleAPI()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == NULL)
{
cout << "Error! Could not get Output Handle\n";
exit(1);
}
else
{
m_hOut = hOut;
m_forecolor = 0;
m_backcolor = 0;
}
}
bool ConsoleAPI::gotoxy(int x, int y)
{
m_x = x;
m_y = y;
COORD pos = {m_x, m_y};
if (!SetConsoleCursorPosition(m_hOut, pos))
{
cout << "Error! Could not set Console Cursor Position\n";
return false;
}
return true;
}
bool ConsoleAPI::clrscr()
{
COORD pos = {0, 0};
DWORD len;
if (!FillConsoleOutputAttribute(m_hOut, m_forecolor | m_backcolor, 10000, pos, &len))
{
cout << "Error! Could not set Console Output Attribute\n";
return false;
}
if (!FillConsoleOutputCharacter(m_hOut, ' ', len, pos, &len))
{
cout << "Error! Could not set Console Output Attribute\n";
return false;
}
return true;
}
bool ConsoleAPI::setbackgcolor(int color)
{
WORD wcolor;
switch (color)
{
case 1:
wcolor = BACKGROUND_RED;
break;
case 2:
wcolor = BACKGROUND_GREEN;
break;
case 3:
wcolor = BACKGROUND_BLUE;
break;
case 4:
wcolor = BACKGROUND_RED | BACKGROUND_GREEN;
break;
case 5:
wcolor = BACKGROUND_RED | BACKGROUND_BLUE;
break;
case 6:
wcolor = BACKGROUND_GREEN | BACKGROUND_BLUE;
break;
case 7:
wcolor = BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE;
break;
case 8:
wcolor = BACKGROUND_RED | BACKGROUND_INTENSITY;
break;
case 9:
wcolor = BACKGROUND_GREEN | BACKGROUND_INTENSITY;
break;
case 10:
wcolor = BACKGROUND_BLUE | BACKGROUND_INTENSITY;
break;
case 11:
wcolor = BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
break;
case 12:
wcolor = BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY;
break;
case 13:
wcolor = BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY;
break;
case 14:
wcolor = BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY;
break;
default:
wcolor = color;
}
m_backcolor = wcolor;
if (!SetConsoleTextAttribute(m_hOut, m_forecolor | m_backcolor))
{
cout << "Error! Could not set Console Text Attribute\n";
return false;
}
return true;
}
bool ConsoleAPI::setforecolor(int color)
{
WORD wcolor;
switch (color)
{
case 1:
wcolor = FOREGROUND_RED;
break;
case 2:
wcolor = FOREGROUND_GREEN;
break;
case 3:
wcolor = FOREGROUND_BLUE;
break;
case 4:
wcolor = FOREGROUND_RED | FOREGROUND_GREEN;
break;
case 5:
wcolor = FOREGROUND_RED | FOREGROUND_BLUE;
break;
case 6:
wcolor = FOREGROUND_GREEN | FOREGROUND_BLUE;
break;
case 7:
wcolor = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
break;
case 8:
wcolor = FOREGROUND_RED | FOREGROUND_INTENSITY;
break;
case 9:
wcolor = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
break;
case 10:
wcolor = FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;
case 11:
wcolor = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
break;
case 12:
wcolor = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;
case 13:
wcolor = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;
case 14:
wcolor = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;
default:
wcolor = color;
}
m_forecolor = wcolor;
if (!SetConsoleTextAttribute(m_hOut, m_forecolor | m_backcolor))
{
cout << "Error! Could not set Console Text Attribute\n";
return false;
}
return true;
}