1. C++ / Говнокод #17657

    +51

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    //Sets the color(background and foreground)
    void Console::SetColor(){
        #ifdef _WIN32
            SetConsoleTextAttribute(hConsole, FGColor | BGColor);
        #else
            string clr = "\033[";
            clr += BGColor;
            clr += ";";
            clr += FGColor;
            clr += "m";
            cout << clr;
        #endif
    }

    Изменение цвета текста и фона консоли

    Запостил: govnokod3r, 17 Февраля 2015

    Комментарии (10) RSS

    • Меня что-то линуксовая часть смущает. Там же '1' надо передавать, а не 1. Ну и цвета, насколько я помню, как попало пронумерованы.

      P.S. Или цветовые константы тоже в ифдеф завёрнуты и переключаются в зависимости от платформы?
      Ответить
      • >>Или цветовые константы тоже в ифдеф завёрнуты и переключаются в зависимости от платформы?
        Да
        //Set the background color
        void Console::SetBGColor(const short color){
            #ifdef _WIN32
            short val;
            switch(color){
                default:
                case ColorBlack:
                    val = 0;
                break;
                case ColorBlue:
                    val = BACKGROUND_BLUE;
                break;
                case ColorCyan:
                    val =  BACKGROUND_BLUE|BACKGROUND_GREEN;
                break;
                case ColorGreen:
                    val = BACKGROUND_GREEN;
                break;
                case ColorMagenta:
                    val = BACKGROUND_BLUE|BACKGROUND_RED;
                break;
                case ColorRed:
                    val = BACKGROUND_RED;
                break;
                case ColorWhite:
                    val = BACKGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED;
                break;
                case ColorYellow:
                    val = BACKGROUND_GREEN|BACKGROUND_RED;
                break;
            }
            BGColor = val;
            #else
            string val;
            switch(color){
                default:
                case ColorBlack:
                    val = "40";
                break;
                case ColorBlue:
                    val = "44";
                break;
                case ColorCyan:
                    val = "46";
                break;
                case ColorGreen:
                    val = "42";
                break;
                case ColorMagenta:
                    val = "45";
                break;
                case ColorRed:
                    val = "41";
                break;
                case ColorWhite:
                    val = "47";
                break;
                case ColorYellow:
                    val = "43";
                break;
            }
            BGColor = val;
            #endif
            SetColor();
        }

        Для текста тоже самое
        Ответить
    • Я бы разнесла платформоспецифичный код по разным .cpp-файлам, подключаемым на этапе конфигурации сборки.
      Ответить
      • Хорошее решение, сам так делал. Подглядел подход в сборке chromium.
        Ответить
        • > по разным .cpp-файлам, подключаемым на этапе конфигурации сборки.
          Ничего не понимаю... И это программисты. Говно какое-то, скриптеры, блядь.
          K&R им дали препроцессор - юзай! Юзай #ifdef, блять! Не хочу, хочу настраивать условия в мейкфайлах.
          Что такое? Это С++? Это С++? Суки, мудачьё - жабоеды.
          Ответить
          • > Говно какое-то, скриптеры, блядь.
            Добавь еще: "Как жаваёбы какие-то, ей-богу".
            Ответить
          • K&R много всякой хуйни дали, которой бы лучше не было никогда.
            Ответить
            • Все познается в сравнении. С Страуструпом
              Ответить
        • В Qt такое решение используется вместе с pimpl. Общий код находится в нормальном классе, а платформоспецифичный -- в приватном.
          Ответить

    Добавить комментарий