Как установить постоянный цвет фона? - PullRequest
0 голосов
/ 17 апреля 2020

Итак, мне нужна помощь:

//
//     PracticeModule - Practice file
//
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <cstdlib>
#include <windows.h>
using namespace std;
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); // For use of SetConsoleTextAttribute()
void WaitKey();
int main()
{
    SetConsoleTextAttribute(console,137);
    cout << "GLaDOS : Hello, and welcome to the the APERTURE SCIENCE HANDHELD PORTAL GUN TESTING INITIATIVE offices." << endl << "\n";
    SetConsoleTextAttribute(console,137);
    cout << "GLaDOS : To begin the testing cycle, please enter your standard issue APERTURE SCIENCE ALL PURPOSE EMPLOYEE  \nSECURITY KEY." << endl << "\n";
    cout << "Narrator : Uh oh! How could this have happened?! You left your security key at home by accident! You do remember reading it over quite a lot. It isnt anything to blame you of, of course. Anyone in your position would be equally nervous, if not more! It's Aperture Science! The main leading science company! To work for them is an honour! Although, your career could end today because of this. There seems to be no-one around, maybe you could look around and use one of the other's? They probably wouldn't mind. After all, you ARE doing it for the sake of your career. Besides, it would probably benefit them more than you to put in a few extra hours at work in their name." << endl<< "\n" << "So, do you look around for a security key?[1] or do you try to remember the security keycode?[2]" << endl << "\n";
    WaitKey();
}
void WaitKey()
{
    cout << "\t\t\t\t\t\tPress any key to continue...";
    while (_kbhit()) _getch(); // Empty the input buffer
    _getch(); // Wait for a key
    while (_kbhit()) _getch(); // Empty the input buffer (some keys sends two messages)
}

Итак, этот код при запуске генерирует весь текст, который я хочу, чтобы он генерировал, но затем возникает проблема с цветом фона. фон не будет загружаться, за исключением текста, который пишется вместе с ним, что заставляет меня использовать это:

system("color ___")

Этот пробел оставлен для значения цвета текста. но по сути то, что делает этот кусок кода (который ненавистен в моих глазах), не только устанавливает значение для цвета фона и цвета переднего плана, но и изменяет те же значения для текста ЗА ЭТОМ !!! И это то, что заставляет меня хотеть загнать этот кусок кода в яму, потому что я просто пытаюсь получить цвет фона везде, а не менять цвет переднего плана тоже!

Пожалуйста, помогите. (

1 Ответ

0 голосов
/ 20 апреля 2020

@ HansPassant указал решение. Вы можете проверить, что вам нужен следующий код и результат.

Код:

void ClearScreen()
{
    HANDLE                     hStdOut;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    DWORD                      count;
    DWORD                      cellCount;
    COORD                      homeCoords = { 0, 0 };

    hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hStdOut == INVALID_HANDLE_VALUE) return;

    /* Get the number of cells in the current buffer */
    if (!GetConsoleScreenBufferInfo(hStdOut, &csbi)) return;
    cellCount = csbi.dwSize.X *csbi.dwSize.Y;

    /* Fill the entire buffer with spaces */
    if (!FillConsoleOutputCharacter(
        hStdOut,
        (TCHAR) ' ',
        cellCount,
        homeCoords,
        &count
    )) return;

    /* Fill the entire buffer with the current colors and attributes */
    if (!FillConsoleOutputAttribute(
        hStdOut,
        csbi.wAttributes,
        cellCount,
        homeCoords,
        &count
    )) return;

    /* Move the cursor home */
    SetConsoleCursorPosition(hStdOut, homeCoords);
}

int main()
{
    SetConsoleTextAttribute(console, 137);
    ClearScreen();
    cout << "GLaDOS : Hello, and welcome to the the APERTURE SCIENCE HANDHELD PORTAL GUN TESTING INITIATIVE offices." << endl << "\n";
    cout << "GLaDOS : To begin the testing cycle, please enter your standard issue APERTURE SCIENCE ALL PURPOSE EMPLOYEE  \nSECURITY KEY." << endl << "\n";
    cout << "Narrator : Uh oh! How could this have happened?! You left your security key at home by accident! You do remember reading it over quite a lot. It isnt anything to blame you of, of course. Anyone in your position would be equally nervous, if not more! It's Aperture Science! The main leading science company! To work for them is an honour! Although, your career could end today because of this. There seems to be no-one around, maybe you could look around and use one of the other's? They probably wouldn't mind. After all, you ARE doing it for the sake of your career. Besides, it would probably benefit them more than you to put in a few extra hours at work in their name." << endl << "\n" << "So, do you look around for a security key?[1] or do you try to remember the security keycode?[2]" << endl << "\n";
}

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...