GetWindowLong() SetWindowLong() 详解
这两个函数在windows程序中有着重要的作用,依照MSDN说明以下这两个函数。
/*****************************************************************/
GetWindowLong
这个函数可以通过一个窗口的句柄来得到窗口的一些其他的信息,比如ID等
语法:
LONG GetWindowLong( HWND hwnd,int nIndex);
·hwnd 是要查询的窗口的句柄
·nIndex 有几个标识符来让我们得到不同的信息:
GWL_EXSTYLE extended windows styles
GWL_STYLE 返回windows创建时的style
GWL_WNDPROC 返回windows 的消息处理函数的地址
GWL_HINSTANCE 返回应用程序的实例句柄
GWL_ID 返回窗口的ID
GWL_HWNDPARENT 返回这个窗口的父窗口句柄
GWL_USERDATA 返回和这个窗口相关联的用户数据
如果hwnd是一个对话框句柄,就可以使用下面几个标志:
DWL_DLGPROC 同样是消息处理函数的地址
DWL_MESRESULT 返回消息处理函数中的消息(????)
DWL_USER 一些附加的内容
·返回值
如果函数调用成功,就会返回一个所要查询的32-bit的值
如果不成功,就会返回0.
比如我们想要获得一个窗口的id,可以这样用
Id = GetWindowLong(hwnd,GWL_ID);
/**********************************************************/
SetWindowLong
该函数与GetWindowLong相仿,不过就是由获取信息变成了改变信息,我们可以通过这个函数来设定窗口的一些字段和属性。
语法
LONG SetWindowLong( HWND hwnd, int nIndex, LONG dwNewLong );
·hwnd 就是窗口的句柄
· nIndex 这个字段的标志和GetWindowLong是一样的,可以通用
·dwNewLong 是我们需要设定的那个值,要用它对窗口进行修改。
返回值:
当函数调用成功时,函数返回被修改的那个值。
如果不成功,函数返回0。
举个简单的例子,如果说我们想把主窗口的消息处理函数改为WndProcChanged(HWND,UINT,WPARAM,LPARAM);
我们可以这样写:
SetWindowLong(hwnd, GWL_WNDPROC, (LONG)WndProcChanged);
这样,窗口的消息处理函数就成了我们刚刚声明的那个函数。其他的标志符都可以这样用。