CallWindowProc

 

编辑本段基本介绍

  函数功能:该函数CallWindowProc将消息信息传送给指定的窗口过程。
 
  函数原型: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版本实现。

posted @ 2012-09-25 09:59  笑笑小白  阅读(1873)  评论(0编辑  收藏  举报