通常,Windows为静态颜色保留的系统调色板条目无法更改。应用程序可以使用SetSystemPaletteUse函数来覆盖此默认行为,以减少静态颜色条目的数量,从而增加未使用的系统调色板条目数。但是,由于更改静态颜色可能会对显示屏上的所有窗口产生立即和显着的影响,应用程序不应调用SetSystemPaletteUse,除非它具有最大化的窗口和输入焦点。
当应用程序使用SYSPAL_NOSTATIC值调用SetSystemPaletteUse时,Windows将释放除保留条目之外的所有条目,允许这些条目在应用程序随后实现其逻辑调色板时接收新的颜色值。剩余的两个静态颜色条目保留保留,并设置为白色和黑色。应用程序可以使用SYSPAL_STATIC值调用SetSystemPaletteUse来还原保留的条目。它可以使用GetSystemPaletteUse功能来发现当前的系统调色板使用情况。
此外,在将系统调色板使用设置为SYSPAL_NOSTATIC之后,应用程序必须立即实现其逻辑调色板,调用GetSysColor功能来保存当前系统颜色设置,调用SetSysColors功能将系统颜色设置为合理的值,使用黑色和白色,最后将WM_SYSCOLORCHANGE消息发送到其他顶级窗口,以便使用新的系统颜色进行重新绘制。当使用黑白设置系统颜色时,应用程序应确保相邻或重叠的项目(如窗口框架和边框)分别设置为黑白。
在应用程序丢失输入焦点之前,关闭窗口或终止,必须立即使用SYSPAL_STATIC值调用SetSystemPaletteUse,实现其逻辑调色板,将系统颜色还原到其先前的值,并发送WM_SYSCOLORCHANGE消息。Windows会向受系统颜色更改影响的任何窗口发送WM_PAINT消息。使用现有系统颜色的画笔的应用程序应该删除这些画笔并使用新的系统颜色重新创建它们。