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
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
function. If the application does not validate the update region, the window
receives an endless series of WM_PAINT messages.
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
Software for Android Developers
- More information resources
Unix Manual Pages
- Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database