GetWindowLong (hwnd, 0)

今天在看一个代码里头写了GetWindowLong (hwnd, 0),我当时就有点费解,靠,上网

搜索函数原型说明,死活找不到第2个参数为0是指什么,MD,很恼火,最近终于在一个

国外网站找到,我在这篇文章贴了,网站是

http://www.codeguru.com/forum/archive/index.php/t-243778.html

先收集所有关于此函数的使用方法以及程序代码

希望后来的人看到我的这篇文章能感动哈:

函数功能描述:用这个函数能够获得指定窗口的信息

函数原型:
LONG GetWindowLong( HWND hWnd,int nIndex )

参数:
hWnd:指定窗口的句柄
nIndex:需要获得的信息的类型
     值            功能

nIndex取值如下:
GWL_EXSTYLE    得到扩展的窗口风格
GWL_STYLE      得到窗口风格
GWL_WNDPROC    得到窗口回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用
GWL_HINSTANCE  得到应用程序运行实例的句柄
GWL_HWNDPARENT 得到父窗口的句柄
GWL_ID         得到窗口的标识符
GWL_USERDATA   得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位
               的值)

当hWnd标识一个对话框时可以使用下面的值
Value Action
DWL_DLGPROC   得到对话框回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用
DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值
DWL_USER      得到额外的应用程序私有信息,如一些句柄和指针等

返回值:
成功时,返回一个请求的32位的值
失败时,返回0,可以使用GetLastError来取得错误信息

注意:

/**//*
* Window field offsets for GetWindowLong()
*/

#define GWL_WNDPROC (-4)
#define GWL_HINSTANCE (-6)
#define GWL_HWNDPARENT (-8)
#define GWL_STYLE (-16)
#define GWL_EXSTYLE (-20)
#define GWL_USERDATA (-21)
#define GWL_ID (-12)

/**//*
* Get/SetWindowWord/Long offsets for use with WC_DIALOG windows
*/

#define DWL_MSGRESULT 0
#define DWL_DLGPROC 4
#define DWL_USER 8

 

示例1:
long nStyle = ::GetWindowLong(hWnd, GWL_STYLE);   // hWnd是一个编辑框的句柄
if(nStyle & ES_PASSWORD)
{
    AfxMessageBox("这是一个密码域");
}

 在MSDN:

        
也可当hWnd参数标识一个对话框,下面的值。
        
DWL_DLGPROC
        
设置对话框过程的新地址。
        
DWL_MSGRESULT
        
设置对话框中的程序处理的消息的返回值。
        
DWL_USER
        
设置新的额外的信息是私有的应用程序,如句柄或指针。


        
我搜索的定义指数在Winuser.h,这样的结果:

        
/ *
        
*窗口字段偏移量为GetWindowLong()
        
* /
        
GWL_WNDPROC(-4)
        
#定义GWL_HINSTANCE(-6)
        
#定义GWL_HWNDPARENT(-8)
        
GWL_STYLE(-16)
        
GWL_EXSTYLE(-20)
        
#定义GWL_USERDATA(-21)
        
#定义GWL_ID(-12)

        
/ *
        
* / SetWindowWord /长偏移使用WC_DIALOG窗口
        
* /
        
#定义DWL_MSGRESULT 0。
        
#定义DWL_DLGPROC。

        #定义DWL_USER。



        
代码wndclass.cbWndExtra = sizeof(长)的分配4个字节的数据,为您的窗口。这正是一个对话框,做存储DWL_XXXXXX。

        
因此,放置的空间,4,我们可以使用的指数0(DWL_DWL_MSGRESULT“)来存储我们的数据。

        
我们也可以使用它没有任何麻烦,因为我们的窗口,不使用它(因为它不是一个真正的对话),我们可以明确地做我们想要做的这个窗口的内存空间


cbClsExtra

指定额外的字节分配窗口结构


cbWndExtra

指定额外的字节分配窗口实例


posted @ 2012-11-18 18:20  起始页  阅读(557)  评论(0编辑  收藏  举报