大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 分析与理解消息反射机制

分析与理解消息反射机制

时间: 2021-07-31 作者:daque

郑力群媒介:  我曾写过一篇作品对报告动静wm_notify举行领会,动静曲射是mfc中对报告动静的处置办法,两者之间联系格外精细,所以,我写了这篇作品,蓄意不妨刻画出报告动静的完备回忆。动静曲射的普通常识1、动静曲射证明:  父窗口将遏制子窗口发给它的报告动静,开始曲射回子窗口举行处置(即给遏制子窗口一个时机,让遏制子窗口处置此动静),如许报告动静就有时机能被卧窗口自己举行处置。2、mfc中引入动静曲射的因为:  在windows的动静处置中,遏制子窗口的发给其父窗口的报告动静只能由其父窗口举行处置,这使得遏制子窗口的自己能动性大大贬低(你想,它连变换本人的背局面,处置一个自己震动题目都要其父窗口来实行),为领会决这个题目,在mfc中引入了曲射动静“reflect message”的观念,举行动静曲射,不妨使得遏制子窗口不妨自行处置与自己关系的少许动静,巩固了封装性,进而普及了遏制子窗口的可重用性。动静曲射的处置过程(不商量ole遏制)一、动静曲射处置过程图:  1、父窗口收到遏制子窗口寄送的报告动静后,挪用它的虚因变量cwnd::onnotify.cwnd::onnotify()主体局部:{if (reflectlastmsg(hwndctrl, presult)) //此时,hwndctrl,为发送窗口,即子窗口的窗口句柄 return true; // 子窗口已处置了此动静 afx_notify notify;notify.presult = presult;notify.pnmhdr = pnmhdr;return oncmdmsg(nid, makelong(ncode, wm_notify), ¬ify, null);}  领会:开始,挪用reflectlastmsg(hctrlchildwnd,...)给子窗口一个自己处置的时机,将动静曲射给子窗口处置,因变量归来true,表白子窗口处置了此动静。反之,表白子窗口未处置此动静,此时,挪用oncmdmsg(...)由父窗口举行常常的处置。  2、reflectlastmsg中:  主假如挪用发送窗口的sendchildnotifylastmsg(...)。   3、sendchildnotifylastmsg 中:   挪用发送窗口的虚因变量onchildnotify因变量,举行处置。 即使没有处置,则挪用reflectchildnotify(...)因变量举行规范的曲射动静的动静映照处置。二、动静处置办法1:  由上述处置过程不妨看出来,子窗口要想自己处置此动静,重载子控件窗口的onchildnotify假造因变量该当是很简单想到的办法。  提防:mfc中对各个子控件窗口普遍都仍旧重载了onchildnotify因变量,它对应挪用类的虚因变量举行处置,以是,你重载对应的虚因变量即可,如次例:bool cstatusbarctrl::onchildnotify(uint message, wparam wparam, lparam lparam,lresult* presult){if (message != wm_drawitem) //对应各别的遏制,会有各别的有特出处置诉求的动静。return cwnd::onchildnotify(message, wparam, lparam, presult);......drawitem((lpdrawitemstruct)lparam);return true;}virtual void drawitem( lpdrawitemstruct lpdrawitemstruct );void cstatusbarctrl::drawitem(lpdrawitemstruct){assert(false); // must override for self draw status bars}  你重载cstatusbarctrl类的drawitem假造因变量,即可实行对曲射动静wm_drawitem的处置。办法2:  从办法1不妨看出,即使你不在被重载的onchildnotify中对动静举行处置,因变量会挪用cwnd::onchildnotify,它挪用reflectchildnotify因变量举行规范的处置。1、减少曲射动静的映照进口。2、减少对应的动静处置因变量。提防:不妨运用mfc的classwizard作上述举措,在classwizard中,可处置的曲射动静以一个"="号以示辨别。归来值为true,表白控件窗口已处置此曲射动静,为false,表白控件子窗口未处置此曲射动静。结束语:  动静曲射不是很难的观念。它仅出此刻mfc中;它的蓄意是简单遏制子窗口的重用;对某些报告动静你不妨重载对应的虚因变量(wm_drawitem...)举行处置;对其它你不妨运用规范的动静曲射映照举行处置。限于篇幅,少许详细题目,请观赏mfc中对应的源代码。  

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.