共用方式為


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_WNDPROCDWL_DLGPROC,它實際上就是視窗或對話框程式的位址,或是只 CallWindowProc有意義的特殊內部值。

[in] hWnd

類型:HWND

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

[in] Msg

類型:UINT

訊息。

[in] wParam

類型:WPARAM

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

[in] lParam

類型:LPARAM

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

傳回值

類型:LRESULT

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

言論

使用 CallWindowProc 函式進行視窗子類別化。 通常,具有相同類別的所有視窗都會共用一個視窗程式。 子類別是具有相同類別的視窗或視窗集合,其訊息會在傳遞至 類別的視窗程式之前,由另一個視窗程式(或程式)攔截並處理。

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

如果定義 STRICTlpPrevWndFunc 參數的數據類型 WNDPROCWNDPROC 類型宣告如下:

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

如果未定義 STRICTlpPrevWndFunc 參數的數據類型 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 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 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

視窗程式