---
title: "En gång för alla..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/55677-en-gång-för-alla"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "zmodem"
published: "2002-10-10T19:15:45.000Z"
updated: "2002-10-28T21:09:29.000Z"
replies: 3
views: 288
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/55677-en-gång-för-alla"
---

# En gång för alla...

## #1 — zmodem, 2002-10-10T19:15Z

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å  :)

Permalänk: https://www.webforum.nu/p/55677

## #2 — Rulle, 2002-10-10T20:33Z

Programmeringskurs????

Vart då ?

Permalänk: https://www.webforum.nu/p/818308

## #3 — PeW, 2002-10-10T20:54Z

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

Permalänk: https://www.webforum.nu/p/818317

## #4 — Coord, 2002-10-28T21:09Z

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;
}
```

Permalänk: https://www.webforum.nu/p/836816

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/55677-en-gång-för-alla
