toolkit\miniwdgt.c
), welches das absolute Minimum eines Widgets ohne schicke
Funktionen enth„lt. Alles was dieses Widget macht, ist, ein Fragezeichen zu zeigen.
Dieses Mini-Widget wurde hinzugefgt, damit Sie einen leichten Einstieg haben. Es kann ganz sicher verbessert werden. Es kann nicht
a) Der "init"-Export (Ordinal 1) wird nur einmal vom &xcenter; aufgerufen,
wenn Ihre DLL geladen wird. Die DLL wird eventuell auch in Situationen geladen, die nicht
unbedingt mit der Erzeugung des Widgets zu tun haben. Sie sollten also nicht erwarten, daá
das immer der Fall ist. Bei der Initialisierung sollte die DLL die PM-Fensterklasse des
Widgets registrieren (durch Aufruf von WinRegisterClass
). Auáerdem kann sie
Funktionen aus XFLDR.DLL
importieren, dessen Modul-Handle es bergeben
bekommt (optional). Sie muá allerdings immer einen Zeiger auf das Array der Struktur
XCENTERWIDGETCLASS
in dieser DLL bergeben, so daá das &xcenter; ber diese Klassen in der DLL informiert ist.
Sehen Sie in der Datei toolkit\miniwdgt.c
nach, wie dies gemacht wird.
b) Der "uninit"-Export (Ordinal 2) wird aufgerufen, wenn die DLL vom &xcenter; freigegeben wird. Hier kann falls n”tig aufger„umt werden.
c) Der "query version"-Export (Ordinal 3) wird noch vor dem "init"-Export aufgerufen, um die Version von &xwp; zu berprfen, die dieses Widget ben”tigt.
fnwpSampleWidget
. Der
"init"-Export ist verantwortlich fr den Aufruf von WinRegisterClass
mit dieser
Fensterprozedur, um damit eine PM-Fensterklasse zu erzeugen.
Das ist der normale switch/case-Block, der in jeder PM-Fensterprozedur benutzt wird. Hier muá man einige besondere šberlegungen anstellen, die im folgenden erkl„rt sind.
WM_CREATE
, muá das Widget den Zeiger
XCENTERWIDGET
speichern, den es mit mp1
in seiner QWL_USER
-Konstante bergeben
bekommt. Deshalb ruft das Mini-Widget-Beispiel auch
WinSetWindowPtr(hwnd, QWL_USER, mp1);
bei WM_CREATE auf.
WM_CONTROL
sollte es Nachrichten vom &xcenter; verarbeiten. Das
&xcenter; sendet WM_CONTROL
-Nachrichten an das Widget, wenn es z.B. dessen
GrӇe erfahren will.
Die Nachrichten-Kodierungen, die das &xcenter; bei WM_CONTROL
benutzt, sind
in toolkit\center.h
aufgefhrt. Es wird wahrscheinlich in der Zukunft mehr
davon geben.
WinDefWindowProc
weitergeleitet. Bei Widgets ist das anders: Sie mssen
nicht verarbeitete Nachrichten immer an die "&xcenter;-Standard-Widget-Prozedur" weiterleiten,
deren Adresse in Ihrem Widget in der
XCENTERWIDGET
-Struktur bei
WM_CREATE
im Feld pfnwpDefWidgetProc
abgelegt wird.
(Ja, das ist der Grund, warum Sie diese Struktur in Ihren Fensterkonstanten speichern
mssen.)
Wenn Sie unprozessierte Nachrichten nicht weiterleiten, werden Sie der Funktionalit„t des Widgets ernsthaft schaden. Noch schlimmer, Sie werden Speicherlecks verursachen, da die Standard-Widget-Prozedur dafr verantwortlich ist, die Ressourcen aufzur„umen und wichtige Nachrichten vom &xcenter; abzuarbeiten.
WM_DESTROY
ausfhren, mssen Sie immer und immer WM_DESTROY
an
pfnwpDefWidgetProc
weiterleiten. Andernfalls kann das &xcenter; die Ressourcen
Ihres Widgets nicht richtig aufr„umen.