CallWindowProc与setwindowlong 用法

6 篇文章 1 订阅

该函数CallWindowProc将消息信息传送给指定的窗口过程。

    函数原型:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND hWnd.UINT Msg,WPARAM wParam,LPARAMIParam);

    参数:

    lpPrevWndFunc:参数主要是指向你要调用的函数句柄

    hWnd:指向接收消息的窗口过程的句柄。

    Msg:指定消息类型。

    wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。

    IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。

    返回值:返回值指定了消息处理结果,它与发送的消息有关。

    备注:使用函数CallWindowsProc可进行窗口子分类。通常来说,同一类的所有窗口共享一个窗口过程。子类是一个窗口或者相同类的一套窗口,在其消息被传送到该类的窗口过程之前,这些消息是由另一个窗口过程进行解释和处理的。

    SetWindowLoog函数通过改变与特定窗口相关的窗日过程,使系统调用新的窗口过程来创建子类,新的窗口过程替换了以前的窗口过程。应用程序必须通过调用CallWindowsProc来将新窗日过程没有处理的任何消息传送到以前的窗口过程中,这样就允许应用程序创建一系列窗口过程。

 

SetWindowLong() 函数

VB声明
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
说明
在窗口结构中为指定的窗口设置信息
返回值
Long,指定数据的前一个值
参数表
参数 类型及说明
hwnd Long,欲为其取得信息的窗口的句柄
nIndex Long,请参考GetWindowLong函数的nIndex参数的说明
dwNewLong Long,由nIndex指定的窗口信息的新值

 

GetWindowLong ()函数

VB声明
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
说明
从指定窗口的结构中取得信息
返回值
Long,由nIndex决定。零表示出错。会设置GetLastError
参数表
参数 类型及说明
hwnd Long,欲为其获取信息的窗口的句柄
nIndex Long,欲取回的信息,可以是下述任何一个常数:
GWL_EXSTYLE 扩展窗口样式
GWL_STYLE 窗口样式
GWL_WNDPROC 该窗口的窗口函数的地址
GWL_HINSTANCE 拥有窗口的实例的句柄
GWL_HWNDPARENT 该窗口之父的句柄。不要用SetWindowWord来改变这个值
GWL_ID 对话框中一个子窗口的标识符
GWL_USERDATA 含义由应用程序规定
DWL_DLGPROC 这个窗口的对话框函数地址
DWL_MSGRESULT 在对话框函数中处理的一条消息返回的值
DWL_USER 含义由应用程序规定

 

 

WindowProc是个窗口过程,其返回值是由系统处理的,应用程序中是不用也无法处理的。
Public   Sub   Hook(hWnd   As   Long)  
  lngHWnd=hWnd  
  lpPrevWndProc   =   SetWindowLong(lngHWnd,  
  GWL_WNDPROC,   AddressOf   WindowProc)  
End   Sub  
调用这个挂钩函数后,当有消息到窗口后,有系统调用WindowProc函数处理消息,由系统调用的函数返回值当然由系统处理

 

 

Function   WindowProc(ByVal   hw   As  
Long,   ByVal   uMsg   As   Long,   _  
    ByVal   wParam   As   Long,   ByVal  
    lParam   As   Long)   As   Long  
    Select   Case   uMsg  
检测鼠标击键消息,如果是单击右键  
    Case   WM_RBUTTONUP  
        什么事也不做  
      或弹出自己定制的菜单  
    Case   Else  
    WindowProc   =   CallWindowProc(lpPrevWndProc,  
hw,   uMsg,   wParam,   lParam)  
    End   Select  
End   Function  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值