MFC源码实战分析(三)——消息映射原理与消息路由机制初探

如果在看完上一篇文章后觉得有点晕,不要害怕。本节我们就不用这些宏,而是用其中的内容重新完成开头那个程序,进而探究MFC消息映射的本来面目。

MFC消息映射机制初探

还我本来面目

class CMyWnd : public CFrameWnd
{
public:
    //原有代码
    void OnLButtonDown(UINT nFlags, CPoint point)
    {
        MessageBox(TEXT("In CMyWnd::OnLButtonDown"), TEXT("In CMyWnd::OnLButtonDown"), MB_OK);
    }

    static const AFX_MSGMAP* __stdcall GetThisMessageMap();
    virtual const AFX_MSGMAP* GetMessageMap() const;
};

const AFX_MSGMAP* CMyWnd::GetMessageMap() const 
{ 
    return GetThisMessageMap();
} 

const AFX_MSGMAP* __stdcall CMyWnd::GetThisMessageMap() 
{ 
    typedef CMyWnd ThisClass;
    typedef CFrameWnd TheBaseClass;    
    static const AFX_MSGMAP_ENTRY _messageEntries[] = 
    {
        { WM_LBUTTONDOWN, 0, 0, 0, AfxSig_vwp, (AFX_PMSG)&ThisClass::OnLButtonDown },
        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } 
    };

    static const AFX_MSGMAP messageMap = { &TheBaseClass::GetThisMessageMap, &_messageEntries[0] };
    return &messageMap; 
}

编译后,程序功能与之前用宏定义的无异。我们再通过手工添加代码的方式让程序响应按键消息。
在CMyWnd类中增加OnChar函数:

void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    static
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值