WM_SYSCOLORCHANGE 消息的含义
Meaning of the WM_SYSCOLORCHANGE message
WM_SYSCOLORCHANGE message is sent to all top-level windows when a
change is made to a system color setting.
Applications that have brushes using the existing system colors should
delete those brushes and re-create them using the new system colors.
声明全局变量
HBRUSH g_hBackground = NULL;
在 WM_CREATE 消息处理程序中创建背景画笔
case WM_CREATE:
g_hBackground = (HBRUSH)(COLOR_3DFACE + 1);
break;
在绘画消息中使用画笔
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
FillRect(hdc, &rcClient, g_hBackground);
EndPaint(hwnd, &ps);
break;
处理系统颜色变化
case WM_SYSCOLORCHANGE:
if (g_hBackground)
{
DeleteObject(g_hBackground);
}
g_hBackground = (HBRUSH)(COLOR_3DFACE + 1);
break;
现在,我在控制面板中更改了系统颜色,一切正常,背景被涂上了新颜色。
删除所有 WM_SYSCOLORCHANGE 处理程序代码,我在控制面板中更改了系统颜色,一切正常,背景被涂上了新颜色。
为什么我需要这条消息?
问题
这条消息对于 top-level window 是什么意思?
仅将此消息转发给 child windows?
或者我错过了什么?
这在早期显示器只能显示 256 色时很重要。 (或者如果您的系统在 Windows 无法访问本机真彩色显示模式时以安全模式启动。)系统颜色更改意味着调色板中的(潜在)更改,因此应用程序必须调整哪个颜色索引他们会用来画 windows.
如今,如果您将颜色从(例如)绿色更改为蓝色,则需要将更新后的颜色通知给任何 window 或使用该 RGB 颜色进行绘图的控件,以使其符合新的配色方案。从 COLOR_3D_FACE
等索引颜色或通过调用 GetSysColorBrush()
创建的画笔将在下一次重绘时自动使用新颜色。
如果您根据系统颜色 (GetSysColor()
) 调用 CreateSolidBrush
,您将需要在收到 WM_SYSCOLORCHANGE
消息时更新画笔(重新创建)。
WM_SYSCOLORCHANGE message is sent to all top-level windows when a change is made to a system color setting.
Applications that have brushes using the existing system colors should delete those brushes and re-create them using the new system colors.
声明全局变量
HBRUSH g_hBackground = NULL;
在 WM_CREATE 消息处理程序中创建背景画笔
case WM_CREATE:
g_hBackground = (HBRUSH)(COLOR_3DFACE + 1);
break;
在绘画消息中使用画笔
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
FillRect(hdc, &rcClient, g_hBackground);
EndPaint(hwnd, &ps);
break;
处理系统颜色变化
case WM_SYSCOLORCHANGE:
if (g_hBackground)
{
DeleteObject(g_hBackground);
}
g_hBackground = (HBRUSH)(COLOR_3DFACE + 1);
break;
现在,我在控制面板中更改了系统颜色,一切正常,背景被涂上了新颜色。
删除所有 WM_SYSCOLORCHANGE 处理程序代码,我在控制面板中更改了系统颜色,一切正常,背景被涂上了新颜色。
为什么我需要这条消息?
问题
这条消息对于 top-level window 是什么意思?
仅将此消息转发给 child windows? 或者我错过了什么?
这在早期显示器只能显示 256 色时很重要。 (或者如果您的系统在 Windows 无法访问本机真彩色显示模式时以安全模式启动。)系统颜色更改意味着调色板中的(潜在)更改,因此应用程序必须调整哪个颜色索引他们会用来画 windows.
如今,如果您将颜色从(例如)绿色更改为蓝色,则需要将更新后的颜色通知给任何 window 或使用该 RGB 颜色进行绘图的控件,以使其符合新的配色方案。从 COLOR_3D_FACE
等索引颜色或通过调用 GetSysColorBrush()
创建的画笔将在下一次重绘时自动使用新颜色。
如果您根据系统颜色 (GetSysColor()
) 调用 CreateSolidBrush
,您将需要在收到 WM_SYSCOLORCHANGE
消息时更新画笔(重新创建)。