您的位置:首页 > 理论基础 > 数据结构算法

VC的事件模型

2005-07-12 10:15 337 查看
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()来处理它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 mfc