SetWindowLong函数总结

原创 2012年03月30日 13:08:30

在网上搜了一下这个函数的用法,在此汇总一下!


注册窗口类时可以指定“每窗口额外内存” 

这段内存可以通过Get(Set)WindowLong   来访问 
SetWindowLong   的   nIndex   参数如果不小于0 
那么就是访问这段内存, 
这段内存存放什么东西都可以 
如果   nIndex   小于零 
那就是访问窗口的数据结构 

其实这是另外一个不同的功能

*********************************************************************

参数   类型 说明   
hwnd   Long 欲为其取得信息的窗口的句柄   
nIndex   Long * 
dwNewLong   Long 由nIndex指定的窗口信息的新值   


nIndex Long 欲取回的信息,可以是下述任何一个常数:   
GWL_EXSTYLE 扩展窗口样式   
GWL_STYLE                   窗口样式   
GWL_WNDPROC 该窗口的窗口函数的地址   
GWL_HINSTANCE 拥有窗口的实例的句柄   
GWL_HWNDPARENT 该窗口之父的句柄。不要用SetWindowWord来改变这个值   
GWL_ID 对话框中一个子窗口的标识符   
GWL_USERDATA 含义由应用程序规定   
DWL_DLGPROC 这个窗口的对话框函数地址   
DWL_MSGRESULT 在对话框函数中处理的一条消息返回的值   
DWL_USER  

********************************************************************************************

你可以将窗口附加字节看作一个字节数组,
假设wndClass.cbWndExtra=16; 这时系统分配了一块16字节的空间供窗口使用.
你可以将它看作是BYTE bData[16];或LONG nData[4];

SetWindowLong中的第二个0指的是 bData[0], 一次取4个字节

SetWindowLong(hWnd, 0, 0); 相当于设置nData[0]=0;

*******************************************************************************************

每一个hwnd都可能有一些和应用程序有关的数据。比如说,你可以给每一个窗口起一个名字。现在你希望得到窗口之后就知道它的名字。现在有两种办法,首先,你可以建立一全局变量表,里边有每一个hwnd和它的名字,然后每得到一个hwnd之后在这个表里边查找。这是一种和麻烦的办法。 
现在Windows位我们提供了userdata这个东西,那么我们可以把名字存在hwnd的userdata里边。这样可以实现一种“数据携带”。 
不过如果你要设计一个可以重用的窗口类,那么建议不要使用userdata,因为类的使用者可能使用userdata。比如你是标准button的编写者,那么鉴于其他的编程人员要大量的使用button,那么你不应该实用userdata,因为其它的编程人员也需要存取一些数据。这时候你应该实用附加的窗口字节。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

SetWindowLong()用于改变一个窗口的属性。 
属性包括窗口的样式、扩展样式、窗口函数、窗口的ID值、窗口所在的进程的句柄、和用户自定义的一个USER   DATA(也就是WNDCLASS结构里的cbWndExtra,通常为0,   其实没有多大的作用)。 
至于改变的是何种属性就由该API的第二个参数nIndex决定,譬如GWL_STYLE就代表要修改的是窗口的样式,具体的样式标致由第三个参数dwNewLong指出。 

SetWindowLong 用法

我们这里主要讲两点用法,一:如何修改窗体样式;二、如何使用GWL_USERDATA保存值; 一:修改窗体样式 先贴出一段可行的,去掉窗体标题栏的代码: [cpp] view ...
  • qing666888
  • qing666888
  • 2015年11月06日 14:45
  • 737

SetWindowLong 用法总结

转载地址:http://blog.csdn.net/firehood_/article/details/6167085 SetWindowLong 函数原型为:LONG SetWindowLong...
  • lijun5635
  • lijun5635
  • 2016年03月25日 16:34
  • 864

GetWindowLong() 和 SetWindowLong()

GetWindowLong()和SetWindowLong()的用法   SetWindowLong  函数功能:该函数改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的...
  • QDseashore
  • QDseashore
  • 2015年08月05日 13:53
  • 1936

SetWindowLong 用法总结

SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Long dwNewLong);详见MSDN。下面简单总结一下SetWindow...
  • feihu521a
  • feihu521a
  • 2011年01月27日 18:03
  • 17661

一种hook --- SetWindowLong函数修改窗口处理过程

LONG OldWndProc = 0; LRESULT CALLBACK WindowProc2( HWND hwnd, // handle to window UINT ...
  • liujiayu2
  • liujiayu2
  • 2016年08月02日 00:28
  • 2016

SetWindowLong 用法

我们这里主要讲两点用法,一:如何修改窗体样式;二、如何使用GWL_USERDATA保存值; 一:修改窗体样式 先贴出一段可行的,去掉窗体标题栏的代码: LONG styleValue = ::Ge...
  • harvic880925
  • harvic880925
  • 2013年08月07日 10:35
  • 14478

setwindowLong函数

设置窗口或者控件的透明度  例子参考: LRESULT CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, ...
  • ASSYIRAN
  • ASSYIRAN
  • 2017年05月14日 20:08
  • 177

SetWindowLong函数总结 .

转至:http://blog.csdn.net/zwb8848happy/article/details/7410904 注册窗口类时可以指定“每窗口额外内存”,这段内存可以通过Get(Set)Wi...
  • zhouxiangbai
  • zhouxiangbai
  • 2012年08月08日 15:38
  • 429

SetWindowLong函数介绍

SetWindowLong函数介绍SetWindowLong Unicode  函数原型  LONG SetWindowLong(hwnd,nIndex,lNewLong)  HWND hwnd; ...
  • todototry
  • todototry
  • 2006年11月09日 09:26
  • 15623

回调函数(CALLBACK)学习总结

回调函数应该和设计相关而不是和语言相关。 在分层设计中,高层次的模块会叫低层次的模块做一些事情,通常是通过函数调用。  从设计上来说,低层次的模块不应该直接调用高层次模块的函数。 所以高层次模块...
  • junli_chen
  • junli_chen
  • 2016年10月13日 12:54
  • 1703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SetWindowLong函数总结
举报原因:
原因补充:

(最多只允许输入30个字)