|
Jeder Grafikfilter enthält mindestens zwei exportierte Funktionen. Diese haben einen festgelegten Namen, anhand derer sie adressiert werden können. Eine Adresseierung über den Index sollte man tunlichst unterlassen, da die Index-Nummer nicht einheitlich ist.
| |
WORD CALLBACK GetFilterInfo (
WORD wVersion,
LPCSTR lpszIni,
HPREFMEM FAR * lphPrefMem,
HFILETYPES FAR *lphFileTypes);
GetFilterInfo ermittelt die Filterart und liefert ein Handle auf eine PREFMEM-Struktur zurück. Diese Struktur braucht der aufrufende Prozeß nicht zu kennen, da sie je nach Filter unterschiedlich sein kann. Die Filter greifen intern auf diese Daten zu. Dafür wird die Struktur bei der Initialisierung mit den Default-Werten vorbelegt und über den Konfigurationsdialog, falls vorhanden, überschrieben.
| Funktion GetFilterInfo |
|
lpszIni und lphFileType werden zur Zeit nicht benutzt und enthalten NIL bzw. eine Dummy-Variable. In wVersion wird zur Zeit immer 0 übergeben.
Über das Funktionsergebnis kann die Art des Filters identifiziert werden. Es gelten folgende Konventionen:
|
Wert
|
Filterart
|
|
1
|
Text-Import-Filter
|
|
2
|
Grafik-Import-Filter
|
|
4
|
Grafik-Export-Filter
|
| Standard-Rückgabewerte |
WORD CALLBACK GetFilterPref(
HINSTANCE hInst,
HWND hWindow,
HPREFMEM lpPrefMem,
WORD dummy);
GetFilterPref wickelt den Konfigurationsdialog ab. Dazu muß die Funktion mit dem Instanz-Handle und einem Handle auf das Elternfenster für den Dialog versorgt werden. lpPrefMem ist ein Handle auf die HPREFMEM-Struktur, die von der Funktion GetFilterInfo angelegt wurde.
Als Ergebnis liefert die Funktion den Status des Dialogs, also ok oder abgebrochen.
| Funktion GetFilterPref |
WORD CALLBACK ImportGR (
HDC hdc,
LPFILESPEC lpFileSpec,
LPPICINFO lpPicInfo,
HPREFMEM hPrefMem);
ImportGR liest eine Datei ein und liefert ein Handle auf ein Metafile zurück. War die Ausgangsgrafik eine Bitmap, so wird diese über ein BitBlt() in das Metafile eingebunden.
Für den Import wird ein Kontext benötigt, der jedoch ein reiner Informationskontext sein darf, da die Filter diesen DC nur zur Information über die Beschaffenheit des Ausgabegeräts benutzen.
Die Übergabe der Bilddaten erfolgt in einer PicInfo-Struktur, die wie folgt definiert ist:
| Funktion ImportGR |
typedef struct tagPICINFO {
HMETAFILE hmf;
RECT rcBoundingBox;
WORD wScale;
} PICINFO;
typedef PICINFO FAR * LPPICINFO;
Das im Element hmf gelieferte Metafile kann direkt ausgegeben werden. Die Größe des Metafile in virtuellen Koordinaten ist in rcBoundingbox abgelegt. Damit wird es möglich, das Metafile proportions- und größengerecht abzubilden. In wScale ist die Auflösung des Metafiles in dpi abgelegt. Allerdings ist dieser Wert nicht immer zuverlässig, da er aus der Grafik gewonnen werden muß Grafiken und nicht immer korrekte Werte enthalten. Meist ist wScale 1000 oder 1200 für Vektorgrafiken und 96 für Rastergrafiken.
| Struktur PICINFO |
|
Die Grafikfilter können eine Datei neu öffnen, was wohl der Regelfall ist, oder ab einer vorgegebenen Dateiposition lesen. In diesem Fall müssen das Dateihandle und die Leseposition in den Elementen hfFile und dwFilePos der Struktur FileSpec übergeben werden. Diese Struktur besitzt folgenden Aufbau:
| Übergabe der Dateiinformationen |
typedef struct tagFILESPEC {
WORD fFlags;
DWORD dwFileType;
HFILE hfFile;
char szFileName[124];
DWORD dwFilePos;
} FILESPEC;
typedef FILESPEC FAR * LPFILESPEC;
In fFlags und dwFileType kann man immer 0 eintragen. szFileName enthält den Dateinamen der zu lesenden Grafikdatei.
Als Ergebnis liefert die Funktion den Wert 0, wenn die Grafik korrekt eingelesen wurde.
| Struktur FileSpec |
WORD CALLBACK ExportGR (
HDC hdc,
LPFILESPEC lpFileSpec,
LPPICINFO lpPicInfo,
HPREFMEM hPrefMem);
Die Funktion ExportGR ist nur in Grafik-Export-Filtern anstelle der Funktion ImportGR enthalten. Der Aufruf erfolgt analog zu ImportGR, jedoch mit dem Unterschied, daß die PICINFO-Struktur bereits ausgefüllt ist. hmf muß auf ein Metafile zeigen. rcBoundingbox und wScale sollten korrekt ausgefüllt sein, da sie wiederum als Import-Informationen für ein späteres Lesen verwendet werden.
| Funktion ExportGR
|