CallWindowProcA 函式 (winuser.h)
將訊息資訊傳遞至指定的視窗程式。
語法
LRESULT CallWindowProcA(
[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 所
CallWindowProc 函式會處理 Unicode 對 ANSI 轉換。 如果您直接呼叫視窗程式,則無法利用此轉換。
例子
如需範例,請參閱 子類別化視窗
注意
winuser.h 標頭會將 CallWindowProc 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | winuser.h (包括 Windows.h) |
連結庫 | User32.lib |
DLL | User32.dll |
API 集 | ext-ms-win-ntuser-window-l1-1-4 (在 Windows 10 版本 10.0.14393 中引進) |
另請參閱
概念
參考