webForumDet fria alternativet

En gång för alla...

C/C++

3 svar · 284 visningar · startad av zmodem

Medlem sedan apr. 200277 inlägg
Frågan#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å :)

Medlem sedan juni 2000166 inlägg
#2

Programmeringskurs????

Vart då ?

Medlem sedan juni 200010 432 inlägg
#3

Ä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.

Medlem sedan okt. 200211 inlägg
#4

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;
}
255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)