GetWindowLong和 SetWindowLong用法参数区别

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,参数是你自定义的回调函数

参数

编辑

hWnd
窗口句柄及间接给出的窗口所属的类。
nlndex
指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数减4:例如若指定了12或多于12个字节的额外窗口存储空间,则应设索引位8来访问第三个4字节,同样设置0访问第一个4字节,4访问第二个4字节。要设置其他任何值,可以指定下面值之一:
常量
常量值
意义
GWL_EXSTYLE
-20
设定一个新的扩展风格。
GWL_HINSTANCE
-6
设置一个新的应用程序实例句柄。
GWL_ID
-12
设置一个新的窗口标识符
GWL_STYLE
-16
设定一个新的窗口风格。
GWL_USERDATA
-21
设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。
GWL_WNDPROC
-4
为窗口设定一个新的处理函数。
GWL_HWNDPARENT -8 改变子窗口的父窗口,应使用SetParent函数。
当hWnd参数标识了一个对话框时,也可使用下列值:
常量
常量值
意义
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT) (值:4)
设置对话框过程的新地址。
DWL_MSGRESULT
0
设置在对话框过程中处理的消息的返回值
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC) (值:8)
设置的应用程序私有的新的额外信息,例如一个句柄或指针
dwNewLong
指定的替换值。
dwNewLong中可以使用以下一些列表控件的专用风格:
LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT
这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:
大图标显示,小图标显示,列表显示,详细报表显示
LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
LVS_SINGLESEL 同时只能选中列表中一项 [1]

返回值

编辑

如果函数成功,返回值是指定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
如果指定32位整数的原来的值为0,并且函数成功,则返回值为0,但是函数并不清除最后的错误信息,这就很难判断函数是否成功。这时,就应在调用SetWindowLong之前调用SetLastError(0)函数来清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError。也返回一个非零值。

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

若指定值大于0,返回窗口内存中指定偏移量的32位值。
也可指定以下值来获得其它数据:
宏定义 常量 描述
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函数调用获取的窗口过程。
hWnd参数为对话框句柄时,还可用下列值:
宏定义 常量 描述
DWL_DLGPROC
4 获取对话框过程地址或句柄。必须使用CallWindowProc函数来调用对话框过程。
DWL_MSGRESULT
0 获取在对话框过程中某消息的返回值
DWL_USER
8 获取应用程序专用的额外信息,例如一个句柄指针

返回值

如果函数成功,返回值是所需的32位整型值;
如果函数失败,返回值是0。获得更多错误信息请调用 GetLastError

所以可以先GetWindowLong获得老的窗口处理函数,然后通过SetWindowLong在拦截消息后,再发给老处理函数处理。


发布日期:

所属分类: 编程 标签:   


没有相关文章!