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 |
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;