DVASPECT2
The DVASPECT2
enumeration value is used in IViewObject::Draw1SUNL2 to specify new drawing aspects used to
optimize the drawing process.
typedef enum tagDVASPECT2
{
DVASPECT_OPAQUE = 16,
DVASPECT_TRANSPARENT = 32
} DVASPECT2;
Elements
DVASPECT_OPAQUE
Represents
the opaque, easy to clip parts of an object. Objects may or may not support
this aspect.
DVASPECT_TRANSPARENT
Represents
the transparent or irregular parts of on object, typically parts that are
expensive or impossible to clip out. Objects may or may not support this
aspect.
Remarks
To support
drawing optimizations to reduce flicker, an object needs to be able to draw and
return information about three separate aspects of itself:
DVASPECT_CONTENT
Same as
before. Specifies the entire content of an object. All objects should support
this aspect.
DVASPECT_OPAQUE
Represents
the opaque, easy to clip parts of an object. Objects may or may not support
this aspect.
DVASPECT_TRANSPARENT
Represents
the transparent or irregular parts of on object, typically parts that are
expensive or impossible to clip out. Objects may or may not support this
aspect.
The container
can determine which of these drawing aspects an object supports by calling the
new method IViewObjectEx::GetViewStatus. Individual bits return
information about which aspects are supported. If an object does not support
the IViewObjectEx interface, it is assumed to support only
DVASPECT_CONTENT.
Depending on
which aspects are supported, the container can ask the object to draw itself
during the front to back pass only, the back to front pass only, or both. The various
possible cases are:
Objects supporting only
DVASPECT_CONTENT should be drawn during the back to front pass, with all opaque
parts of any overlapping object clipped out. Since all objects should support
this aspect, a container not concerned about flickering - maybe because it is
drawing in an offscreen bitmap - can opt to draw all objects that way and skip
the front to back pass.
Objects supporting
DVASPECT_OPAQUE may be asked to draw this aspect during the front to back pass.
The container is responsible for clipping out the object s opaque regions
(returned by IViewObjectEx::GetRegion)
before painting any further object behind it.
Objects supporting
DVASPECT_TRANSPARENT may be asked to draw this aspect during the back to front
pass. The container is responsible for clipping out opaque parts of overlapping
objects before letting an object draw this aspect.
Even when
DVASPECT_OPAQUE and DVASPECT_TRANSPARENT are supported, the container is free
to use these aspects or not. In particular, if it is painting in an offscreen
bitmap and consequently is unconcerned about flicker, the container may use
DVASPECT_CONTENT and a one-pass drawing only. However, in a two-pass drawing,
if the container uses DVASPECT_OPAQUE during the front to back pass, then it
must use DVASPECT_TRANSPARENT during the back to front pass to complete the
rendering of the object.
See Also