091031(星期六)消息从接受到处理,其中参数的传递情况

 

1031 消息从接受到处理,其中参数的传递情况

这是一个单击button的调用栈。

CDlgSmbList::OnButtonSearch() line 118

_AfxDispatchCmdMsg(CCmdTarget * 0x0013fd50 {CDlgSmbList hWnd=0x00010a08}, unsigned int 1028, int 0, void (void)* 0x004012b2 CDlgSmbList::OnButtonSearch(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88

CCmdTarget::OnCmdMsg(unsigned int 1028, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 302 + 39 bytes

CDialog::OnCmdMsg(unsigned int 1028, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 97 + 24 bytes

CWnd::OnCommand(unsigned int 1028, long 68130) line 2099

CWnd::OnWndMsg(unsigned int 273, unsigned int 1028, long 68130, long * 0x0013f0e4) line 1608 + 28 bytes

CWnd::WindowProc(unsigned int 273, unsigned int 1028, long 68130) line 1596 + 30 bytes

AfxCallWndProc(CWnd * 0x0013fd50 {CDlgSmbList hWnd=0x00010a08}, HWND__ * 0x00010a08, unsigned int 273, unsigned int 1028, long 68130) line 215 + 26 bytes

AfxWndProc(HWND__ * 0x00010a08, unsigned int 273, unsigned int 1028, long 68130) line 379

 

1AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)

第一个参数:hWnd 窗口句柄。

CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);//根据窗口句柄查窗口指针。

{CDlgSmbList hWnd=0x00010a08} pWnd指向对话框。

第二个参数:nMsg 消息号。

第三个参数:wParam,依据高低字传递两个实参。

第四个参数:lParam,通常是一个指向结构体的指针,更多的实参得以扩展。

 

2LRESULT AFXAPI AfxCallWndProc(CWnd* pWnd, HWND hWnd, UINT nMsg,

       WPARAM wParam = 0, LPARAM lParam = 0)

AfxWndProc的参数只多一个“冗余”的pWnd

 

3CWnd::WindowProc (UINT message, WPARAM wParam, LPARAM lParam)

削减掉只剩下3个,通知调用栈的值可以看出,就是自AfxWndProc而来的3个实参。

 

4CWnd::OnWndMsg (UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)

加了一个出参。

 

5CWnd::OnCommand (WPARAM wParam, LPARAM lParam)

更精简了。原因是pWnd已经是调用函数的主语,不需要再通过参数体现。

 

6CDialog::OnCmdMsg (UINT nID, int nCode, void* pExtra,

       AFX_CMDHANDLERINFO* pHandlerInfo)

多了两个参数,由于实际在这个栈里面,pExtrapHandlerInfo都是NULL,其含义还不确定。

 

7CCmdTarget::OnCmdMsg (UINT nID, int nCode, void* pExtra,

       AFX_CMDHANDLERINFO* pHandlerInfo)

是上面虚函数的原型,参数自然一样。

 

8BOOL AFXAPI _AfxDispatchCmdMsg(CCmdTarget* pTarget, UINT nID, int nCode,

       AFX_PMSG pfn, void* pExtra, UINT nSig, AFX_CMDHANDLERINFO* pHandlerInfo)

多了几个参数,

第一,pTarget,实际上填入了this,还是指向Dlg的,其值就是AfxCallWndProc的参数CWnd* pWnd

第二,AFX_PMSG pfn

第三,UINT nSig

这两个都是从消息映射链表中来的。

 

9CDlgSmbList::OnButtonSearch()

Button按下时没有传入任何参数。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值