Windows 3.1 Device Drivers (ddag31qh.hlp) (
Table of Contents;
Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software,
purely for historical purposes.
If you're looking for up-to-date documentation, particularly for programming,
you should not rely on the information found here, as it will be woefully
out of date.
GDIINFO
◄Up► ◄Next► ◄Previous►
────────────────────────────────────────────────────────────────────────────
typedef struct tagGDIINFO {
short int dpVersion;
short int dpTechnology;
short int dpHorzSize;
short int dpVertSize;
short int dpHorzRes;
short int dpVertRes;
short int dpBitsPixel;
short int dpPlanes;
short int dpNumBrushes;
short int dpNumPens;
short int futureuse;
short int dpNumFonts;
short int dpNumColors;
unsigned short int dpDEVICEsize;
unsigned short int dpCurves;
unsigned short int dpLines;
unsigned short int dpPolygonals
unsigned short int dpText;
unsigned short int dpClip;
unsigned short int dpRaster;
short int dpAspectX;
short int dpAspectY;
short int dpAspectXY;
short int dpStyleLen;
POINT dpMLoWin;
POINT dpMLoVpt;
POINT dpMHiWin;
POINT dpMHiVpt;
POINT dpELoWin;
POINT dpELoVpt;
POINT dpEHiWin;
POINT dpEHiVpt;
POINT dpTwpWin;
POINT dpTwpVpt;
short int dpLogPixelsX;
short int dpLogPixelsY;
short int dpDCManage;
short int dpCaps1;
long int dpSpotSizeX;
long int dpSpotSizeY;
short int dpPalColors;
short int dpPalReserved;
short int dpPalResolution;
} GDIINFO;
The GDIINFO structure contains information about graphics devices supported
by the device driver. GDI retrieves this structure when it loads the driver
and uses the information in the structure to initialize the driver.
Member Description
────────────────────────────────────────────────────────────────────────────
dpVersion Specifies the version number. The high-order byte specifies
the major version, the low-order byte the minor version.
For example, in a device driver developed for Windows 3.1,
this member should contain 0x030A.
dpTechnology Specifies the device technology. It can be one of the
following values.
Value Meaning
───────────────────────────────────────────────────────────
DT_PLOTTER (0) Vector plotter
DT_RASDISPLAY (1) Raster display
DT_RASPRINTER (2) Raster printer
DT_RASCAMERA (3) Raster camera
DT_CHARSTREAM (4) Character stream, PLP
DT_METAFILE (5) Metafile, VDM
DT_DISPFILE (6) Display file
dpHorzSize Specifies the width of the physical display surface in
millimeters.
dpVertSize Specifies the height of the physical display surface in
millimeters.
dpHorzRes Specifies the width of the display surface in pixels. For
nonraster devices, this width is equivalent to the number
of vertical grid lines used by the device to plot points on
the display surface. In such cases, a pixel is defined to
be the smallest mark the device can draw.
dpVertRes Specifies the height of the display in raster lines. For
nonraster devices, this height is equivalent to the number
of horizontal grid lines used by the device to plot points
on the display surface. In such cases, a raster line is
equivalent to a gridline.
dpBitsPixel Specifies the number of adjacent bits on each plane
required to define a single pixel.
dpPlanes Specifies the number of planes required to define the
pixels. For a typical raster device with red, green, and
blue bit planes (such as a 3-plane EGA), this member is 3.
dpNumBrushes Specifies the number of device-specific brushes supported
by this device.
dpNumPens Specifies the number of device-specific pens supported by
this device.
futureuse Reserved; do not use.
dpNumFonts Specifies the number of device-specific fonts supported by
this device.
dpNumColors Specifies the number of entries in the color table for this
device or the number of reserved colors for palette-capable
devices.
dpDEVICEsize Specifies the size (in bytes) of the PDEVICE structure for
this device. It must be at least two bytes.
dpCurves Specifies whether the device driver can perform circles,
pie wedges, chord arcs, and ellipses. The dpCurves member
also specifies whether the interior of those figures that
can be handled can be brushed in, and whether the borders
of those figures that can be handled can be drawn with wide
lines, styled lines, or lines that are both wide and
styled. The dpCurves member can be a combination of the
following values.
Value Meaning
───────────────────────────────────────────────────────────
CC_NONE (0x0000) Curves not supported.
CC_CIRCLES (0x0001) Can perform circles.
CC_PIE (0x0002) Can perform pie wedges.
CC_CHORD (0x0004) Can perform chord arcs.
CC_ELLIPSES (0x0008) Can perform ellipses.
CC_WIDE (0x0010) Can perform wide lines.
CC_STYLED (0x0020) Can perform styled lines.
CC_WIDESTYLED (0x0040) Can perform lines that are wide and
styled.
CC_INTERIORS (0x0080) Can perform interiors.
CC_ROUNDRECT (0x0100) Can perform round rectangles.
All other values are reserved.
dpLines Specifies whether the device driver can perform polylines
and lines. The dpLines member also specifies whether the
interior of those figures that can be handled can be
brushed in, and whether the borders of those figures that
can be handled can be drawn with wide lines, styled lines,
or lines that are both wide and styled. The dpLines member
can be a combination of the following values.
Value Meaning
───────────────────────────────────────────────────────────
LC_NONE (0x0000) Lines not supported.
LC_POLYLINE (0x0002) Can perform polylines.
LC_WIDE (0x0010) Can perform wide lines.
LC_STYLED (0x0020) Can perform styled lines.
LC_WIDESTYLED (0x0040) Can perform wide styled lines.
LC_INTERIORS (0x0080) Can perform interiors.
All other values are reserved. The high byte must be zero.
dpPolygonals Specifies whether the device driver can perform polygons,
rectangles, and scan lines. The dpPolygonals member also
specifies whether the interior of those figures that can be
handled can be brushed in, and whether the borders of those
figures that can be handled can be drawn with wide lines,
styled lines, or lines that are both wide and styled. The
dpPolygonals member can be a combination of the following
values.
Value Meaning
───────────────────────────────────────────────────────────
PC_NONE (0x0000) Polygons not supported.
PC_ALTPOLYGON (0x0001) Can perform alternate-fill
polygons.
PC_RECTANGLE (0x0002) Can perform rectangles.
PC_WINDPOLYGON (0x0004) Can perform winding-number-fill
polygons.
PC_SCANLINE (0x0008) Can perform scan lines.
PC_WIDE (0x0010) Can perform wide borders.
PC_STYLED (0x0020) Can perform styled borders.
PC_WIDESTYLED (0x0040) Can perform borders that are wide
and styled.
PC_INTERIORS (0x0080) Can perform interiors.
All other values are reserved. The high byte must be zero.
dpText Specifies the level of text support the device driver
provides. The dpText member can be a combination of the
following values.
Value Meaning
───────────────────────────────────────────────────────────
TC_OP_CHARACTER (0x0001) Can generate character-precision
text. If this value is not given
(or implied by the TC_OP_STROKE
value), the driver can generate
string-precision text only.
TC_OP_STROKE (0x0002) Can generate stroke-precision
text. The value implies the
TC_OP_CHARACTER value.
TC_CP_STROKE (0x0004) Can draw partially clipped
characters. If this value is not
given, the character must be
entirely within the clipping
region to be drawn.
TC_CR_90 (0x0008) Can rotate characters in
90-degree increments. If this
value is not given (or implied by
the TC_CR_ANY value), the driver
can not rotate text.
TC_CR_ANY (0x0010) Can rotate characters to any
angle. This value implies the
TC_CR_90 value.
TC_SF_X_YINDEP (0x0020) Can scale characters
independently along the x- and
y-axes. If this value is not
given, the driver may be able to
scale characters but not
independently along the axes.
TC_SA_DOUBLE (0x0040) Can scale characters by doubling.
If this value is not given (or
implied by the TC_SA_INTEGER or
TC_SA_CONTIN values), the driver
cannot scale text.
TC_SA_INTEGER (0x0080) Can scale characters by integral
multiples. This value implies the
TC_SA_DOUBLE value.
TC_SA_CONTIN (0x0100) Can scale characters by any
multiple. This value implies the
TC_SA_DOUBLE and TC_SA_INTEGER
values.
TC_EA_DOUBLE (0x0200) Can generate bold characters by
doubling the weight. If this
value is not given, the driver
cannot modify character weights.
TC_IA_ABLE (0x0400) Can generate italic characters by
skewing.
TC_UA_ABLE (0x0800) Can generate underlined
characters.
TC_SO_ABLE (0x1000) Can generate struck-out
characters.
TC_RA_ABLE (0x2000) Can use raster fonts to generate
text.
TC_VA_ABLE (0x4000) Can use vector fonts to generate
text.
TC_RESERVED (0x8000) Reserved; must be zero.
If a device claims to have an ability, it must have it for
all fonts, whether realized by the device or provided by
GDI.
dpClip Specifies whether the device can clip output. This member
can be one of the following values.
Value Meaning
───────────────────────────────────────────────────────────
CP_NONE (0) Device cannot clip.
CP_RECTANGLE (1) Device can output using a single
rectangle.
CP_REGION (2) Device can output using a region (which
may be several rectangles).
dpRaster Specifies raster abilities. This member can be a
combination of the following values.
Value Meaning
───────────────────────────────────────────────────────────
RC_NONE (0x0000) Device has no raster
capabilities.
RC_BITBLT (0x0001) Can transfer bitmaps. The driver
exports the BitBlt function.
RC_BANDING (0x0002) Requires banding support.
RC_SCALING (0x0004) Requires scaling support.
RC_BITMAP64 (0x0008) Supports bitmaps that are larger
than 64K bytes.
RC_GDI20_OUTPUT (0x0010) Supports the Windows 2.x
functions. The driver exports the
ExtTextOut, GetCharWidth, and
FastBorder functions.
RC_GDI20_STATE (0x0020) Supports state blocks in device
contexts.
RC_SAVEBITMAP (0x0040) Saves bitmaps locally in "shadow"
memory. Driver exports the
SaveScreenBitmap function.
RC_DI_BITMAP (0x0080) Can get and set
device-independent bitmaps
(DIBs). The Driver exports the
DeviceBitmapBits function.
RC_PALETTE (0x0100) Can do color-palette management.
RC_DIBTODEV (0x0200) Can transfer device-independent
bitmaps directly to device. The
driver exports the
SetDIBitsToDevice function.
RC_BIGFONT (0x0400) Supports Windows 3.x fonts. If
this value is not given, GDI
ensures that the driver receives
Windows 2.x fonts only.
RC_STRETCHBLT (0x0800) Can stretch and compress bitmaps
while transferring the bitmap.
The driver exports the
StretchBlt function.
RC_FLOODFILL (0x1000) Can perform flood filling. The
driver exports the FloodFill
function.
RC_STRETCHDIB (0x2000) Can stretch and compress
device-independent bitmaps while
transferring the bitmap. The
driver exports the StretchDIBits
function.
RC_OP_DX_OUTPUT (0x4000) Can fill opaque rectangle and set
character widths on calls to the
ExtTextOut function.
RC_DEVBITS (0x8000) Supports device bitmaps. Driver
exports the BitmapBits and
SelectBitmap function.
dpAspectX Specifies the relative width of a device pixel. This value,
in the range 1 to 1000, helps specify the device's aspect
ratio.
dpAspectY Specifies the relative height of a device pixel. This
value, in the range 1 to 1000, helps specify the device's
aspect ratio.
dpAspectXY Specifies the relative diagonal width of a device pixel.
This value, in the range 1 to 1000, helps specify the
device's aspect ratio. It must be equal to the square root
of the sum of the squares of the dpAspectX and dpAspectY
members.
dpStyleLen Specifies the minimum length of a dot generated by a styled
pen. The length is relative to the width of a device pixel
and should be given in the same units as the dpAspectX
member. For example, if dpAspectX is 5 and the minimum
length required is 3 pixels, the dpStyleLen member should
be 15.
dpMLoWin Specifies the width and height of the metric (low
resolution) window. Width is dpHorzSize*10; height is
dpVertSize*10.
dpMLoVpt Specifies the horizontal and vertical resolutions of the
metric (low resolution) viewport. Horizontal is dpHorzRes;
vertical is -dpVertRes.
dpMHiWin Specifies the width and height of the metric (high
resolution) window. Width is dpHorzSize*100; height is
dpVertSize*100.
dpMHiVpt Specifies the horizontal and vertical resolutions of the
metric (high resolution) viewport. Horizontal is dpHorzRes;
vertical is -dpVertRes.
dpELoWin Specifies the width and height of the English (low
resolution) window. Width is dpHorzSize*1000; height is
dpVertSize*1000.
dpELoVpt Specifies the horizontal and vertical resolutions of the
English (low resolution) viewport. Horizontal is
dpHorzRes*254; vertical is -dpVertRes*254.
dpEHiWin Specifies the width and height of the English (high
resolution) window. Width is dpHorzSize*10,000; height is
dpVertSize*10,000.
dpEHiVpt Specifies the horizontal and vertical resolutions of the
English (high resolution) viewport. Horizontal is
dpHorzRes*254; vertical is -dpVertRes*254.
dpTwpWin Specifies the width and height of the twip window. There
are 20 twips per 1 printer's point and 72 printer's points
per inch. Width is dpHorzSize*14400; height is
dpVertSize*14400.
dpTwpVpt Specifies the horizontal and vertical resolutions of the
twip viewport. Horizontal is dpHorzRes*254; vertical is
-dpVertRes*254.
dpLogPixelsX Specifies the number of pixels per logical inch along a
horizontal line on the display surface. This is used to
match fonts.
dpLogPixelsY Specifies the number of pixels per logical inch along a
vertical line on the display surface. This is used to match
fonts.
dpDCManage Specifies whether the device driver can manage multiple
device contexts (DC). This member can be one of the
following values.
Value Meaning
───────────────────────────────────────────────────────────
0x0000 Driver allows multiple DCs. It
creates a new PDEVICE for each DC
that specifies a new device and
filename pair, but uses the same
PDEVICE for any subsequent DCs that
specify the same device and
filename pair.
DC_SPDEVICE (0x0001) Driver allows multiple DCs but it
creates a new PDEVICE for each DC
regardless of whether the device
and filename pairs are the same.
DC_1PDEVICE (0x0002) Driver allows multiple DCs but only
if all DCs have unique device and
filename pairs. The driver creates
a PDEVICE for each DC. The driver
returns an error on any attempt to
create a second DC with an existing
device and filename pair.
DC_IGNOREDFNP (0x0004) Driver allows multiple DCs but only
creates one PDEVICE. All DCs share
the same PDEVICE regardless of the
device and filename pairs.
0x0006 Driver allows only one DC. The
driver returns an error on any
attempt to create a second DC.
The values 0x0003, 0x0005, and 0x0007 are not valid and
must not be used.
dpCaps1 Specifies additional raster abilities. The member can be
one of the following values.
Value Meaning
───────────────────────────────────────────────────────────
C1_TRANSPARENT (0x0001) Performs BitBlt and StretchBlt
functions with a transparent
background.
TC_TT_ABLE (0x0002) Informs GDI that the driver is
capable of producing TrueType as
raster fonts. The driver must call
the dmExtTextOut function to draw
the raster font into the bitmap.
The value is similar to
TC_RA_ABLE.
All other values are reserved.
dpSpotSizeX Specifies the horizontal spot size for TrueType fonts on
this device.
dpSpotSizeY Specifies the vertical spot size for TrueType fonts on this
device.
dpPalColors Specifies the total number of simultaneous colors available
in Windows 3.x for palette-capable devices.
Nonpalette-capable devices ignore this value.
dpPalReserved Specifies the even number of reserved system colors
available in Windows 3.x for palette-capable devices.
Nonpalette-capable devices ignore this value.
dpPalResolution Specifies the palette resolution, which equals the number
of bits going into video DACS. Nonpalette-capable devices
ignore this value.
Comments
The dpText member requires that for each precision level that the precision
levels below it are also set. For example, the TC_SA_INTEGER value requires
that the the TC_SA_DOUBLE value be set, and the TC_SA_CONTIN value requires
that all three be set. Since it is required that the lowest precision level
of each ability be supported, no value is provided in dpText for the lowest
level of each ability.
The dpAspectX, dpAspectY, and dpAspectXY members specify the relative width,
height, and diagonal width of a device pixel and correspond directly to the
device's aspect ratio. For devices whose pixels do not have integral
diagonal widths, the member values can be multiplied by a convenient factor
to preserve information. For example, pixels on a device with a 1 to 1
aspect ratio have a diagonal width of 1.414. For good results, the aspect
members should be set to 100, 100, and 141, respectively. For numerical
stability, the member values should be kept under 1000.
The window/viewport pair members are the numerator and denominator of the
scale fraction used to correct for the device aspect ratio, and to set to a
fixed unit of measurement, either metric or English. These numbers should be
integers in the range of -32768 to 32767. When calculating these constants,
out-of-range values can be divided by some number to bring them back into
range as long as the corresponding window or viewport constant is divided by
the same number.
The dpRaster member is also used to indicate a scaling device. If the
RC_SCALING value is set, the device does graphics scaling. Certain devices
perform graphics at one resolution and text at another. Some applications
require that character cells be an integral number of pixels. If a device
reported that its graphics resolution was 75 dpi but its text resolution was
300 dpi, then its character cells would not be an integral number of pixels
(since they were digitized at 300 dpi). To get around this problem, GDI uses
scaling devices. The device driver registers itself as a 300 dpi device and
all the graphics at 300 dpi are scaled to 75 dpi. Any device that scales
must have the RC_SCALING value set. Scaling always reduces the resolution;
it never increases it. GDI calls the Control function with GETSCALINGFACTOR
escape before output to a device. The scaling factor is a shift count that
is a power of two. Therefore, a scaling factor of 2 means reduce by 4, and a
scaling factor of 1 means reduce by 2.
The number of reserved colors on the palette is always 20, with 16
corresponding to the VGA colors and 4 special colors. Half of the reserved
palette colors are placed at the beginning and half at the end of the
palette.
See Also
Enable, Control, GETSCALINGFACTOR, PDEVICE
♦