Zmiana koloru tła "tylko tła" w konsoli

0

Witam ponownie,
Wbrew pozorom proste zagadnienie zabiło mi ćwieka.
Otóż umiem zmienić kolor napisów oraz tła wraz z napisami. Interesuje mnie natomiast zmiana tylko tła. Chcę osiągnąć efekt jak w Doomie podczas otrzymania ciosu.
Ekran na pół sec zapali się na czerwono i zmowu powraca do czarnego.
Tekst mam kolorowy dlatego nie chcę zmieniać jego koloru. Tylko background...
System ("color X X") zmienia na raz obie wartosci. Dziwne, że nie można podać tylko koloru tła itp.

0

Użyj SetConsoleTextAttribute z windows.h przed wyświetleniem tekstu:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes

0

Cały czas uzywalem tej komendy do zmiany koloru tekstu
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),06);

Jak to zapisać by zmienić tylko tło?

BACKGROUND_RED
Background color contains red.

0

https://www.google.nl/search?q=change+console+color+c%2B%2B+windows&oq=change+console+color+c%2B%2B+windows&aqs=chrome..69i57.6135j0j7&sourceid=chrome&ie=UTF-8

http://www.cplusplus.com/forum/beginner/5830/

ahem

Please don't tell people to use system(). If you are going to do something OS-dependant, do it the right way.

#include <iostream>
#include <windows.h>

int main()
{
	const WORD colors[] =
		{
		0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
		0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
		};

	HANDLE hstdin  = GetStdHandle( STD_INPUT_HANDLE  );
	HANDLE hstdout = GetStdHandle( STD_OUTPUT_HANDLE );
	WORD   index   = 0;

	// Remember how things were when we started
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	GetConsoleScreenBufferInfo( hstdout, &csbi );

	// Tell the user how to stop
	SetConsoleTextAttribute( hstdout, 0xEC );
	std::cout << "Press any key to quit.\n";

	// Draw pretty colors until the user presses any key
	while (WaitForSingleObject( hstdin, 100 ) == WAIT_TIMEOUT)
	{
		SetConsoleTextAttribute( hstdout, colors[ index ] );
		std::cout << "\t\t\t\t Hello World \t\t\t\t" << std::endl;
		if (++index > sizeof(colors)/sizeof(colors[0]))
			index = 0;
	}
	FlushConsoleInputBuffer( hstdin );

	// Keep users happy
	SetConsoleTextAttribute( hstdout, csbi.wAttributes );
	return 0;
}

Edit & Run

Hope this helps.

[edit] Oh, yeah, colors are bit-encoded thus:

bit 0 - foreground blue
bit 1 - foreground green
bit 2 - foreground red
bit 3 - foreground intensity

bit 4 - background blue
bit 5 - background green
bit 6 - background red
bit 7 - background intensity

:-)

0

Trafiłem na tę stronę wcześniej ino myślałem, że jedna jakąś komenda starczy ;) a z tego niewiele kumam gdzie tu wstawić " bit 6 " dla przykładu...

0

@Amiga4ever
dlatego ciagle powatarzam, ze C++ nie jest dobrym jezykiem na poczatek, bo jezeli chcesz zrobic cos wlasnego to wlasnie z czyms takim musisz sobie radzic. Jezeli Cie to przerasta to zaiunteresuj sie C# albo java, sa podobne (chociaz C# wydaje mi sie bardziej podobny) i duzo latwiej robic takie rzeczy ktore Ty chcesz

Jezeli chcesz cos fajnego i widziec wyniki postepu szybko to zobacz sobie pythona (chociaz tez przy nim jest troche konfiguracji, to jest cos pomiedzy c# a c++)

tam na forum dalej osoba tlumaczy co dokladnie zrobila

0

Dobra jakoś to ogarnę ;) c++ uczę się od 2 tyg i już zrobilem RPG tekstowy w świecie Wiedźmina na 5000 linijek i powiem, że jest mega rozbudowany z craftingiem broni, eliksirow, questow, zdobywaniem poziomów, losowymi zdarzeniami, tawerna, sklepami itd itd itd. A jak widać czasami pierdoła potrafi zagiac ;)
Pozdrawiam

0

Można jedną linijką. Weź ten kod:

  SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |
                                                            FOREGROUND_GREEN | 
                                                            FOREGROUND_INTENSITY | 
                                                            BACKGROUND_BLUE
                          );
  printf ("Hello world\n");
0

Dzięki sprawdzę w chacie. Do głowy wpadło mi jeszcze jedno obejście jak zmiana tla i koloru jednocześnie i przesunięcie kursora wraz z nowym wyświetlaniem kolorowego tekstu itd.
Dzięki za pomoc wszystkim.

Walczę jeszcze z jednym problem jakim jest odtwarzanie dwóch dźwięków jednocześnie PlaySnd niestety z wiadomych przyczyn odtwarzacz jeden. Ale to chyba problem na inny temat..

0
Tulio napisał(a):

Można jedną linijką. Weź ten kod:

  SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |
                                                            FOREGROUND_GREEN | 
                                                            FOREGROUND_INTENSITY | 
                                                            BACKGROUND_BLUE
                          );
  printf ("Hello world\n");

Działa ale na tekscie: ) mi chodziło o tło

0

To ustaw kolor tła i wypełnij całe okno spacjami.

Konsola pod Windows nie ma tła jako takiego. Tło mają znaki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1