今天在看一个代码里头写了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("这是一个密码域");
}
示例2:
LONG GetWindowLong(
HWND hWnd, // handle of window
int nIndex // offset of value to retrieve
);
第二个参数是0的话,就是指定GW_HWNDFIRST!!!
你想用应用程序自定义数据的话,需要指定第二个参数为GWL_USERDATA(-21)
、、、、、、、、、、、、、、、、、、
SetWindowLong (hwnd, 0, 1^GetWindowLong (hwnd, 0)) ;
小弟初学API,对这个函数不是很了解,看了MSDN也还不清楚,特别是作为参数的1^GetWindowLong (hwnd, 0),这个“^”是什么意思,望高手指点迷津