CallWindowProcA-Funktion (winuser.h)
Übergibt Nachrichteninformationen an die angegebene Fensterprozedur.
Syntax
LRESULT CallWindowProcA(
[in] WNDPROC lpPrevWndFunc,
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
Parameter
[in] lpPrevWndFunc
Typ: WNDPROC-
Die vorherige Fensterprozedur. Wenn dieser Wert durch Aufrufen der GetWindowLong--Funktion mit dem nIndex Parameter abgerufen wird, der auf GWL_WNDPROC oder DWL_DLGPROCfestgelegt ist, handelt es sich entweder um die Adresse einer Fenster- oder Dialogfeldprozedur oder um einen speziellen internen Wert, der nur für CallWindowProcsinnvoll ist.
[in] hWnd
Typ: HWND-
Ein Handle für die Fensterprozedur zum Empfangen der Nachricht.
[in] Msg
Typ: UINT-
Die Nachricht.
[in] wParam
Typ: WPARAM-
Zusätzliche nachrichtenspezifische Informationen. Der Inhalt dieses Parameters hängt vom Wert des Msg-Parameters ab.
[in] lParam
Typ: LPARAM-
Zusätzliche nachrichtenspezifische Informationen. Der Inhalt dieses Parameters hängt vom Wert des Msg-Parameters ab.
Rückgabewert
Typ: LRESULT-
Der Rückgabewert gibt das Ergebnis der Nachrichtenverarbeitung an und hängt von der gesendeten Nachricht ab.
Bemerkungen
Verwenden Sie die CallWindowProc--Funktion für die Fensterunterklasse. In der Regel verwenden alle Fenster mit derselben Klasse eine Fensterprozedur. Eine Unterklasse ist ein Fenster oder eine Gruppe von Fenstern mit derselben Klasse, deren Nachrichten von einer anderen Fensterprozedur (oder Prozedur) abgefangen und verarbeitet werden, bevor sie an die Fensterprozedur der Klasse übergeben werden.
Die SetWindowLong--Funktion erstellt die Unterklasse, indem die Fensterprozedur geändert wird, die einem bestimmten Fenster zugeordnet ist, wodurch das System die neue Fensterprozedur anstelle des vorherigen Aufrufs aufruft. Eine Anwendung muss alle Nachrichten übergeben, die nicht von der neuen Fensterprozedur an die vorherige Fensterprozedur verarbeitet werden, indem CallWindowProcaufgerufen wird. Auf diese Weise kann die Anwendung eine Kette von Fensterprozeduren erstellen.
Wenn
LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM);
Wenn STRICT nicht definiert ist, weist der lpPrevWndFunc Parameter den Datentyp FARPROCauf. Der FARPROC Typ wird wie folgt deklariert:
int (FAR WINAPI * FARPROC) ()
In C gibt die FARPROC--Deklaration eine Rückruffunktion mit einer nicht angegebenen Parameterliste an. In C++ gibt die leere Parameterliste in der Deklaration jedoch an, dass eine Funktion keine Parameter aufweist. Dieser subtile Unterschied kann unerlässigen Code unterbrechen. Es folgt eine Möglichkeit, diese Situation zu behandeln:
#ifdef STRICT
WNDPROC MyWindowProcedure
#else
FARPROC MyWindowProcedure
#endif
...
lResult = CallWindowProc(MyWindowProcedure, ...) ;
Weitere Informationen zu Funktionen, die mit leeren Argumentlisten deklariert wurden, finden Sie unter Die C++-Programmiersprache, Second Edition, von Bjarne Stroustrup.
Die CallWindowProc--Funktion verarbeitet die Unicode-zu-ANSI-Konvertierung. Sie können diese Konvertierung nicht nutzen, wenn Sie die Fensterprozedur direkt aufrufen.
Beispiele
Ein Beispiel finden Sie unter Unterklassen eines Window-
Anmerkung
Der winuser.h-Header definiert CallWindowProc als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 2000 Professional [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | winuser.h (enthalten Windows.h) |
Library | User32.lib |
DLL- | User32.dll |
API-Satz | ext-ms-win-ntuser-window-l1-1-4 (eingeführt in Windows 10, Version 10.0.14393) |
Siehe auch
Konzeptionelle
Referenz-