调色板讯息

【勇芳软件工作室】汉化HomePreviousNext

对于显示设备的系统调色板的更改可能会对桌面上的Windows中使用的颜色产生戏剧性的影响。为了最小化这些更改的影响,Windows提供了一组消息,帮助应用程序管理其逻辑调色板,同时确保活动窗口中的颜色尽可能接近所需的颜色。

在激活窗口之前,Windows会向顶层或重叠窗口发送WM_QUERYNEWPALETTE消息。该消息使应用程序有机会选择和实现其逻辑调色板,以便它接收到其逻辑调色板的最佳颜色映射。当应用程序收到消息时,应使用SelectPaletteUnrealizeObjectRealizePalette功能来选择和实现逻辑调色板。这样做会导致Windows更新系统调色板中的颜色,使其颜色尽可能与逻辑调色板中的颜色相同。

当应用程序由于实现其逻辑调色板而导致对系统调色板的更改时,Windows会向所有顶级和重叠的窗口发送WM_PALETTECHANGED消息。此消息使应用程序有机会更新其窗口的客户区域中的颜色,替换已更改颜色的颜色,颜色更接近于预期颜色。接收WM_PALETTECHANGED消息的应用程序应使用UnrealizeObjectRealizePalette重置与所有非活动窗口相关联的逻辑调色板,然后使用UpdateColors功能更新每个非活动窗口的客户区域中的颜色。这种技术不能保证最大数量的精确匹配;但是,它确保将逻辑调色板中的颜色映射到系统调色板中的合理颜色。

注意为避免创建无限循环,应用程序应该为其句柄与WM_PALETTECHANGED消息的【wParam中】参数中传递的句柄匹配的窗口实现调色板。

UpdateColors功能通常比重新绘制该区域更快地更新非活动窗口的客户区。但是,由于UpdateColors在系统调色板更改之前,基于每个像素的颜色进行颜色转换,因此每次调用此函数会导致某些颜色精度的损失。这意味着当窗口变为活动状态时,UpdateColors不能用于更新颜色。在这种情况下,应用程序应重新绘制客户区。

更改逻辑调色板时,Windows可能会发送WM_QUERYNEWPALETTE消息。此外,当系统调色板即将更改时,Windows可能会将WM_PALETTEISCHANGING消息发送到所有顶级和重叠的窗口。