VC的事件模型

VC的事件模型

所有的窗口在操作系统中都以一个数据结构维护着,这个数据结构就是预先注册的窗口类,一个窗口类可以有多个实例,这个窗口类有一个重要的成员:对应的窗口事件处理函数的地址。

MFC 中,所有窗口的这个函数地址都被注册成为 AfxWndProc (),这个全局函数会根据窗口句柄查找到对应的 CWnd 对象。然后调用 AfxWndCallProc (),调这个函数的作用是为了把这个消息保存下来备用(为了后面 DefWinProc ()用)然后就调用 CWnd 对象的 WindowProc ()函数(从此时开始的所有函数可以 OverWrite ), WindowProc ()函数会调用 OnWndMsg ()来处理消息,要是 OnWndMsg ()没有处理消息,它会调用 DefWinProc ()来处理(此处的包装使得好像是 CWnd WindowProc ()是注册的消息处理函数), OnWndMsg ()函数会判断消息的类型,如果是一个 OnCommand 消息,它会调用 OnCommand ()函数来处理,如果是 OnNotify 消息,它会调用 OnNotify ()函数来处理,这两个函数都会先试着把消息映射回控件类( CButton 如果有的话),如果控件类不处理这个消息,那么因为这个消息已经是命令消息,不是窗口消息,已经不是专属于窗口来管了。它就调用 CcmdTarget 类的 OnCmdMsg ()函数来处理(当然窗口也可以处理), OnCmdMsg ()函数会查找消息映射或者进行消息传递。所有没有被传入 OnCommand OnNotify 的都被认为是窗口消息,直接在本 CWnd 的消息映射中查找消息处理函数,要是找不到就返回 WindwoProc ()让 DefWinProc ()来处理它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值