请进。。
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
…………
OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i], GWL_WNDPROC, (LONG) ScrollProc) ;
…………
}
LRESULT CALLBACK ScrollProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
……
return CallWindowProc (OldScroll[id], hwnd, message, wParam, lParam) ;
}
请问这里的OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i], GWL_WNDPROC, (LONG) ScrollProc) ;用意何在?
书上是这么说的(不过有点不明白这样做有何意义)
现在,函数ScrollProc得到了Windows发送给滚动条的滚动条窗口过程WndProc的全部消息,它使用CallWindowProc调用旧的滚动条窗口过程。。
请问这样忙活了半天有什么用?
问题点数:0、回复次数:13Top
1 楼kingcom_xu(冷羽)回复于 2003-02-01 23:47:50 得分 0
这就是所谓的子类化了。。。
拿滚动条来说,用户在滚动条上单击,这时平常情况下你是收不到单击消息的。。
但有的情况下你想得到这个消息并做一些处理,那么你可以改变这个滚动条的窗口函数也就是用上面SetWindowLong的方法。。。
这样的话以后所有在滚动条上产生的消息都发向你指定的函数里了(如上例中的ScrollProc)...然后你在ScrollProc里做一些消息的处理,然后把不想处理的消息交给原来的滚动条窗口函数处理(也就是CallWindowProc)
打了这么一大堆也不知道我有没有讲清楚:(
Top
2 楼jindayu(Idislikework)回复于 2003-02-02 00:12:09 得分 0
意思就是说先SETWINDOWLONG让你的程序得到滚动条的信息,然后CALLWINDOWPROC把处理过剩下的信息发给旧的滚动条窗口函数处理,这样是为了照顾别的程序(好东西大家分享)Top
3 楼jindayu(Idislikework)回复于 2003-02-02 00:21:54 得分 0
我要自杀了!!!!!!
谁告诉我在这里点那里可以发帖!!!!!!!!
我为什么找不到发帖的按钮!!!!!!!!!??????Top
4 楼kingcom_xu(冷羽)回复于 2003-02-02 00:26:17 得分 0
就是提问呀。。。笨。。。Top
5 楼jindayu(Idislikework)回复于 2003-02-02 00:50:50 得分 0
"提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问""提问"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
我真地自杀!!!!!!!!!
——————————————————————————————————
再请问一下,“提问”在哪里?Top
6 楼kingcom_xu(冷羽)回复于 2003-02-02 00:56:53 得分 0
在各小类的上方呀。。。
本版我的问题 | 本版我参与问题 | 本版我得分问题 |
刷新 | 搜索 | 提问| 未解决 | 已解决 | 精华区 | FAQ | 专题 |
订全年杂志,送名家新书
玩出电脑“真精彩”
大本营8折优惠更送程序员杂志
VC/MFC 基础类 (未解决问题)
版主:panda_w、Kevin_qing、masterz、mahongxi
Visual C++ 基础类
最新:300篇 1 2 3 4 5 6 7 8 9 10
问 题
注意:是小类才能提问的哦。。。Top
7 楼jindayu(Idislikework)回复于 2003-02-02 01:06:41 得分 0
终于知道了
谢谢
真是好人
会有好报的
我会记得你的
我会保佑你的
谢谢Top
8 楼kingcom_xu(冷羽)回复于 2003-02-02 01:08:42 得分 0
呵呵。。。那倒不用。。。给我点分就行:)Top
9 楼AthlonxpX86(一坨屎)回复于 2003-02-02 01:40:29 得分 0
kingcom_xu(我的刀是杀不了人的)的意思我听得不太懂啊
OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i], GWL_WNDPROC, (LONG) 意思是设置新的窗口回调函数并返回原来的窗口回调函数保存到OldScroll[i],
其实下面代码的意思应该是对原有回调函数进行一些补充(可能是认为原有回调函数不够强大)
LRESULT CALLBACK ScrollProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
……//对原有回调函数的补充
return CallWindowProc (OldScroll[id], hwnd, message, wParam, lParam) ;//最后在调用原有回调函数处理一些必需的消息
}
(老大,不要每回都发20分的贴啊)Top
10 楼AthlonxpX86(一坨屎)回复于 2003-02-02 01:43:49 得分 0
看kingcom_xu(我的刀是杀不了人的) 两个三角,我都眼红啊我的回答500个20分的问题啊Top
11 楼kingcom_xu(冷羽)回复于 2003-02-02 02:01:23 得分 0
呵呵Top
12 楼showmetheway(雪儿甜心)回复于 2003-02-02 10:01:36 得分 0
(老大,不要每回都发20分的贴啊)
///////////////////////////////
明白了,下次改发10的了:)Top
13 楼AthlonxpX86(一坨屎)回复于 2003-02-02 14:11:00 得分 0
to showmetheway(雪儿甜心)
我知道错了,以后一定少说废话多办事Top




