CallWindowProcW 函式 (winuser.h)

將訊息資訊傳遞至指定的視窗程式。

語法

LRESULT CallWindowProcW(
  [in] WNDPROC lpPrevWndFunc,
  [in] HWND    hWnd,
  [in] UINT    Msg,
  [in] WPARAM  wParam,
  [in] LPARAM  lParam
);

參數

[in] lpPrevWndFunc

類型: WNDPROC

上一個視窗程式。 如果呼叫 GetWindowLong 函式並將 nIndex 參數設定為 GWL_WNDPROCDWL_DLGPROC 來取得這個值,則實際上是視窗或對話框程式的位址,或只對 CallWindowProc 有意義的特殊內部值。

[in] hWnd

類型: HWND

接收訊息之視窗程式的句柄。

[in] Msg

類型: UINT

訊息。

[in] wParam

類型: WPARAM

其他特定訊息資訊。 此參數的內容取決於 Msg 參數的值。

[in] lParam

類型: LPARAM

其他特定訊息資訊。 此參數的內容取決於 Msg 參數的值。

傳回值

類型: LRESULT

傳回值會指定訊息處理的結果,並取決於傳送的訊息。

備註

使用 CallWindowProc 函式進行視窗子類別化。 通常,具有相同類別的所有視窗都會共用一個視窗程式。 子類別是一組視窗或一組具有相同類別的視窗,其訊息會由另一個視窗程式 (或程式) 處理,然後再傳遞至類別的視窗程式。

SetWindowLong 函式會藉由變更與特定視窗相關聯的視窗程式來建立子類別,導致系統呼叫新的視窗程式,而不是先前的程式。 應用程式必須呼叫 CallWindowProc,將新視窗程式未處理的任何訊息傳遞至先前的視窗程式。 這可讓應用程式建立視窗程序的鏈結。

如果已定義 STRICT則 lpPrevWndFunc 參數具有數據類型 WNDPROCWNDPROC 類型宣告如下:

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

如果未定義 STRICT則 lpPrevWndFunc 參數具有 數據類型 FARPROCFARPROC 類型宣告如下:

int (FAR WINAPI * FARPROC) () 

在 C 中, FARPROC 宣告表示具有未指定參數清單的回呼函式。 不過,在 C++ 中,宣告中的空白參數清單表示函式沒有參數。 這種細微的差異可能會中斷不小心的程序代碼。 以下是處理這種情況的其中一種方式:

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

如需使用空自變數清單宣告之函式的進一步資訊,請參閱 Bjarne Stroustrup 的 C++ 程式設計語言第二版

CallWindowProc 函式會處理 Unicode 到 ANSI 轉換。 如果您直接呼叫視窗程式,就無法利用此轉換。

範例

如需範例,請參閱 子類別化視窗

注意

winuser.h 標頭會將 CallWindowProc 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winuser.h (包含 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-window-l1-1-4 (Windows 10 10.0.14393 版)

另請參閱

概念

GetWindowLong

參考

SetClassLong

SetWindowLong

視窗程式