SetWindowLong()和 GetWindowLong() 使用解详
来源:百度知道 编辑:UC知道 时间:2024/05/28 04:08:38
[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
);
是用来改变和设置窗口的一些属