setwindowlong,setwindowlongptr
GetWindowLong()和SetWindowLong()的问题
我给你举个例子八
函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。
函数原型:LONG
GetWindowLong(HWND
hWnd,int
nlndex);
参数:
hWnd:窗口句柄及间接给出的窗口所属的窗口类。
nlndex:指定要检索的基于0的的偏移量。有效值的范围从0到窗口额外内存空间的字节数,最小为4。例如,若指定了12位或多于12位的窗体类的额外存储空间,则应设为第三个32位整数的索引位8。要获得任意其他值,指定下列值之一:
GWL_EXSTYLE;获得扩展窗口风格。
GWL_STYLE:获得窗口风格。
GWL_WNDPROC:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用GWL_WNDPROC函数调用窗口过程。
GWL_HINSTANCE:获得应用事例的句柄。
GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。
GWL_ID:获得窗口标识。
GWL_USERDATA:获得与窗口有关的32位值。每一个窗口均有一个与这个窗口相关的给用户使用的32位的数据。具体用途自定义。
在hWnd参数标识了一个对话框时也可用下列值:
DWL_DLGPROC:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。
DWL_MSGRESULT:获得在对话框过程中一个消息处理的返回值。
DWL_USER:获得应用程序私有的额外信息,例如一个句柄或指针。
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得更多错误信息请调用
GetLastError函数。
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为一个非0值来保留额外类的存储空间。
Windows
CE:nlndex参数指定的字节偏移量必须为
4的倍数。不支持
unaligmned
access。
Windows
CE:不支持在参数nlndex中设定的GWL_HINSTANCE和GWL_HWNDPARENT。
Windows
CE1.0也不支持在
nlndex参数中的
DWL_DLGPROC和
GWL_USERDATA。
速查:Windows
NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0对以上版本;头文件:winuser.h;库文件:user32.lib;在Windows
NT上实现为Unicode和ANSI两种版本。
答案补充
函数原型
LONG
SetWindowLong(hwnd,nIndex,lNewLong)
HWND
hwnd;
/*
handle
of
window
*/
int
nIndex;
/*
offset
of
value
to
set
*/
LONG
lNewLong;
/*
new
value
*/
函数说明
SetWindowLong函数修改给定窗口的一个属性。该函数还在给定窗口的附加窗口内存中
的指定偏移量处设置一个32位(长)值。
参数详解
hwnd
标识窗口,并且间接标只出该窗口的属的窗口类。
nIndex
指定一个距离要设置的值的以0为基值的偏移量。有效的偏移量范围最小为0,最大为附
加窗口内存的总字节数减为4,注:整数为四个字节;例如:若附加内存被指定为12个或
更多个字节,值8将是第3个长整数的索引值。要设置其它值,则应指定下列值之一:
值
动
作
答案补充
GWL_EXSTYLE
设置新的扩展窗口风格。
GWL_STYLE
设置新的窗口风格
GWL_WNDPROC
为窗口过程设置新地址。
GWL_HINSTANCE
设置一个新的应用程序的实例句柄。
GWL_ID
设置一人新的窗口标识符。
GWL_USERDATA
设置与窗口相联系的长值。每个窗口都有一个供创建它的应用
程序使用的与之对应的长值。
当hwnd标识一个对话框时,还可使用下列值:
值
含
义
DWL_DLGPROC
设置对话框过程的新地址。
DWL_MSGRESULT
设置对话框过程所处理的消息的返回值。
DWL_USER
设置对应用程序来说是私有的新的附加信息:如句柄或打印机
。
lNewLong
指定该替换值。
返回值
若函数成功,返回值是指定的32位整数的原值;否则,返回值为0。使用GetLastError
函数可获取补充的错误信息。
答案补充
注释
若使用SetWindowLong函数和GWL_WNDPROC索引替换窗口过程,则给定的窗口过程必须遵
循WindowProc回调函数的说明中指定的准则。
使用GWL_WNDPROC索引调用SetWindowLong函数可创建该窗口类的子类(窗口类用来创建窗
口)。应用程序不得用另一个过程的窗口产生子类。
使用RegisterClass函数,并将WNDCLASS结构的cbWndExtra成员指定为一个非零值,便可
保留附加窗口内存。
不得将SetWindowLong与GWL_HWNDPARENT索引一起使用来改变一个子窗口的父窗口。要
改变子窗口的父窗口,应使用SetParent函数。
VC++ SetWindowLong/GetWindowLong函数疑问
SetWindowLong(this-GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this-GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
原始函数如下所示
LONG
SetWindowLong(
HWND
hWnd,
当前窗口的句柄
int
nIndex,
包含:[GWL_EXSTYLE,GWL_STYLE,GWL_WNDPROC,GWL_HINSTANCE
,GWL_ID,GWL_USERDATA]
0x80000是这些里面其中的一个的十六进行显示
LONG
dwNewLong
新的窗口显示值
);
更详细的内容你可以去查一下MSDN
setwindowlong 返回1413
错误是:
ERROR_INVALID_INDEX 1413 (0x585) Invalid index.
setwindowlong的第二个参数只能是这些值:
nIndex [in] intSpecifies the zero-based offset to the value to be set. Valid values are in the range zero through the number of bytes of extra window memory, minus the size of an integer. To set any other value, specify one of the following values. GWL_EXSTYLESets a new extended window style. For more information, see CreateWindowEx. GWL_STYLESets a new window style.GWL_WNDPROCSets a new address for the window procedure. You cannot change this attribute if the window does not belong to the same process as the calling thread.GWL_HINSTANCESets a new application instance handle.GWL_IDSets a new identifier of the window.GWL_USERDATASets the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero.The following values are also available when the hWnd parameter identifies a dialog box.DWL_DLGPROCSets the new address of the dialog box procedure.DWL_MSGRESULTSets the return value of a message processed in the dialog box procedure.DWL_USERSets new extra information that is private to the application, such as handles or pointers./dd
你检查下你那个FIGWL_SVRWND是怎么定义的