基本介紹
函式原型:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM IParam);
參數
lpPrevWndFunc:指向前一個視窗過程的指針。如果該值是通過調用GetWindowLong函式,並將該函式中的nlndex參數設為GWL_WNDPROC或DWL_DLGPROC而得到的,那么它實際上要么是視窗或者對話框的地址,要么就是代表該地址的句柄。
hWnd:指向接收訊息的視窗過程的句柄。
Msg:指定訊息類型。
wParam:指定其餘的、訊息特定的信息。該參數的內容與Msg參數值有關。
IParam:指定其餘的、訊息特定的信息。該參數的內容與Msg參數值有關。
返回值:返回值指定了訊息處理結果,它與傳送的訊息有關。
備註
使用函式CallWindowsProc可進行視窗子分類。通常來說,同一類的所有視窗共享一個視窗過程。子類是一個視窗或者相同類的一套視窗,在其訊息被傳送到該類的視窗過程之前,這些訊息是由另一個視窗過程進行解釋和處理的。
SetWindowLong函式通過改變與特定視窗相關的視窗過程,使系統調用新的視窗過程來創建子類,新的視窗過程替換了以前的視窗過程。應用程式必須通過調用CallWindowsProc來將新視窗過程沒有處理的任何訊息傳送到以前的視窗過程中,這樣就允許應用程式創建一系列視窗過程。
如果定義了STRICT,那么lpPrevWndFunc參數具有WNDPROC數據類型。WNDPROC類型說明如下:
LRESULT(CALLBACK· WNDPROC)(HWND, UINT,WPARAM,LPARAM)
如果沒有定義STRICT,那么lpPrevWndFunc參數具有FARPROC數據類型。FARPROC類型說明如下:int(FAR WINAPL·FARPROC)()
在C語言中,FARPROC申明表示為一個沒有指定參數表的回調函式。然而在 C++中;申明中的空參數表示該函式沒有參數。這種微妙的區別有可能引起代碼出錯。下面是一種解決辦法:#ifdef STRICT;WNDPROC MyWindowProcedure;#else;FARPROC MyindowProcedure;#endif IResult=CallWindowProc(MyWindowProcedure,…)
有關該函式的空參數表方面進一步的信息,請參考Bjarne Stroustrup編寫的C++程式語言第2版。
對於Windows NT:函式CallWindowsProc function進行了Unicode至ANSf轉換處理。如果你直接調用該視窗過程,那么無法利用該轉換。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;頭檔案:winuser.h;庫檔案:user32.lib:Unicode:在Windows NT環境中以Unicode和ANSI版本實現。