Mit &xwp; wird nun ein Beispiel eines "Mini-Widgets" geliefert (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

Als mindeste Voraussetzung muá eine Plug-In-DLL folgendes tun k”nnen:
  1. Sie muá drei Prozeduren mit den entsprechenden Ordinalien exportieren.

    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.

  2. Die Plug-In-DLL muá eine PM-Fensterprozedur fr die Widget-Klasse enthalten. Im Beispiel des Mini-Widgets ist das die Prozedur 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.

  3. Bei 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.

  4. Bei 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.

  5. Normalerweise werden alle nicht abgearbeiteten Nachrichten vom PM an 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.

  6. Sogar wenn Sie Ihre eigene Routinen bei der Nachricht 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.