⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_28570.htm

📁 vc
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:74LS373 回复日期:2003-01-23 10:21:29
<br>内容:ProcessShellCommand(cmdInfo)是做命令行参数解析,程序启动时的命令行一般是FileNew,ProcessShellCommand(cmdInfo)解析FileNew的结果是创建文档,文档创建后要判断框架窗口是否存在,不存在则要LoadFrame创建,LoadFrame先注册了一个回调函数WindowProc(通过AfxRegisterWndClass注册),再建一个WH_CBT的创建钩子_AfxCbtFilterHook(通过AfxHookWindowCreate建),再调用API CreateWindowEx创建窗口,发送WM_CREATE,WM_NCCREATE消息。<BR>_AfxCbtFilterHook我也没高清楚要做什么,估计是做一些过滤掉WM_CREATE,WM_NCCREATE等一些非HCBT_CREATEWND的消息吧。<BR>WindowProc就很清楚了,直接调用OnWndMsg或DefWindowProc。<BR>OnWndMsg中的主体是:<BR>switch (nSig)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;default:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(FALSE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_bD:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_bD)(CDC::FromHandle((HDC)wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>...<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_iwWw:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_iwWw)(LOWORD(wParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWnd::FromHandle((HWND)lParam), HIWORD(wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_iww:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_iww)(LOWORD(wParam), HIWORD(wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_iWww:&nbsp;&nbsp; // really AfxSig_iWiw<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_iWww)(CWnd::FromHandle((HWND)wParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(short)LOWORD(lParam), HIWORD(lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_is:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_is)((LPTSTR)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_lwl:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_lwl)(wParam, lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_lwwM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_lwwM)((UINT)LOWORD(wParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(UINT)HIWORD(wParam), (CMenu*)CMenu::FromHandle((HMENU)lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vv:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vv)();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vw: // AfxSig_vb, AfxSig_vh<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vw)(wParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vww:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vww)((UINT)wParam, (UINT)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vvii:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vvii)((short)LOWORD(lParam), (short)HIWORD(lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwww:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwww)(wParam, LOWORD(lParam), HIWORD(lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwii:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwii)(wParam, LOWORD(lParam), HIWORD(lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwl:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwl)(wParam, lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vbWW:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vbWW)(m_hWnd == (HWND)lParam,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWnd::FromHandle((HWND)lParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWnd::FromHandle((HWND)wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vD:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vD)(CDC::FromHandle((HDC)wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vM)(CMenu::FromHandle((HMENU)wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vMwb:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vMwb)(CMenu::FromHandle((HMENU)wParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOWORD(lParam), (BOOL)HIWORD(lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vW:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vW)(CWnd::FromHandle((HWND)wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vW2:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vW)(CWnd::FromHandle((HWND)lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vWww:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vWww)(CWnd::FromHandle((HWND)wParam), LOWORD(lParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HIWORD(lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vWp:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint point((DWORD)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vWp)(CWnd::FromHandle((HWND)wParam), point);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vWh:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vWh)(CWnd::FromHandle((HWND)wParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(HANDLE)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwW:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwW)(wParam, CWnd::FromHandle((HWND)lParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwWb:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwWb)((UINT)(LOWORD(wParam)),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWnd::FromHandle((HWND)lParam), (BOOL)HIWORD(wParam));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>.......<BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vs:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vs)((LPTSTR)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vws:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vws)((UINT) wParam, (LPCTSTR)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vOWNER:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vOWNER)((int)wParam, (LPTSTR)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = TRUE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_iis:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_iis)((int)wParam, (LPTSTR)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_wp:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint point((DWORD)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_wp)(point);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_wv: // AfxSig_bv, AfxSig_wv<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_wv)();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vCALC:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vCALC)((BOOL)wParam, (NCCALCSIZE_PARAMS*)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vPOS:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vPOS)((WINDOWPOS*)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwwh:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwwh)(LOWORD(wParam), HIWORD(wParam), (HANDLE)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwp:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint point((DWORD)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwp)(wParam, point);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_vwSIZING:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(this-&gt;*mmf.pfn_vwl)(wParam, lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = TRUE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case AfxSig_bwsp:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult = (this-&gt;*mmf.pfn_bwsp)(LOWORD(wParam), (short) HIWORD(wParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint(LOWORD(lParam), HIWORD(lParam)));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!lResult)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>可见其中就是消息处理。WM_CREATE就是AfxSig_is,AfxMsg.h这样定义:<BR>#define ON_WM_CREATE() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_CREATE, 0, 0, 0, AfxSig_is, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&amp;OnCreate },<BR>#define ON_WM_COPYDATA() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_COPYDATA, 0, 0, 0, AfxSig_bWCDS, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(BOOL (AFX_MSG_CALL CWnd::*)(CWnd*, COPYDATASTRUCT*))&amp;OnCopyData },<BR>#define ON_WM_DESTROY() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_DESTROY, 0, 0, 0, AfxSig_vv, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))&amp;OnDestroy },<BR>#define ON_WM_MOVE() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_MOVE, 0, 0, 0, AfxSig_vvii, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(int, int))&amp;OnMove },<BR>#define ON_WM_SIZE() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_SIZE, 0, 0, 0, AfxSig_vwii, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(UINT, int, int))&amp;OnSize },<BR>......<BR>可见,程序即使没走到Run(),就能通过注册的WindowProc处理消息了(WindowProc应该也算一种钩子吧),也就是说主窗口消息循环已经启动了(通过注册窗口类启动),而Run()并不是启动消息循环,而是将消息翻译派发到各自的窗口而已。<BR><BR>以上自己的理解,不晓得对不对。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tigersky2000 回复日期:2003-01-23 11:27:09
<br>内容:_AfxCbtFilterHook是要在窗口创建前一刻改掉wndproc和window class name,这是MFC4新加了,据说是为了支持3d controls!<BR><BR>我当问这个问题是就在想是不是这个HOOK造成的! 一直都还没把HOOK PROCR的代码拿来看! 等我看完了再来回贴吧<BR><BR>BTW<BR><BR>define ON_WM_CREATE() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_CREATE, 0, 0, 0, AfxSig_is, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&amp;OnCreate },<BR>#define ON_WM_COPYDATA() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_COPYDATA, 0, 0, 0, AfxSig_bWCDS, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(BOOL (AFX_MSG_CALL CWnd::*)(CWnd*, COPYDATASTRUCT*))&amp;OnCopyData },<BR>#define ON_WM_DESTROY() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_DESTROY, 0, 0, 0, AfxSig_vv, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))&amp;OnDestroy },<BR>#define ON_WM_MOVE() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_MOVE, 0, 0, 0, AfxSig_vvii, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(int, int))&amp;OnMove },<BR>#define ON_WM_SIZE() \<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ WM_SIZE, 0, 0, 0, AfxSig_vwii, \<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(UINT, int, int))&amp;OnSize },<BR><BR>这些东西就是用来构造MessageMap的一部分<BR><BR>MSG_ENTRIES<BR>----------------------------------------------------------<BR>|msg id&nbsp;&nbsp;&nbsp;&nbsp;|id&nbsp;&nbsp;&nbsp;&nbsp;|id&nbsp;&nbsp;&nbsp;&nbsp;|id&nbsp;&nbsp;&nbsp;&nbsp;|sign&nbsp;&nbsp;&nbsp;&nbsp;|fun&nbsp;&nbsp;&nbsp;&nbsp;|------&gt;每条消息<BR>----------------------------------------------------------<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|<BR>----------------------------------------------------------<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|<BR>--------------------------------------------------------<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|<BR>---------------------------------------------------------<BR>|0&nbsp;&nbsp;&nbsp;&nbsp;|0&nbsp;&nbsp;&nbsp;&nbsp;|0&nbsp;&nbsp;&nbsp;&nbsp;|0&nbsp;&nbsp;&nbsp;&nbsp;|0&nbsp;&nbsp;&nbsp;&nbsp;|0&nbsp;&nbsp;&nbsp;&nbsp;|--------&gt;表示结束<BR>----------------------------------------------------------<BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tigersky2000 回复日期:2003-01-23 20:31:13
<br>内容:<BR>我终于搞清楚了!<BR>Run()只是进入消息循环,就是说只是GetMessage-&gt;TranslateMessage-&gt;DispatchM<BR>essage,说白了,就是不让这个程序到达终点! <BR>而WM_CREATE由系统传到窗口,交给wndproc来处理,而此时的wndproc就是AfxWndProc而他会调用<BR><BR>AfxCallWndProc,就是在这个函数,调用了如下一条语句:pWnd-&gt;WindowProc(nMsg, wParam, lParam);,<BR><BR>让WM_CREATE消息进入了那一张巨大的网中去了(Message Maping &amp; Routing)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tigersky2000 回复日期:2003-01-23 20:33:50
<br>内容:谢谢! 结贴
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -