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_WNDPROC 或 DWL_DLGPROC 來取得這個值,則實際上是視窗或對話框程式的位址,或只對 CallWindowProc 有意義的特殊內部值。
[in] hWnd
類型: HWND
接收訊息之視窗程式的句柄。
[in] Msg
類型: UINT
訊息。
[in] wParam
類型: WPARAM
其他特定訊息資訊。 此參數的內容取決於 Msg 參數的值。
[in] lParam
類型: LPARAM
其他特定訊息資訊。 此參數的內容取決於 Msg 參數的值。
傳回值
類型: LRESULT
傳回值會指定訊息處理的結果,並取決於傳送的訊息。
備註
使用 CallWindowProc 函式進行視窗子類別化。 通常,具有相同類別的所有視窗都會共用一個視窗程式。 子類別是一組視窗或一組具有相同類別的視窗,其訊息會由另一個視窗程式 (或程式) 處理,然後再傳遞至類別的視窗程式。
SetWindowLong 函式會藉由變更與特定視窗相關聯的視窗程式來建立子類別,導致系統呼叫新的視窗程式,而不是先前的程式。 應用程式必須呼叫 CallWindowProc,將新視窗程式未處理的任何訊息傳遞至先前的視窗程式。 這可讓應用程式建立視窗程序的鏈結。
如果已定義 STRICT , 則 lpPrevWndFunc 參數具有數據類型 WNDPROC。 WNDPROC 類型宣告如下:
LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM);
如果未定義 STRICT , 則 lpPrevWndFunc 參數具有 數據類型 FARPROC。 FARPROC 類型宣告如下:
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 版) |
另請參閱
概念
參考