Zmiana koloru "pędzla" w aplikacji konsolowej


(Pawsin) #1

Witam. Nie za bardzo wiem jak napisać jedną z prostych funkcji aplikacji konsolowej w C. Za pomocą strzałek przesuwam kursorem po ekranie i wstawiam "prostokąciki" (znak 'X' z tym samym kolorem tła i czcionki).

case VK_SPACE:           


                        if(buffer[horiz-1][verti-16]!='X'){

                                buffer[horiz-1][verti-16]='X';}

                        else if(buffer[horiz-1][verti-16]='X'){

                                buffer[horiz-1][verti-16]=' ';}



                                int j;

                                        for(i=0;i
                                        {

                                            for(j=0;j
                                            {

                                                        if(buffer[i][j]=='X')

                                                        {

                                                        gotoXY(i+1,j+16);

                                                        write('X');

                                                        }

                                                        else if(buffer[i][j]==' ')

                                                        {

                                                        gotoXY(i+1,j+16);

                                                         write(' ');

                                                        }

                                                }

                                        };

                                        break;


        case 'R':                



                                        for(i=0;i
                                        {

                                          for(j=0;j
                                          {

                                                buffer[i][j]=0;

                                           }

                                        };


                                        for(i=0;i
                                        {

                                           for(j=0;j
                                           {

                                               if(buffer[i][j]==0){

                                                gotoXY(i+1,j+16);

                                                write(' ');}

                                            }

                                        };

                                        break;


        case '1': setTextAttributes( FOREGROUND_BLUE | BACKGROUND_BLUE);break;

Chodzi mi o to, iż na początku wstawiam zwyczajne, białe znaki (prostokąciki). Gdy wciskam jeden z klawiszy od 1 do 8 kolor wstawianych znaków ma się zmienić (np. na niebieski). Problem w tym, że gdy wciskam 1, zmieniam kolor i chcę wstawić znak, zmienia mi się kolor wszystkich znaków znajdujących się na ekranie. Chciałbym aby zmieniał się kolor jedynie tych znaków, które wstawię po wciśnięciu '1'.

W podanym kodzie spacja wstawia znak, R czyści ekran. Trochę chaotycznie w wyjaśniłem ale mam nadzieję, że znajdzie się ktoś kto potrafi pomóc ;p

Pozdrawiam.


(Drobok) #2
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), kolor);

Gdzie kolor jest typu int (to jest z windows.h) :slight_smile:


(Pawsin) #3

Dzięki, lecz za bardzo nie wiem jak jej użyć w moim "programie" :frowning: Po wciśnięciu spacji wypisuje całą zawartość tablicy na ekran, więc funkcja SetConsoleTextAttribute nada kolor wszystkim elementom, łącznie z tymi, które już są w buforze (?).


(Drobok) #4

Jeśli za każdym razem zapisujesz do tablicy, po czym wszystko wypisujesz, to jedyne co możesz zrobić to zapisywać w niej również kolor :slight_smile: