Private Display Device Contexts
A
private DC enables an application to avoid retrieving and initializing a display DC each
time the application must draw in a window. Private DCs are useful for windows
that require many changes to the values of the attributes of the DC to prepare
it for drawing. Private DCs reduce the time required to prepare the DC and
therefore the time needed to carry out drawing in the window.
An application directs Windows to create a private DC for a window by
specifying the CS_OWNDC style in the window class. Windows creates a unique private DC
each time it creates a new window belonging to the class. Initially, the
private DC has the same default values for attributes as a common DC, but the
application can modify these at any time. Windows preserves changes to the DC for the
life of the window or until the application makes additional changes.
An application can retrieve the handle of the private DC by using the
GetDC function any time after the window is created. The application must retrieve
the handle only once. Thereafter, it can keep and use the handle any number of
times. Because a private DC is not part of the display DC cache, an application
need never release the DC by using the
ReleaseDC function.
Windows automatically adjusts the DC to reflect changes to the window, such as
moving or sizing. This ensures that any overlapping windows are always
properly clipped; that is, no action is required by the application to ensure
clipping. However, Windows does not revise the DC to include the update region.
Therefore, when processing a
WM_PAINT message, the application must incorporate the update region either by calling
BeginPaint or by retrieving the update region and intersecting it with the current
clipping region. If the application does not call
BeginPaint, it must explicitly validate the update region by using the
ValidateRect or
ValidateRgn function. If the application does not validate the update region, the window
receives an endless series of WM_PAINT messages.
Because
BeginPaint hides the caret if a window is showing it, an application that calls
BeginPaint should also call the
EndPaint function to restore the caret.
EndPaint has no other effect on a private DC.
Although a private DC is convenient to use, it is expensive in terms of system
resources, requiring 800 or more bytes to store. Private DCs are recommended
when performance considerations outweigh storage costs.
Windows includes the private DC when sending the
WM_ERASEBKGND message to the application. The current selections of the private DC,
including mapping mode, are in effect when the application or Windows processes these
messages. To avoid undesirable effects, Windows uses logical coordinates when
erasing the background; for example, it uses the
GetClipBox function to retrieve the logical coordinates of the area to erase and passes
these coordinates to the
FillRect function. Applications that process these messages can use similar
techniques. Windows supplies a window DC with the
WM_ICONERASEBKGND message regardless of whether the corresponding window has a private DC.
An application can use the
GetDCEx function to force Windows to return a common DC for the window that has a
private DC. This is useful for carrying out quick touch-ups to a window without
changing the current values of the attributes of the private DC.
- 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