SetWindowLong函数原型
LONG SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong );
是用来改变和设置窗口的一些属性的,第一个参数是你窗口的句柄,第二个就是你要修改的东东 例如要修改过程处理函数 就用参数 GWL_WNDPROC 而最后一个参数就是你自己定义的过程函数的名字 但是一定要注意那个是长整形的一个类型所以要强制转化 他返回的也是一个长整形 如果你定义的是一个WNDPROC的指针 这个返回的地方同样也需要强制转化类型
其中nInde可以取:
GWL_EXSTYLE: 设置窗口扩展风格,即CreateWindowEx的DWORD wExStyle 参数 GWL_STYLE: 设置窗口风格,即CreateWindow的DWORD dwStyle参数 GWL_WNDPROC: 设置窗口的处理函数,即RegisterClass的WNDCLASSEX的WNDPROC lpfnWndProc成员 GWL_HINSTANCE: 设置窗口所属的应用程序句柄,即RegisterClass的WNDCLASSEX的HINSTANCE hInstance成员 GWL_ID 设置窗口的ID(对于控件,就是控件ID) GWL_USERDATA: 设置窗口的用户自定义数据 DWL_DLGPROC: 设置对话框处理函数 DWL_MSGRESULT: 设置对话框消息处理的结果值 DWL_USER: 设置扩展区域数据
GWL_WNDPROC -4 为窗口过程设定一个新的地址。
你这里是要修改原窗口的回调函数,所以指定的类型为GWL_WNDPROC,参数是你自定义的回调函数
参数
|
常量
|
常量值 |
意义
|
|---|---|---|
|
GWL_EXSTYLE
|
-20 |
设定一个新的扩展风格。
|
|
GWL_HINSTANCE
|
-6 |
设置一个新的应用程序实例句柄。
|
|
GWL_ID
|
-12 |
设置一个新的窗口标识符。
|
|
GWL_STYLE
|
-16 |
设定一个新的窗口风格。
|
|
GWL_USERDATA
|
-21 |
设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。
|
|
GWL_WNDPROC
|
-4 |
为窗口设定一个新的处理函数。
|
| GWL_HWNDPARENT | -8 | 改变子窗口的父窗口,应使用SetParent函数。 |
|
常量
|
常量值 |
意义
|
|---|---|---|
|
DWL_DLGPROC
|
DWLP_MSGRESULT + sizeof(LRESULT) (值:4) |
设置对话框过程的新地址。
|
|
DWL_MSGRESULT
|
0 |
设置在对话框过程中处理的消息的返回值。
|
|
DWL_USER
|
DWLP_DLGPROC + sizeof(DLGPROC) (值:8) |
设置的应用程序私有的新的额外信息,例如一个句柄或指针。
|
返回值
GetWindowLong函数
GetWindowLong是一个Windows API函数。该函数获得指定窗口的有关信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。
LONG GetWindowLong( HWND hWnd,int nIndex ) 参数: hWnd:指定窗口的句柄 nIndex:需要获得的信息的类型
nIndex取值如下: GWL_EXSTYLE 得到扩展的窗口风格 GWL_STYLE 得到窗口风格 GWL_WNDPROC 得到窗口回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用 GWL_HINSTANCE 得到应用程序运行实例的句柄 GWL_HWNDPARENT 得到父窗口的句柄 GWL_ID 得到窗口的标识符 GWL_USERDATA 得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位 的值) 当hWnd标识一个对话框时可以使用下面的值 Value Action DWL_DLGPROC 得到对话框回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用 DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值 DWL_USER 得到额外的应用程序私有信息,如一些句柄和指针等 返回值: 成功时,返回一个请求的32位的值 失败时,返回0,可以使用GetLastError来取得错误信息
注意:
/* * Window field offsets for GetWindowLong() */ #define GWL_WNDPROC (-4) #define GWL_HINSTANCE (-6) #define GWL_HWNDPARENT (-8) #define GWL_STYLE (-16) #define GWL_EXSTYLE (-20) #define GWL_USERDATA (-21) #define GWL_ID (-12) /* * Get/SetWindowWord/Long offsets for use with WC_DIALOG windows */ #define DWL_MSGRESULT 0 #define DWL_DLGPROC 4 #define DWL_USER 8 ---------------------
GWL_WNDPROC (-4) 获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用CallWindowProc函数调用窗口过程。
参数
hWnd
nlndex
| 宏定义 | 常量 | 描述 |
|---|---|---|
|
GWL_EXSTYLE
|
-20 | 获取扩展窗口样式 |
|
GWL_HINSTANCE
|
-6 | 获取应用实例句柄 |
|
GWL_HWNDPARENT
|
-8 | 获取所有者窗口句柄 |
|
GWL_ID
|
-12 | 获取窗口ID |
|
GWL_STYLE
|
-16 | 获得窗口样式 |
|
GWL_USERDATA
|
-21 | 获取用户设置的32位数据,其值默认为0 |
|
GWL_WNDPROC
|
-4 | 获取窗口过程地址或句柄。必须使用CallWindowProc函数调用获取的窗口过程。 |
| 宏定义 | 常量 | 描述 |
|---|---|---|
|
DWL_DLGPROC
|
4 | 获取对话框过程地址或句柄。必须使用CallWindowProc函数来调用对话框过程。 |
|
DWL_MSGRESULT
|
0 | 获取在对话框过程中某消息的返回值。 |
|
DWL_USER
|
8 | 获取应用程序专用的额外信息,例如一个句柄或指针。 |
返回值
所以可以先GetWindowLong获得老的窗口处理函数,然后通过SetWindowLong在拦截消息后,再发给老处理函数处理。
所属分类: 编程
相关文章:
▪ 易语言多线程大漠多线程-35大漠多线程模板-5多线程启动2019-03-23
▪ 易语言 API之进程和线程函数2017-04-10
▪ 第三课511遇见易语言免注册调用大漠插件dm.dll2017-03-31
▪ 511遇见易语言软件本地注册验证-17-机器特征字_QQ_限制时间_反算2018-12-07
▪ 易语言应用接口支持库MySql支持库增加记录2020-07-23
▪ 易语言PathIsPrefixA径文本串是否归属指定盘符2020-06-21
▪ 汇编语言PC机键盘的处理过程2021-01-27
▪ 易语言API HooK CreateThread创建线程2020-05-10
▪ 易语言应用接口支持库系统处理取CPU信息2020-07-19
▪ 易语言乐玩插件FindMultiColor找色多点及找色块2019-07-27
