SetWindowLong()和 GetWindowLong() 使用解详

来源:百度知道 编辑:UC知道 时间:2024/05/28 04:08:38
OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll
[i],GWL_WNDPROC, (LONG)ScrollProc ) ;

i = GetWindowLong ((HWND) lParam, GWL_ID) ;

问题:
1:详细说明SetWindowLong各个参数的作用,特别是第二和第三个参数重点说明一下:为什么要写 GWL_WNDPROC,而不能写GWL_ID;还有第三个参数为什么要写 ScrollProc 这个 LRESULT CALLBACK类型 函数,换其它类型的函数就不行,为什么加(WNDPROC)这个宏.
2,GetWindowLong 这个函数是取得的什么值,还能取得其它的值吗?

//部分源码
for (i = 0 ; i < 3 ; i++)
{
// The three scroll bars have IDs 0, 1, and 2, with
// scroll bar ranges from 0 through 255.

hwndScroll[i] = CreateWindow (TEXT ("scrollbar"), NULL,
WS_CHILD | WS_VISIBLE |
WS_TABSTOP | SBS_VERT,
0, 0, 0, 0,
hwnd,
(HMENU) i,
hInstance,
NULL) ;

SetScrollRange (hwndScroll[i], SB_CTL, 0, 255, FALSE) ;

1.

LONG SetWindowLong( HWND hWnd,

int nIndex,

LONG dwNewLong

);

这个函数根据nIndex的取值不同,可以实现不同的功能.

其中nInde可以取:

GWL_EXSTYLE: 设置窗口扩展风格,即CreateWindowEx的DWORD wExStyle 参数

GWL_STYLE: 设置窗口风格,即CreateWindow的DWORD dwStyle参数

GWL_WNDPROC: 设置窗口的处理函数,即RegisterClass的WNDCLASSEX的WNDPROC lpfnWndProc成员

GWL_HINSTANCE: 设置窗口所属的应用程序句柄,即RegisterClass的WNDCLASSEX的HINSTANCE hInstance成员

GWL_ID 设置窗口的ID(对于控件,就是控件ID)

GWL_USERDATA: 设置窗口的用户自定义数据

DWL_DLGPROC: 设置对话框处理函数

DWL_MSGRESULT: 设置对话框消息处理的结果值

DWL_USER: 设置扩展区域数据

你这里是要修改原窗口的回调函数,所以指定的类型为GWL_WNDPROC,参数是你自定义的回调函数名,转为LONG型,而返回值是以前的回调函数,因为是LONG型的,要强转成WNDPROC然后保存起来

2.LONG GetWindowLong(HWND hWnd,int nlndex)
第二个参数和SetWindowLong的第二个参数一样
取出对应的属性值

LONG SetWindowLong( HWND hWnd,

int nIndex,

LONG dwNewLong

);
是用来改变和设置窗口的一些属