关于SetWindowLong函数

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

SetWindowLong 函数
SetWindowLong 函数 改变一个指定窗口的属性。这个函数还在窗口的附加内存中以指定的偏移量设置一个32位的值。
提示:
这个函数已经被SetWindowLongPtr 函数所取代。想写兼容32位和64位windows系统的程序,请使用SetWindowLongPtr函数。
语法:
LONG SetWindowLong( HWND hWnd,
    int nIndex,
    LONG dwNewLong
);
参数:
hWnd
一个窗口句柄,间接来说,也可当成是窗口所属的窗口类。
Windows 95/98/Me:如果指定的窗口句柄和呼叫线程不属于同一个进程,这个函数可能出错。
nIndex
为被将要被设定的值指定一个从0开始的偏移量,有效值得范围为从0到附加窗口内存的字节数减去一个int型所占字节数。想要设定其他值,请指定下面列出的值:
GWL_EXSTYLE
设定一个扩展窗口样式,更多信息请参看CreateWindowEx
GWL_STYLE
设定一个新的窗口样式

GWL_WNDPROC
设定一个新的窗口过程地址。
Windows NT/2000/XP: 如果窗口和呼叫线程不属于同一个进程,这个属性不能更改。
GWL_HINSTANCE
设置一个新的应用程序实例句柄
GWL_ID
设置一个新窗口标志符
GWL_USERDATA
设置和窗口相关的用户数据,这个数据被应用程序用来创建窗口,他的值被初始化为0.

下面的取值在窗口句柄指向对话框的时候是可用的
DWL_DLGPROC
设置一个新的对话框过程的地址
DWL_MSGRESULT
设置对话框过程处理一条消息后的返回值
DWL_USER
给应用程序设置私有的附加信息,比如:句柄或指针


dwNewLong
指定替代值

返回值:
如果函数调用成功,那么返回值是前面指定的32位整数的值。
如果调用失败,返回值是0.可以调用GetLastError来得到更多的出错信息。
如果先前指定的32位整数的值是0,并且函数调用成功,那么返回值也是0,但是函数调用期间并不会清空以前的出错信息,这就造成很难判断到底是否调用成功。为了应对这种情况,应该在呼叫SetWindowLong之前先呼叫SetLastError(0),这样以来,就可以通过GetLastError的返回值是否为0来判断SetWindowLong调用是否成功。

讨论(remarks)
如果某个窗口的数据是在缓存中,那么你通过调用SetWindowLong在你调用SetWindowPos之前不会起作用。特别的,如果你改变了框架的任何某个样式的话,那你必须调用SetWindowPos,且使用SWP_FRAMECHANGED标志符,来确保缓存被正确的更新。
如果你调用SetWindowLong时使用DWL_WNDPROC索引号来更替窗口过程,那么这个窗口过程必须符合WindowProc回叫函数的准则。
如果你调用SetWindowLong时使用了DWL_MSGRESULT索引号来设置一个对话框过程处理一条消息的返回值,你在这之后直接应该返回一个真值,否则,如果你调用任何一个会使你的对话框过程收到一条windows消息的函数,嵌套的window消息会覆写你通过DWL_MSGRESULT设定的返回值。

呼叫SetWindowLong时使用GWL_WNDPROC索引号会创建一个窗口类的子类。一个应用程序可以子类化一个系统的类,但却不能将一个其它过程创建的窗口类子类化。SetWindowLong创建了一个窗口子类,这是通过改变与一个特定的窗口类相关的窗口过程来实现的,这样做会导致系统去调用新的窗口过程而不是先前的那个。一个应用程序必须把任何不被新窗口过程处理的消息交给先前的那个窗口过程来处理(通过调用CallWindowProc),这样就使得应用程序能创建一条窗口过程的链条。
分配窗口附加内存,请设定WNDCLASSEX结构体的cbWndExtra成员的值。这要调用RegisterClassEx函数来实现。
你不能调用SetWindowLong(GWL_HWNDPARENT)来改变一个字窗口的父窗口,而应该使用SetParent函数。
如果一个窗口的窗口类别中有CS_CLASSDC或者CS_OWNDC,那么请不要把窗口的扩展样式设置成WS_EX_COMPOSITED 或 WS_EX_LAYERED。

Windows API函数SetWindowLong SetWindowLong()用于改变一个窗口的属性。 LONG SetWindowLong( HWND hWnd, //handle to window(窗口句柄) int nlndex, //offset of value to set(改变窗口上的何种属性) LONG dwNewLong // new value(指定该属性为一个新的具体样式) ); 窗口属性包括窗口的样式(GWL_STYLE)、扩展... 阅读详情

相关推荐

SetWindowLong和SetWindowPos函数详解

一个应用程序可以一个系统美为于类,但是不能以一个其他进程产生的窗口类为子类,SetwindowLong函数通过改变与一个特殊的窗口类相联系的窗口过程来创建窗口子类,从而使系统调用新的窗口过程而不是以前定义的窗口过程。Windows CE:如果这是一个可见的顶层窗口,并且未指定SWP_NOACTIVATE标志,则这个函数将激活窗口、如果这是当前的激活窗口,并且指定了SWP_NOACTIVATE或SWP_HIDEWINDOW标志,则激活另外一个可见的顶层窗口。SWP_NOACTIVATE:不激活窗口。

m0_37346206的博客 4389

Linux 常用基本命令及常用技巧

用户有时的程序有可能要花费很多时间,如果将它放在前台运行,将导致无法继续做其 他事情,最好的方法就是将它放在后台运行,甚至可能希望在用户注销系统后,程序还可以。如果不需要使用光盘或软盘,则需先执行卸载命令之后,才能将光盘或软盘退出。文件,则系统会不间断地询问,以确认您的确要删除目录或文件。可利用任务调度命令,指定系统定期在某个时间运行这些程序,轻轻松松完成想要执行的工。注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达。命令可以关闭所有程序, 依照用户的需要, 重新启动或关机。

AI论道的博客 1万+

SetWindowLong 用法总结

SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Long dwNewLong);详见MSDN。下面简单总结一下SetWindowLong函数几种常用的地方:1.设置窗口风格   如:SetWindowLong(hWnd, GWL_STYLE, WS_POPUP|WS_BORDER);      //有边框的弹出窗口         SetWindowLong(hWnd, GWL_EXSTYLE,  WS_EX_TOOLWINDOW); 

firehood的专栏 2万+

Delphi使用SetWindowLong 修改子窗体属性,实现z轴任意覆盖

今天有个朋友问我一个问题,现在Delphi创建的子窗体默认子窗体只能在主窗体上面,不能被主窗体遮挡,问如何才可以使主窗体获得焦点的时候可遮挡子窗体,本来以为很简单的问题,其实还是需要了解一个函数SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。 原型 LONGSetWindowLong( HWNDhWnd,//handletowindow ...

重楼的博客 914

SetWindowLong函数总结

在网上搜了一下这个函数的用法,在此汇总一下! 注册窗口类时可以指定“每窗口额外内存”  这段内存可以通过Get(Set)WindowLong   来访问  SetWindowLong   的   nIndex   参数如果不小于0  那么就是访问这段内存,  这段内存存放什么东西都可以  如果   nIndex   小于零  那就是访问窗口的数据结构  其实这是另外一个

zwb8848happy的专栏 2万+

SetWindowLong函数介绍

SetWindowLong函数介绍SetWindowLong Unicode  函数原型  LONG SetWindowLong(hwnd,nIndex,lNewLong)  HWND hwnd; /* handle of window */  int nIndex; /* offset of value to set */  LONG lNewLong; /* new value */

todototry的专栏 1万+

MFC SetWindowLong 函数

SetWindowLong The SetWindowLong function changes an attribute of the specified window. The function also sets the 32-bit (long) value at the specified offset into the extra window memory.SetWindowLong函数更改指定窗口的一项属性。该函数还可将指定偏移的32位值设置到附加的窗口内存中。 Note This fun

sty_app的博客 1184

SetWindowLong函数

SetWindowLong函数用来改变指定窗口的属性 LONG WINAPI SetWindowLong( __in HWND hWnd, //指定窗口的句柄,或者间接地,窗口所属的类 __in int nIndex, //指定要设置的属性值的偏移地址 __in LONG dwNewLong //指定设置的新值 ); 参数nIndex的取值如下: GWL_EXSTYLE ...

CherishPrecious的博客 1767

Windows API函数SetWindowLong简析

函数原型1: LONG SetWindowLong( HWND hWnd, //handle to window int nlndex, //offset of value to set LONG dwNewLong // new value ); hWnd: 窗口句柄及间接给出的窗口所属...

m0_37346206的博客 1086

WINDOWS API ——SETWINDOWLONG—— 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon

WINDOWS API ——SETWINDOWLONG—— 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Long dwNewLong);详见MSDN。 下面简单总结一下SetWindowLong函数几种常用的地方: 1.设置窗口风格    如:SetWindowLong(hWnd, G

thanklife的专栏 1439

Windows控件消息函数 - SetWindowLong

VB声明Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long说明在窗口结构中为指定的窗口设置信息返回值

水木清华 982

【win32】SetWindowLong函数介绍

转自:http://blog.csdn.net/todototry/article/details/1374968SetWindowLong Unicode   函数原型  LONG SetWindowLong(hwnd,nIndex,lNewLong)  HWND hwnd; /* handle of window */  int nIndex; /* offset of value to se...

552

SetWindowLong和SetClassLongh函数关于索引GWL_WNDPROC,GCL_WNDPROC的区别

个人看法,如有雷同,纯属巧合!!!SetWindowLong:The SetWindowLong function changes an attribute of the specified window. The function also sets the 32-bit (long) value at the specified offset into the extra window m

coolmousewife的专栏 5813

SetWindowLong函数总结(转载)

在网上搜了一下这个函数的用法,在此汇总一下! 注册窗口类时可以指定“每窗口额外内存” 这段内存可以通过Get(Set)WindowLong 来访问 SetWindowLong 的 nIndex 参数如果不小于0 那么就是访问这段内存, 这段内存存放什么东西都可以 如果 nIndex 小于零 那就是访问窗口的数据结构 其实这是另外一个不同的功能 *****...

yyzhan12ysx的博客 607
上一篇: 来自 delphi-STDIO
下一篇: 转载 关于C++内存 来源:网侠2007
delphicui
博客等级 码龄19年 9粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值