zoukankan      html  css  js  c++  java
  • SetWindowLong

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

    这段内存可以通过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指出。 

    http://blog.csdn.net/luo809976897/article/details/49309703

  • 相关阅读:
    fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)
    SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
    FTP 服务搭建后不能访问问题解决
    指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
    svn Please execute the 'Cleanup' command. 问题解决
    .net 操作MongoDB 基础
    oracle 使用绑定变量极大的提升性能
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  • 原文地址:https://www.cnblogs.com/findumars/p/6857838.html
Copyright © 2011-2022 走看看