Palette Messages
Changes to the system palette for the display device can have dramatic and
sometimes undesirable effects on the colors used in windows on the desktop. To
minimize the impact of these changes, Windows provides a set of messages that help
applications manage their logical palettes while ensuring that colors in the
active window are as close as possible to the colors intended.
Windows sends a
WM_QUERYNEWPALETTE message to a top-level or overlapped window just before activating the
window. This message gives an application the opportunity to select and realize its
logical palette so that it receives the best possible mapping of colors for its
logical palette. When the application receives the message, it should use the
SelectPalette,
UnrealizeObject, and
RealizePalette functions to select and realize the logical palette. Doing so directs Windows
to update colors in the system palette so that its colors match as many colors
in the logical palette as possible.
When an application causes changes to the system palette as a result of
realizing its logical palette, Windows sends a
WM_PALETTECHANGED message to all top-level and overlapped windows. This message gives
applications the opportunity to update the colors in the client areas of their windows,
replacing colors that have changed with colors that more closely match the
intended colors. An application that receives the WM_PALETTECHANGED message should
use
UnrealizeObject and
RealizePalette to reset the logical palettes associated with all inactive windows and then
update the colors in the client area for each inactive window by using the
UpdateColors function. This technique does not guarantee the greatest number of exact
color matches; however, it does ensure that colors in the logical palette are
mapped to reasonable colors in the system palette.
Note To avoid creating an infinite loop, an application should
never realize the palette for the window whose handle matches the handle passed in
the
wParam parameter of the WM_PALETTECHANGED message.
The
UpdateColors function typically updates a client area of an inactive window faster than
redrawing the area. However, because
UpdateColors performs color translation based on the color of each pixel before the system
palette changed, each call to this function results in the loss of some color
accuracy. This means
UpdateColors cannot be used to update colors when the window becomes active. In such
cases, the application should redraw the client area.
Windows may send the
WM_QUERYNEWPALETTE message when changes to the logical palette are made. Also, Windows may send
the
WM_PALETTEISCHANGING message to all top-level and overlapped windows when the system palette is
about to change.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database