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指出。 

GetWindowLong() 和 SetWindowLong()

GetWindowLong()和SetWindowLong()的用法   SetWindowLong  函数功能:该函数改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的...

SetWindowLong 用法

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

SetWindowLong 用法总结

转载地址:http://blog.csdn.net/firehood_/article/details/6167085 SetWindowLong 函数原型为:LONG SetWindowLong...

SetWindowLong 用法总结

SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Long dwNewLong);详见MSDN。下面简单总结一下SetWindow...

VC 修改窗口属性 GetWindowLong SetWindowLong

修改窗口属性 说明: 以下函数对于POPUP窗口有效,对于子窗口好像不行。 //最小化按钮有效 ::SetWindowLong(m_hWnd,GWL_STYLE,GetWi...

SetWindowLong 用法

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

Introduction to 3D Game Programming with DirectX 11学习笔记 4.2Direct3D进行初始化

我们将Direct3D的初始化过程分为如下几个步骤:1.使用D3D11CreateDevice方法创建ID3D11Device和ID3D11DeviceContext。 2.使用ID3D11Devic...

Direct3D11学习环境搭建

参考链接成功地创建了一个空的Win32项目。但是要能创建DirectX项目示例,我们还需要做一些事情。链接DirectX库文件1.编译Effect库 Effect框架是微软额外提供的一个程序框架,用...

SetWindowLong函数的应用

  • 2011年12月07日 19:59
  • 4KB
  • 下载

Windows API函数SetWindowLong简析

函数原型1: LONG SetWindowLong(     HWND hWnd,               //handle to window     int nlndex,       ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SetWindowLong函数总结
举报原因:
原因补充:

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