Mit ADD PRIVATE PRINTERS kann ein Programm eigene Druckerbeschreibungen zum Dialog hinzufügen. <drv_info> enthält einen Zeiger auf die Liste der verfügbaren Drucker und der Rasterverfahren. Die Treibernummer sollte auf 0x7fff gesetzt werden, um den eigenen Treiber von OS-Treibern zu unterscheiden.
Deklaration:
WORD pdlg_add_printers( PRN_DIALOG *prn_dialog, DRV_INFO *drv_info );
Aufruf:
ret = pdlg_add_printers( prn_dialog, &drv_info );
Variable Belegung Bedeutung
Eingaben:
contrl[0] 205 pdlg_set
contrl[1] 1 Einträge in intin
contrl[3] 2 Einträge in addrin
intin[0] 0 pdlg_add_driver
addrin[0] prn_dialog Zeiger auf Verwaltungsstruktur
addrin[1] driver
Ausgaben:
contrl[2] 1 Einträge in intout
contrl[4] 0 Einträge in addrout
intout[0] ret 0: Fehler 1: alles in Ordnung
Strukturbeschreibung:
typedef struct
{
LONG magic; /* 'pdnf' */
LONG length; /* Strukturlänge */
LONG format; /* Datenformat */
LONG reserved; /* reserviert */
WORD driver_id; /* Treibernummer fürs VDI */
WORD driver_type; /* Treibertyp */
LONG reserved1;
LONG reserved2;
LONG reserved3;
PRN_ENTRY *printers; /* Liste der zum Treiber gehörenden Drucker */
DITHER_MODE *dither_modes; /* Liste der vom Treiber unterstützten Rasterverfahren */
LONG reserved4;
LONG reserved5;
LONG reserved6;
LONG reserved7;
LONG reserved8;
LONG reserved9;
BYTE device[128]; /* Ausgabedatei des Druckertreibers */
} DRV_INFO;
typedef struct _dither_mode
{
struct _dither_mode *next;
LONG length; /* Strukturlänge */
LONG format; /* Datenformat */
LONG reserved; /* reserviert */
LONG dither_id; /* Kennung */
LONG color_modes; /* unterstützte Farbtiefen */
LONG reserved1;
LONG reserved2;
BYTE name[32]; /* Name des Rasterverfahrens */
} DITHER_MODE;
typedef struct _prn_entry /* Gerätebeschreibung */
{
struct _prn_entry *next; /* Zeiger auf die die nächste Gerätebeschreibung */
LONG length; /* Strukturlänge */
LONG format; /* Datenformat */
LONG reserved; /* reserviert */
WORD driver_id; /* Treiberkennung */
WORD driver_type; /* Treibertyp */
LONG printer_id; /* Druckerkennung */
LONG printer_capabilities; /* Druckereigenschaften */
LONG reserved1;
LONG flags;
struct _pdlg_sub *sub_dialogs; /* Zeiger auf die Liste der Unterdialoge für diesen Drucker */
PRN_SWITCH setup_panel; /* Unterdialog bei Druckerwechsel initialisieren */
PRN_SWITCH close_panel; /* Unterdialog bei Druckerwechsel schließen */
PRN_MODE *modes; /* Liste der vorhandenen Auflösungen */
MEDIA_SIZE *papers; /* Liste der vorhandenen Papierformate */
PRN_TRAY *input_trays; /* Liste der Einzüge */
PRN_TRAY *output_trays; /* Liste der Auswürfe */
BYTE name[32]; /* Name des Druckers */
} PRN_ENTRY;
/* old_printer kann auch 0L sein */
typedef LONG (cdecl *PRN_SWITCH)( struct _drv_entry *drivers, struct _prn_settings *settings, struct _prn_entry *old_printer, struct _prn_entry *new_printer );
#define PRN_STD_SUBS 0x0001
typedef struct _prn_mode /* Beschreibung eines Druckermodus */
{
struct _prn_mode *next; /* Zeiger auf den nächsten Druckermodus */
LONG mode_id; /* Moduskennung (Index innerhalb der Datei) */
WORD hdpi; /* horizontale Auflösung in dpi */
WORD vdpi; /* vertikale Auflösung in dpi */
LONG mode_capabilities; /* Moduseigenschaften */
LONG color_capabilities; /* einstellbare Farbmodi */
LONG dither_flags; /* Flags, die angeben, ob der korrespondierende Farbmodus mit oder ohne Dithern ansprechbar ist */
MEDIA_TYPE *paper_types; /* geeignete Papiertypen */
LONG reserved;
BYTE name[32]; /* Modusname */
} PRN_MODE;
typedef struct _media_type /* Beschreibung eines Papiertyps/Druckmediums */
{
struct _media_type *next;
LONG type_id; /* Kennung des Papierformats */
BYTE name[32]; /* Name des Papierformats */
} MEDIA_TYPE;
typedef struct _media_size /* Beschreibung eines Papierformats */
{
struct _media_size *next;
LONG size_id; /* Kennung des Papierformats */
BYTE name[32]; /* Name des Papierformats */
} MEDIA_SIZE;
typedef struct _prn_tray /* Beschreibung eines Einzugs/Auswurfs */
{
struct _prn_tray *next;
LONG tray_id; /* Nummer des Einzugs oder Auswurfs */
BYTE name[32]; /* Name des Schachts */
} PRN_TRAY;