На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Что-то туплю по поводу ostream_withassign и консоли
    Хочу замутить манипулятор на тему цветного текста для консольной проги под Вин32 (пока без танцев на тему "познакомить ostream и новый манипулятор"):

    ExpandedWrap disabled
        
        cout.flush();
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);


    Вопрос: как определить, что cout не переназначен куда-нить в файл, а реально прицеплен к консоли?
      :wall: Курение сырцов библиотек и МСДН к просветлению не привело. Хелп, плиз!!!

      P.S. Манипуляторы написаны. Только хочется всё-таки добавить проверку на переназначенный вывод, чтобы даром не теребить SetConsoleTextAttribute().
        barazuk, а это не то чт тебе надо?
          Цитата Алкаш @
          barazuk, а это не то чт тебе надо?


          Нет, не то. Вопрос не в установке цвета и не в "написать манипулятор" - это нам, гусарам, как два пальца об асфальт (дарю всем :)):

          ExpandedWrap disabled
            #include <iostream.h>
            #include <windows.h>
             
            inline ostream& __cdecl green(ostream& _O){
              _O.flush();
              SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
              return (_O);
            }
             
            inline ostream& __cdecl red(ostream& _O){
              _O.flush();
              SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
              return (_O);
            }
             
            inline ostream& __cdecl white(ostream& _O){
              _O.flush();
              SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE );
              return (_O);
            }
             
            int main(int argc, char ** argv)
            {
               cout << green << "Green text " << red << "Red text " << endl;
               cout << white << "White text " << endl;
               return 0;
            }


          Вопрос в том, что делать, есло cout у нас перенаправлен в файл - чтобы даром не теребить SetConsoleTextAttribute().
            Так что, товарищи, считать, что невозможное - невозможно? :(
              Ну, почему же....
              ExpandedWrap disabled
                bool IsRedirectedStdOutput()
                {
                    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
                    BY_HANDLE_FILE_INFORMATION fi;
                    return FALSE != GetFileInformationByHandle(hStdOut, &fi);
                }
                Гм... А дополнительную дуракозащиту всё-таки по отношению к самому ostream никак нельзя применить? Потому что манипулятор же не знает, в принципе, куда его пхнули - в stdout, в stderr, или в самой проге сделано что-нить типа

                ExpandedWrap disabled
                  ...
                  cout = my_pretty_stdio_ostream;
                  ...
                  Цитата barazuk @
                  дополнительную дуракозащиту всё-таки по отношению к самому ostream никак нельзя применить?

                  Нельзя. Хендл хранится в basic_filebuf в закрытом поле и доступа к нему не получить.
                    Жаль :(
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0269 ]   [ 16 queries used ]   [ Generated: 3.05.24, 07:16 GMT ]