CallWindowProcW-Funktion (winuser.h)

Übergibt Nachrichteninformationen an die angegebene Fensterprozedur.

Syntax

LRESULT CallWindowProcW(
  [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 abgerufen wird, wobei der nIndex-Parameter auf GWL_WNDPROC oder DWL_DLGPROC festgelegt ist, handelt es sich tatsächlich entweder um die Adresse einer Fenster- oder Dialogfeldprozedur oder um einen speziellen internen Wert, der nur für CallWindowProc von Bedeutung ist.

[in] hWnd

Typ: HWND

Ein Handle für die Fensterprozedur, um die Nachricht zu empfangen.

[in] Msg

Typ: UINT

Die Meldung.

[in] wParam

Typ: WPARAM

Zusätzliche meldungsspezifische Informationen. Der Inhalt dieses Parameters hängt vom Wert des Msg-Parameters ab.

[in] lParam

Typ: LPARAM

Zusätzliche meldungsspezifische 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.

Hinweise

Verwenden Sie die CallWindowProc-Funktion für die Fensterunterklasse. In der Regel teilen sich 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 sie die einem bestimmten Fenster zugeordnete Fensterprozedur ändert, wodurch das System die neue Fensterprozedur anstelle der vorherigen aufruft. Eine Anwendung muss alle Nachrichten, die nicht von der neuen Fensterprozedur verarbeitet wurden, durch Aufrufen von CallWindowProc an die vorherige Fensterprozedur übergeben. Dadurch kann die Anwendung eine Kette von Fensterprozeduren erstellen.

Wenn STRICT definiert ist, weist der parameter lpPrevWndFunc den Datentyp WNDPROC auf. Der WNDPROC-Typ wird wie folgt deklariert:

LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM); 

Wenn STRICT nicht definiert ist, weist der parameter lpPrevWndFunc den Datentyp FARPROC auf. Der FARPROC-Typ wird wie folgt deklariert:

int (FAR WINAPI * FARPROC) () 

In C gibt die FARPROC-Deklaration eine Rückruffunktion an, die über eine nicht angegebene Parameterliste verfügt. In C++ gibt die leere Parameterliste in der Deklaration jedoch an, dass eine Funktion über keine Parameter verfügt. Diese subtile Unterscheidung kann unvorsichtigen Code unterbrechen. Dies ist eine Möglichkeit, diese Situation zu bewältigen:

#ifdef STRICT 
  WNDPROC MyWindowProcedure 
#else 
  FARPROC MyWindowProcedure 
#endif 
... 
  lResult = CallWindowProc(MyWindowProcedure, ...) ; 

Weitere Informationen zu Funktionen, die mit leeren Argumentlisten deklariert werden, finden Sie unter The C++ Programming Language, Second Edition, von Bjarne Stroustrup.

Die CallWindowProc-Funktion verarbeitet die Unicode-in-ANSI-Konvertierung. Sie können diese Konvertierung nicht nutzen, wenn Sie die Fensterprozedur direkt aufrufen.

Beispiele

Ein Beispiel finden Sie unter Unterklassen eines Fensters.

Hinweis

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
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-window-l1-1-4 (eingeführt in Windows 10, Version 10.0.14393)

Siehe auch

Konzept

GetWindowLong

Referenz

SetClassLong

SetWindowLong

Fensterprozeduren