Funktion SetColor(WORD color)

Sircoly

Mitglied
Halli Hallo,

ich habe vor, mir eine eigene Funktion zum Ändern der Schriftfarbe in einer Konsolenanwendung zu schreiben.
Und dabei bräuchte ich eure Hilfe...
Das ist mein angefangener Code:
C++:
void SetColor(WORD color)
{
    SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), color);
}
Die Farben (ROT, NORMAL, etc..) habe ich schon deklariert/definiert.
Normalerweise müsste ich nun, falls ich eine Schriftfarbe ändern möchte, folgendes schreiben:
C++:
void main()
{
	char name[101];
	cout << "Gib deinen Namen ein: ";
	cin  >> name;

	system("CLS");
	SetColor(ROT);
	cout << "Dein eingegebener Name war: " << name << endl;
	SetColor(NORMAL);
	cout << "Druecken Sie irgendeine Taste zum Beenden ...";
	getch();
}
Nur möchte ich, dass ich das dann später so hinschreiben kann.
Ich deklariere mal den Prototyp der Funktion SetColor() darüber, wie ich ihn mir vorstelle.
Es wird sich nun nachher der Aufruf der Funktion ändern.
Und wie kann ich das dann Realisieren:
C++:
void SetColor(WORD anfang, WORD ende);		// Prototyp

void main()
{
	char name[101];
	cout << "Gib deinen Namen ein: ";
	cin  >> name;

	system("CLS");
	SetColor(ROT, NORMAL)				// Aufruf der Funktion SetColor
	{
		cout << "Dein eingegebener Name war: " << name << endl;
	}
	cout << "Druecken Sie irgendeine Taste zum Beenden ...";
	getch();
}
Hierbei sollen ALLE ausgaben, die ich innerhalb der Geschweiften Klammern des SetColor-Befehles mache, in der Farbe, wie in der Variable 'anfang' definiert ausgegeben werden.
Danach soll wieder auf die Farbe gewechselt werden, wie in der Variable 'ende' steht.

Kann man Sowas realisieren? - Könnt ihr mir dabei helfen? - Ich hüpf gleich im Kreis...
Ich hab keine ahnung, wie ich das machen soll. Mir viel grade mal ein, wie ich die Farbe ändern könnte...
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Das könnte man mit einem Objekt machen.
C++:
class ChangeColor {
  int ce;
public:
  ChangeColor(int color_begin, int color_end) : ce(color_end) {
    SetColor (color_begin);
  }
  ~ChangeColor() {
    SetColor(ce);
  }
};
...
int main() { /* ja, main muß den Rückgabetyp int haben! */
  { 
    ChangeColor c(ROT, BLAU);
    { 
      ChangeColor c(GRUEN, SCHWARZ);
      ...
    }
  }
}
Gruß
 
Halli Hallo,

danke erstmal für die Antwort1
Weil ich noch keine Klassen kenne. Ich bin grade inner Ausbildung.

Gibts eine Möglichkeit, wie man das einfach machen könnte wie:
- farbe in farbe am anfang ändern
- Den Inhalt der Klammern einfügen
- die farbe in farbe am ende ändern

Oder gibt es eine Möglichkeit, dass man den zweiten Aufruf der Funktion unterdrucken kann?
Also das das so aussieht:
C++:
int main() { /* WIESO INTEGER? */

  { 

    ChangeColor c(ROT, BLAU);

    { 

      ...

    }

  }

}

PS.: Könntest du mir vielleicht(falls du Sie hast) auch die Datei 'bios.h' hier hochladen?
Ich binde die Hier nicht...
 
Zuletzt bearbeitet von einem Moderator:
"früher" hat man main mit int aufgerufen, so wie du es nun wahrscheinlich lernst, wird es mit void aufgerufen, hat den "Vorteil" das man am ende kein return setzen muss.
 
Hi.
Gamewalker hat gesagt.:
"früher" hat man main mit int aufgerufen, so wie du es nun wahrscheinlich lernst, wird es mit void aufgerufen, hat den "Vorteil" das man am ende kein return setzen muss.
Wenn man sich nicht auskennt sollte man nicht so einen Quatsch posten. Der C++ Standard (ANSI/ISO 14882:1998) schreibt vor, dass die Haupteinsprungsroutine den Rückgabetyp int haben muß. Wenn ein Compiler einen anderen Typ akzeptiert dann nur aus Kompatibilitätsgründen mit veraltetem Code - dieser Compiler ist dann allerdings streng genommen kein C++ Compiler da ein solcher diesen Code zurückweisen muß.

Außerdem muß man in C++ in der main Funktion keinen Wert explizit zurückgeben, da ein C++ Compiler automatisch 0 als Wert zurückgibt.

Gruß

@Sircoly: Deine Frage war: Warum int? Der Rückgabewert der main Funktion wird dazu verwendet anzuzeigen ob das Programm erfolgreich abgearbeitet wurde. Das kann man z.B. dann in einer Batch Datei überprüfen um je nachdem eine andere Aktion durchzuführen. Der Wert 0 zeigt dabei an das das Programm ohne Fehler abgearbeitet wurde. Gibt das Programm einen anderen Wert zurück war die Ausführung nicht erfolgreich. Bsp:
C++:
int main() {
  if (getenv("bla") == NULL) return 123; // Fehlercode 123 zurückgeben.
  else return 0; // macht der Compiler auch automtisch.
}
In der Kommandozeile kann man sich mit DOS den Wert dann z.B. so ausgeben lassen:
Code:
echo %errorlevel%
 
Zuletzt bearbeitet:
Zurück