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消息发送到所有窗口,以通知它们颜色的变化。 它还指示系统重新绘制所有当前可见窗口的受影响部分。

最好遵循用户指定的颜色设置。 如果要编写应用程序以允许用户更改颜色,则适合使用此函数。 但是,此函数仅影响当前会话。 系统终止时,不会保存新颜色。

示例

以下示例演示如何使用 GetSysColorSetSysColors 函数。 首先,该示例使用 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
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll

另请参阅

COLORREF

GetSysColor

RGB