The DirectDraw object is the heart of all DirectDraw applications and is an integral part of Direct3DŽ applications as well. It is the first object you create and, through it, you create all other related objects. Typically, you create a DirectDraw object by calling the DirectDrawCreate function, which returns an IDirectDraw interface. If you want to work with a different iteration of the interface (such as IDirectDraw4) to take advantage of new features it provides, you can query for it. (See Getting an IDirectDraw4 Interface.) Note that you can create multiple DirectDraw objects, one for each display device installed in a system.
The DirectDraw object represents the display device and makes use of hardware acceleration if the display device for which it was created supports hardware acceleration. Each unique DirectDraw object can manipulate the display device and create surfaces, palettes, and clipper objects that are dependent on (or are, "connected to") the object that created them. For example, to create surfaces, you call the IDirectDraw4::CreateSurface method. Or, if you need a palette object to apply to a surface, call the IDirectDraw4::CreatePalette method. Additionally, the IDirectDraw4 interface exposes similar methods to create clipper objects.
You can create more than one instance of a DirectDraw object at a time. The simplest example of this is using two monitors on a Windows 95 or Windows NT 4.0 and earlier system. Although these operating systems don't support dual monitors on their own, it is possible to write a DirectDraw HAL for each display device. The display device Windows and GDI recognizes is the one that will be used when you create the instance of the default DirectDraw object. The display device that Windows and GDI do not recognize can be addressed by another, independent DirectDraw object that must be created by using the second display device's globally unique identifier (GUID). This GUID can be obtained by using the DirectDrawEnumerate function.
The DirectDraw object manages all of the objects it creates. It controls the default palette (if the primary surface is in 8-bits-per-pixel mode), the default color key, and the hardware display mode. It tracks what resources have been allocated and what resources remain to be allocated.