OPEN WINDOW öffnet ein Fenster mit dem Druckdialog. Das Handle des Fensters wird zurückgeliefert, wenn kein Fehler aufgetreten ist. Im Fehlerfall ist der Rückgabewert 0. Die Struktur <settings> enthält die Druckereinstellung, die mit jedem Dokument gespeichert werden sollte. Wenn zu einem Dokument noch keine Einstellung existiert, kann sie entweder mit pdlg_new_settings() erzeugt werden (der Speicherblock gehört dem System) oder die Applikation kann Malloc() und anschließend pdlg_dflt_settings() aufrufen, um den Speicher zu initialisieren.
In <option_flags> wird u.a. mitgeteilt, ob der Dialog als Einstell- (PDLG_PREFS) oder Druckdialog (PDLG_PRINT) angezeigt werden soll. Mit den Flags PDLG_ALWAYS_COPIES, PDLG_ALWAYS_SCALE und PDLG_ALWAYS_ORIENT kann außerdem festgelegt werden, daß Skalierung, Kopieroption und Querdruck auch dann angeboten werden, wenn ein Treiber sie nicht unterstützt, so daß die Applikation z.B. die Seite gedreht ausgeben muß. Durch PDLG_EVENDODD werden die Buttons für gerade/ungerade Seiten anwählbar.
Deklaration: WORD pdlg_open( PRN_DIALOG *prn_dialog, PRN_SETTINGS *settings, BYTE *document_name, WORD option_flags, WORD x, WORD y ); Aufruf: whdl = pdlg_open( prn_dialog, settings, "ohne Namen", PDLG_PREFS, -1, -1 ); Variable Belegung Bedeutung Eingaben: contrl[0] 202 pdlg_open contrl[1] 3 Einträge in intin contrl[3] 3 Einträge in addrin intin[0] option_flags intin[1] x x-Koordinate des Fensters oder -1 (zentriert) intin[2] y y-Koordinate des Fensters oder -1 (zentriert) addrin[0] prn_dialog Zeiger auf Verwaltungsstruktur addrin[1] settings Druckereinstellung addrin[2] document_name Dokumentenname Ausgaben: contrl[2] 1 Einträge in intout contrl[4] 0 Einträge in addrout intout[0] whdl Handle des Fensters oder 0 (Fehler) Beschreibung von <option_flags>: #define PDLG_PREFS 0x0000 /* Einstelldialog anzeigen */ #define PDLG_PRINT 0x0001 /* Druckdialog anzeigen */ #define PDLG_ALWAYS_COPIES 0x0010 /* immer Kopien anbieten */ #define PDLG_ALWAYS_ORIENT 0x0020 /* immer Querformat anbieten */ #define PDLG_ALWAYS_SCALE 0x0040 /* immer Skalierung anbieten */ #define PDLG_EVENODD 0x0100 /* Option für gerade und ungerade Seiten anbieten */ Beschreibung von <settings>: /* <page_flags> */ #define PG_EVEN_PAGES 0x0001 /* nur Seiten mit gerader Seitennummer ausgeben */ #define PG_ODD_PAGES 0x0002 /* nur Seiten mit ungerader Seitennummer ausgeben */ /* <first_page/last_page> */ #define PG_MIN_PAGE 1 #define PG_MAX_PAGE 9999 /* <orientation> */ #define PG_UNKNOWN 0x0000 /* Ausrichtung unbekannt und nicht verstellbar */ #define PG_PORTRAIT 0x0001 /* Seite im Hochformat ausgeben */ #define PG_LANDSCAPE 0x0002 /* Seite im Querformat ausgeben */ typedef struct _prn_settings { LONG magic; /* 'pset' */ -->LONG length; /* Strukturlänge */ LONG format; /* Strukturtyp */ LONG reserved; -->LONG page_flags; /* Flags, u.a. gerade Seiten, ungerade Seiten */ -->WORD first_page; /* erste zu druckende Seite */ -->WORD last_page; /* letzte zu druckende Seite */ -->WORD no_copies; /* Anzahl der Kopien */ -->WORD orientation; /* Drehung */ -->LONG scale; /* Skalierung: 0x10000L entspricht 100% */ -->WORD driver_id; /* VDI-Gerätenummer */ WORD driver_type; /* Typ des eingestellten Treibers */ LONG driver_mode; /* Flags, u.a. für Hintergrunddruck */ LONG reserved1; LONG reserved2; LONG printer_id; /* Druckernummer */ LONG mode_id; /* Modusnummer */ WORD mode_hdpi; /* horizontale Auflösung in dpi */ WORD mode_vdpi; /* vertikale Auflösung in dpi */ LONG quality_id; /* Druckmodus (hardwäremäßige Qualität, z.B. Microweave oder Econofast) */ LONG color_mode; /* Farbmodus */ LONG plane_flags; /* Flags für auszugebende Farbebenen (z.B. nur cyan) */ LONG dither_mode; /* Rasterverfahren */ LONG dither_value; /* Parameter für das Rasterverfahren */ LONG size_id; /* Papierformat */ LONG type_id; /* Papiertyp (normal, glossy) */ LONG input_id; /* Papiereinzug */ LONG output_id; /* Papierauswurf */ LONG contrast; /* Kontrast: 0x10000L entspricht Normaleinstellung */ LONG brightness; /* Helligkeit: 0x1000L entspricht Normaleinstellung */ LONG reserved3; LONG reserved4; LONG reserved5; LONG reserved6; LONG reserved7; LONG reserved8; BYTE device[128]; /* Dateiname für den Ausdruck */ #ifdef __PRINTING__ TPrint mac_settings; /* Einstellung des Mac-Druckertreibers */ #else struct { UBYTE inside[120]; } mac_settings; #endif } PRN_SETTINGS;
Die mit --> gekennzeichneten Strukturelemente können von der Applikation ausgelesen werden. Auf alle anderen Einträge sollte nicht zugegriffen werden. Daten wie z.B. die Druckerauflösung oder die Farbanzahl sollten nicht der Einstellstruktur entnommen werden, sondern beim Start des Ausdrucks vom Drucker erfragt werden (es wäre z.B. möglich, daß der Druckertreiber durch Speichermangel gezwungen wird, die Druckauflösung gegenüber der in PRN_SETTINGS eingetragenen Einstellung zu verringern).