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. LONG SetWindowLong(
  HWND hWnd,       // handle to window
  int nIndex,      // offset of value to set
  LONG dwNewLong   // new value
);
GWL_USERDATA:Sets the 32-bit value associated with the window. Each window has a corresponding 32-bit value intended for use by the application that created the window. This value is initially zero.

解决方案 »

  1.   

    colorknight(多彩的骑士) 我要的是中文的非MSDN
      

  2.   

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

  3.   

    tiongkohlang(SDK):非常感谢你的解释,我还是有点不明白,“那么我们可以把名字存在hwnd的userdata里边”,这句话是什么意思?难道userdata是hwnd的一个子项,hwnd好像不是结构呀
      

  4.   

    jiangsheng(蒋晟):非常感谢你的解释,我还是有点不明白,你所说的数据块是否任何结构都可以吗??
      

  5.   

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

  6.   

    在窗口建立后的任何时候修改窗口的属性,比如SIZE,SYTLE等等。