Datenübergabe per Nachricht

Zu einer Nachricht gehören drei Parameter: nMsg, wParam und lParam in der folgenden Definition Ihres Nachrichten-Callbacks (nennt sich hier Fensterroutine, ist aber nichts anderes als ein Callback!)

LRESULT WINAPI MyWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam);

Der Nachrichtenwert, den List & Label benutzt, kann über LlGetNotification­Message() abgefragt werden. Alternativ könnte man über LlSetNotificationMessage() einen anderen aussuchen.

wParam ist hier unsere Aufgaben-Konstante und lParam zeigt auf eine Struktur des Typs scLlCallback:

struct scLlCallback
{
       int     _­nSize;
       LPARAM  _­lParam;
       LRESULT _­lResult;
       UINT_PTR _­lUserParameter;
}

In dieser Struktur stecken nun die erforderlichen _­lParam (als Parameterwert) und _lResult (als Rückgabewert).

nLLMessage = LlGetNotificationMessage(hJob);
//...
//...in the window procedure...
if (wMsg == nLLMessage)
{
       PSCLLCALLBACK   pSC;
       PSCLLTABLEFIELD pSCF;
       pSC = (PSCCALLBACK)lParam;
       switch (wParam)
       {
                case LL_­CMND_­TABLE­FIELD:
                        pSCF = (PSCLLTABLEFIELD)pSC->_­lParam;
                        // do something;
                        pSC._­lResult = 0;
                        break;
       }
}

_­lUserParam ist der über

LlSetOption(hJob, LL_­OPTION_­CALLBACKPARAMETER, <Wert>);

übergebene Wert.

In objektorientierten Sprachen kann so ein Zeiger ("this", "self") übergeben werden.

Wenn kein Rückgabewert gefordert wird, braucht das _­lResult-Feld nicht verändert zu werden, es steht als Voreinstellung auf Null.