Функция SetSysColors (winuser.h)
Задает цвета для указанных элементов отображения. Элементы отображения — это различные части окна и дисплей, которые отображаются на экране системного дисплея.
Синтаксис
BOOL SetSysColors(
[in] int cElements,
[in] const INT *lpaElements,
[in] const COLORREF *lpaRgbValues
);
Параметры
[in] cElements
Тип: int
Количество отображаемых элементов в массиве lpaElements .
[in] lpaElements
Тип: const INT*
Массив целых чисел, определяющих элементы отображения, которые необходимо изменить. Список отображаемых элементов см. в разделе GetSysColor.
[in] lpaRgbValues
Тип: const COLORREF*
Массив значений COLORREF , содержащий новые значения красного, зеленого, синего цвета (RGB) для элементов отображения в массиве, на который указывает параметр lpaElements .
Чтобы создать COLORREF, используйте макрос RGB .
Возвращаемое значение
Тип: BOOL
Если функция выполнена успешно, возвращаемое значение будет ненулевым.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Функция SetSysColors отправляет WM_SYSCOLORCHANGE сообщение всем окнам, чтобы сообщить об изменении цвета. Он также направляет систему для перекраски затронутых частей всех видимых в настоящее время окон.
Лучше всего учитывать параметры цвета, заданные пользователем. Если вы пишете приложение, позволяющее пользователю изменять цвета, то целесообразно использовать эту функцию. Однако эта функция влияет только на текущий сеанс. Новые цвета не сохраняются при завершении работы системы.
Примеры
В следующем примере показано использование функций GetSysColor и SetSysColors . Во-первых, в примере используется GetSysColor для получения цветов фона окна и активных подпись и отображения значений красного, зеленого, синего (RGB) в шестнадцатеричной нотации. Далее в примере используется метод SetSysColors , чтобы изменить цвет фона окна на светло-серый, а активные строки заголовков — на темно-фиолетовый. После 10-секундной задержки пример восстанавливает предыдущие цвета для этих элементов с помощью SetSysColors.
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")
void main()
{
int aElements[2] = {COLOR_WINDOW, COLOR_ACTIVECAPTION};
DWORD aOldColors[2];
DWORD aNewColors[2];
// Get the current color of the window background.
aOldColors[0] = GetSysColor(aElements[0]);
printf("Current window color: {0x%x, 0x%x, 0x%x}\n",
GetRValue(aOldColors[0]),
GetGValue(aOldColors[0]),
GetBValue(aOldColors[0]));
// Get the current color of the active caption.
aOldColors[1] = GetSysColor(aElements[1]);
printf("Current active caption color: {0x%x, 0x%x, 0x%x}\n",
GetRValue(aOldColors[1]),
GetGValue(aOldColors[1]),
GetBValue(aOldColors[1]));
// Define new colors for the elements
aNewColors[0] = RGB(0x80, 0x80, 0x80); // light gray
aNewColors[1] = RGB(0x80, 0x00, 0x80); // dark purple
printf("\nNew window color: {0x%x, 0x%x, 0x%x}\n",
GetRValue(aNewColors[0]),
GetGValue(aNewColors[0]),
GetBValue(aNewColors[0]));
printf("New active caption color: {0x%x, 0x%x, 0x%x}\n",
GetRValue(aNewColors[1]),
GetGValue(aNewColors[1]),
GetBValue(aNewColors[1]));
// Set the elements defined in aElements to the colors defined
// in aNewColors
SetSysColors(2, aElements, aNewColors);
printf("\nWindow background and active border have been changed.\n");
printf("Reverting to previous colors in 10 seconds...\n");
Sleep(10000);
// Restore the elements to their original colors
SetSysColors(2, aElements, aOldColors);
}
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |