为什么MFC要用一个hook把一个窗口的WndProc替换为AfxWndProc?
看到书上说,
在CWnd::Create()里,在呼叫CreatEx(...)创建窗口之前,有一个hook,该hook会把窗口消息处理函数替换为AfxWndProc.WndProc不是注册窗口时的一个参数吗?注册窗口时改一下参数不就可以了吗?干吗这么费劲呢?
问题点数:20、回复次数:12Top
1 楼letok(letok)回复于 2005-02-04 01:15:10 得分 0
更奇怪的是,AfxWndProc()呼叫AfxCallWndProc(), AfxCallWndProc()呼叫pWnd->WindowProc()
AfxWndProc(...)
AfxCallWndProc(...)
pWnd->WindowProc(...)
折腾一溜够后,消息又回到了自己的窗口。这是干什么呀?Top
2 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-02-04 08:43:32 得分 5
WindowProc我觉得应该前后是不同的,不然不成了死循环了吗Top
3 楼virtualfunction(virtualfunction)回复于 2005-02-04 17:42:28 得分 5
只是为了将消息送到“应用程序框架”的不同类中--命令绕行,使用户有机会处理消息。Top
4 楼hbhuyang(胡杨)回复于 2005-02-04 18:01:49 得分 5
借用这地方问个问题。
怎样把一负的浮点数如-1.30,
转化成一个五位的ASCII串。(对应上面各个)
请各位帮忙给解决一下
是不是用Ssprintf( )?
Top
5 楼jinyt(人就是江湖)回复于 2005-02-04 18:25:44 得分 5
sprintf("%f",-1.30)Top
6 楼arkuka()回复于 2005-02-04 21:55:16 得分 0
深入浅出MFC(第二版)第九章 消息映射与命令传递 P421
"这种看起来很迂回又怪异的做法,是为了包容新的3D Controls(细节就容我省略了吧)",并与MFC2.5兼容......"Top
7 楼lengfeng281(冷风)回复于 2005-02-04 22:30:52 得分 0
兼容?
让各不同类一一执行也解释不通啊
不懂
是不是只有微软那几个老头知道?
Top
8 楼mahatma_cn(研究硕士生)回复于 2005-02-05 09:03:55 得分 0
"这种看起来很迂回又怪异的做法,是为了包容新的3D Controls(细节就容我省略了吧)",并与MFC2.5兼容......"
----------------------------
同意,有空可以再看看另外一本《深入解析mfc》上面有详细的解释!Top
9 楼ringphone(临风)回复于 2005-02-05 09:06:57 得分 0
AfxWndProc.WndProc是WNDPROC类型,类成员函数除非是静态的,否则无法转换为WNDPROC类型,所以设置时没有办法把pWnd->WindowProc赋给他。HOOK窗口第一时间取得窗口控制权,AfxWndProc()呼叫AfxCallWndProc(), AfxCallWndProc()呼叫pWnd->WindowProc(),这里面做了一些事情,AfxWndProc是把HWND和pWnd绑定,AfxCallWndProc根据HWND查表得到绑定的pWnd,然后去调用pWnd->WindowProc,这样才转到了窗口类内部的窗口过程。Top
10 楼bloggs(福)回复于 2005-02-05 12:24:53 得分 0
楼上的,
类成员函数除非是静态的,否则无法转换为WNDPROC类型。。。
说的好,正解
临风,上面这段话是书里的?Top
11 楼hbhuyang(胡杨)回复于 2005-02-05 12:36:35 得分 0
如何把字符数组1str1从指定位置复制指定个数5的字符到字符树组2str2中?Top
12 楼ringphone(临风)回复于 2005-02-05 13:54:45 得分 0
呵呵,这段话是我自己的,献丑了。Top




