Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
#1

Получить цвет фона экрана консольного окна (можно и методами WinAPI) - C++

14.08.2012, 06:30. Просмотров 1354. Ответов 9
Метки нет (Все метки)

Привет.
Как получить цвет (фона экрана) консольного окна?
Можно и методами WinAPI. С меня печенька
0
Миниатюры
Получить цвет фона экрана консольного окна (можно и методами WinAPI)  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2012, 06:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получить цвет фона экрана консольного окна (можно и методами WinAPI) (C++):

Какой функцией изменить цвет фона окна windows bgi? - C++
это окошко черное и белая надпись Hello.Мне нужно сделать его синим.Есть ли такая функция.Если можно ее синтаксис.

Получить размер консольного окна - C++
Есть код:#include "stdafx.h" #include <iostream> #include "Lib.h" #include <conio.h> #include <cstdlib> #include <Windows.h> ...

Движение курсора мыши должно плавно менять цвет фона окна. - C++
точнее 2 1) Движение курсора мыши должно плавно менять цвет фона окна. Левый верхний угол - красный цвет фона. Правый верхний -...

Приведите пример, как можно связать знания консольного C++ (где алгоритмы, структуры, массивы) с WinAPI? - C++
WinAPI это чтобы взаимодействовать с виндой а вся сложность c++ обучают в консоли Вопрос:как можно связать знания по шаблонным...

Получить снимок клиентской области окна и цвет пикселя - C++
Всем привет, не шибко знаю С++, но есть две задачи 1. Нужно получить снимок клиентской области окна, притом возможно не активного или...

Как узнать марку процессора методами WinApi? - C++
Доброго времени суток! Как можно узнать модель и фирму процессора через WinApi? Заранее спасибо!

9
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
14.08.2012, 07:23 #2
vendeme,
C++
1
2
3
4
DWORD WINAPI GetClassLong(
  __in  HWND hWnd,
  __in  int nIndex
);
где nIndex = GCL_HBRBACKGROUND. А из него уже цвет получаешь

Добавлено через 3 минуты
Ещё можно по тупому :
C++
1
2
3
4
5
COLORREF GetPixel(
  __in  HDC hdc,
  __in  int nXPos,
  __in  int nYPos
);
1
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
14.08.2012, 07:37  [ТС] #3
Оба функций пригодятся, спасибо
0
bigredcat
366 / 313 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
14.08.2012, 08:12 #4
Вообще при работе с консолью, для решения этой задачи нужно использовать GetStdHandle, GetConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO
1
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
14.08.2012, 08:12  [ТС] #5
Не пойму, почему не получается, когда я его меняю через свойства
C++
1
2
3
4
5
6
7
8
int main()
{
    while(1)
    {
        std::cout << GetClassLong(GetConsoleWindow(), GCL_HBRBACKGROUND) << std::endl;
        Sleep(1000);
    }
}
0
rescr1pt
33 / 34 / 1
Регистрация: 03.10.2011
Сообщений: 61
14.08.2012, 08:25 #6
C++
1
2
3
4
5
6
WORD GetConsoleHandleColor()
{
    CONSOLE_SCREEN_BUFFER_INFO csbf;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbf);
    return csbf.wAttributes;
}
1
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
14.08.2012, 08:26  [ТС] #7
Цитата Сообщение от rescr1pt Посмотреть сообщение
C++
1
2
3
4
5
6
WORD GetConsoleHandleColor()
{
    CONSOLE_SCREEN_BUFFER_INFO csbf;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbf);
    return csbf.wAttributes;
}
Благодарю, заработало
0
bigredcat
366 / 313 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
14.08.2012, 08:33 #8
Вот пример старый нашел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <tchar.h>
#include <windows.h>
#include <iostream>
 
 
//
// Тип данных для хранения цвета.
//
typedef unsigned short COLOR;
 
 
//
// Исходные составляющие цвета, используемые для экрана консоли.
//
#define COLOR_BLACK 0x0000
#define COLOR_BLUE  0x0001
#define COLOR_GREEN 0x0002
#define COLOR_RED   0x0004
#define COLOR_HIGH  0x0008
 
 
//
// Маски текстовых атрибутов.
//
#define BACKCOLOR_MASK 0x00F0
#define FORECOLOR_MASK 0x000F
#define OTHERATTR_MASK 0xFF00
 
 
//
// Перечесление цветов, используемых для экрана консоли.
// (Вместо class можно оформить в виде enum).
//
class Color
{
public:
    static COLOR const Black        = COLOR_BLACK;
    static COLOR const Blue         = COLOR_BLUE;
    static COLOR const Green        = COLOR_GREEN;
    static COLOR const Cyan         = COLOR_BLUE  | COLOR_GREEN;
    static COLOR const Red          = COLOR_RED;
    static COLOR const Magenta      = COLOR_BLUE  | COLOR_RED;
    static COLOR const Brawn        = COLOR_GREEN | COLOR_RED;
    static COLOR const Gray         = COLOR_BLUE  | COLOR_GREEN | COLOR_RED;
    static COLOR const DarkGray     = COLOR_HIGH;
    static COLOR const LightBlue    = COLOR_BLUE  | COLOR_HIGH;
    static COLOR const LightGreen   = COLOR_GREEN | COLOR_HIGH;
    static COLOR const LightCyan    = COLOR_BLUE  | COLOR_GREEN | COLOR_HIGH;
    static COLOR const LightRed     = COLOR_RED   | COLOR_HIGH;
    static COLOR const LightMagenta = COLOR_BLUE  | COLOR_RED   | COLOR_HIGH;
    static COLOR const Yellow       = COLOR_GREEN | COLOR_RED   | COLOR_HIGH;
    static COLOR const White        = COLOR_BLUE  | COLOR_GREEN | COLOR_RED  | COLOR_HIGH;
};
 
 
//
// Получение цвета фона из атрибутов текста.
//
inline WORD GetConsoleBackColor(WORD attr)
{
    return ((attr & BACKCOLOR_MASK) >> 4);
}
 
//
// Получение цвета символа из атрибутов текста.
//
inline WORD GetConsoleForeColor(WORD attr)
{
    return (attr & FORECOLOR_MASK);
}
 
//
// Получение прочих атрибутов текста.
//
inline WORD GetConsoleOtherAttr(WORD attr)
{
    return ((attr & OTHERATTR_MASK) >> 8);
}
 
//
// Объединение цвета символа, цвета фона и прочих атрибутов текста.
//
inline WORD MergeConsoleAttr(WORD fore, WORD back, WORD attr)
{
    return (fore | (back << 4) | (attr << 8));
}
 
 
//
// Вывод названия цвета.
//
void OutputColorName(COLOR color)
{
    using std::cout;
 
    switch (color)
    {
    case Color::Black:        cout << "Black";         break;
    case Color::Blue:         cout << "Blue";          break;
    case Color::Green:        cout << "Green";         break;
    case Color::Cyan:         cout << "Cyan";          break;
    case Color::Red:          cout << "Red";           break;
    case Color::Magenta:      cout << "Magenta";       break;
    case Color::Brawn:        cout << "Brawn";         break;
    case Color::Gray:         cout << "Gray";          break;
    case Color::DarkGray:     cout << "Dark Gray";     break;
    case Color::LightBlue:    cout << "Light Blue";    break;
    case Color::LightGreen:   cout << "Light Green";   break;
    case Color::LightCyan:    cout << "Light Cyan";    break;
    case Color::LightRed:     cout << "Light Red";     break;
    case Color::LightMagenta: cout << "Light Magenta"; break;
    case Color::Yellow:       cout << "Yellow";        break;
    case Color::White:        cout << "White";         break;
    }
}
 
 
int _tmain()
{
    using namespace std;
 
    // Описатель стандартного устройства вывода.
    HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (stdOut == INVALID_HANDLE_VALUE)
        return GetLastError();
 
    // Сведения об экранном буфере стандартного устройства вывода.
    CONSOLE_SCREEN_BUFFER_INFO scrBufInfo = {{0}, {0}, 0, {0}, {0}};
    if (GetConsoleScreenBufferInfo(stdOut, &scrBufInfo) == FALSE)
        return GetLastError();
 
    // Текущий цвет фона.
    COLOR backColor = GetConsoleBackColor(scrBufInfo.wAttributes);
    cout << "Back color: "; OutputColorName(backColor); cout << endl;
 
    // Текущий цвет текста.
    COLOR foreColor = GetConsoleForeColor(scrBufInfo.wAttributes);
    cout << "Fore color: "; OutputColorName(foreColor); cout << endl;
 
    system("PAUSE");
 
    return 0;
}
1
yleart
14.08.2012, 09:29
  #9

Не по теме:

не то написал..

0
vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
15.08.2012, 03:01  [ТС] #10
а можешь показать Set функций?
C++
1
2
3
void SetBackColor(WORD color);
void SetForeColor(WORD color);
void SetOtherColor(WORD color);
0
15.08.2012, 03:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 03:01
Привет! Вот еще темы с ответами:

Цвет фона строки - C++
Можно как-то сделать, чтоб при выводе строки в Borland C++ 3.1 у строки был фон например черного цвета, а экран, например, синего? ...

Цвет фона консоли с++ - C++
Всем привет! Подскажите пожалуйста как поменять цвет фона в консоли, чтобы вместо чорного экрана сделать что-то повеселее?

Развертывание консольного окна - C++
Как при включении программы развернуть консольное окно??? Если я это делаю вручную оно прилепает к правому верхнему углу. Вот мне надо...

Цвет шрифта и фона в консоли... - C++
Знаю, это тема уже обсуждалась, но я новичок в программировании и ничего в предложенном ранее коде не поняла, если кто-нибудь знает как это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru