LL_­CMND_­OBJECT

Aufgabe:

Ermöglicht, etwas vor und nach List & Label in oder neben das Objektrechteck zu zeichnen, oder das Objekt während des Drucks zu verstecken und ermöglicht viele Modifikationen.

Aktivierung:

LlSetOption(hJob, LL_­OPTION_­CALLBACKMASK, <andere Flags> | LL_­CB_­OBJECT);

Parameter:

lParam zeigt auf eine scLlObject-Struktur:

_­nSize: Größe der Struktur, sizeof(scLlObject)

­nType: Art des Objekts (LLOBJ_... Konstante).

_­lpszName: Name des Objektes in der Vorlage.

_­bPreDraw: TRUE bei Aufruf, vor dem Zeichnen des Objekts, FALSE bei Aufruf nach dem Zeichnen des Objekts

_­hPaintDC: Device Context für die Ausgaben

_­hRefDC: Device Context für Referenzen

_­rcPaint: Rechteck, in dem das Objekt gezeichnet wird. Der Mapping-Mode ist in der eingestellten Einheit, z. B. mm/100.

Rückgabewert (_lResult):

Wert von _bPreDraw

_lResult

TRUE

0: okay
1: Objekt soll nicht gezeichnet/versteckt werden

FALSE

immer 0

 

Hinweise:

In diesem Callback darf keine List & Label-Funktion aufgerufen werden, die Ausgaben zur Folge hat (LlPrint(), etc.)! Funktionen wie LlPrintGetCurrentPage() oder LlPrintGetOption() sind erlaubt.

Siehe: Hinweise zur Benutzung von GDI-Objekten.

Diese Funktion wird pro Objekt zwei Mal aufgerufen, einmal mit _­bPreDraw = TRUE, dann mit _­bPreDraw = FALSE.

_­bPreDraw == TRUE:

Verwendung: Man kann z. B. einen eigenen Hintergrund zeichnen oder das Objekt verstecken.

Beachten Sie, dass die Objekte von List & Label möglicherweise kleiner gezeichnet werden als das Rechteck angibt, z. B. bei Listenobjekten, die keine fixe Größe besitzen. Wenn Sie beim Aufruf _­rcPaint verändern, hat dies Auswirkungen auf die Größe des Objekts, denn das Objekt wird von List & Label in das hier angegebene Rechteck gezeichnet.

_­bPreDraw == FALSE:

Verwendung: Man kann z. B. einen eigenen Hintergrund und/oder Schatten zeichnen, denn erst dann ist die wahre Größe des Objekts bekannt. Das Rechteck _­rcPaint ist hier das korrekte Objektrechteck. Wenn Sie beim Aufruf _­rcPaint verändern, hat dies Auswirkungen auf angehängte Objekte, denn die Daten von _­rcPaint werden als Objektrechteck verwendet, das wiederum die Koordinaten räumlich angehängter Objekte beeinflusst!

Beispiel:

case LL_­CMND_­OBJECT:
   pSCO = (PSCLLOBJECT)pSC->_­lParam;
   if (pSCO->_­nType == LL_­OBJ_­RECT && !pSCO->_­bPreDraw)
   {
      FillRect(pSCO->_hPaintDC, pSCF->_­rcPaint,
         GetStockObject(LTGRAY_­BRUSH);
   }
   break;