第9章Windows程序设计的关键技术.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章Windows程序设计的关键技术资料

Windows程序设计的关键技术 事件驱动机制编程 组件对象模型 MFC 上海大学机电工程与自动化学院 雷电 消息驱动机制 Windows程序和传统程序的根本区别: 传统程序是通过调用系统函数来获得用户输入,而Windows程序是通过操作系统发送的消息来处理用户输入。 不了解事件编程就无法深入Windows程序和Web设计的殿堂。 面向对象的编程,要执行一个任务有两种启动方式: 客户/服务器模式。 委托/事件模式。 上海大学机电工程与自动化学院 雷电 事件概念 事件字面意义:事件可以是你认为的任何可能发生的事情。 事件:是事件源中的方法,该方法在被调用时生成事件,本质上是一种特殊的函数指针,通过调用事件方法“激发”该事件。 事件源(事件发生器):是定义事件和包含事件的对象。 事件接收器:是接收事件的对象。 事件处理程序:是事件接收器中接收事件的方法。 挂钩事件(定阅事件):是指将事件与事件处理程序相关联。 解除挂钩事件(撤销定阅事件) :是指使事件与事件处理程序分离。 上海大学机电工程与自动化学院 雷电 鼠标 事件处理程序: OnClick 客户 定阅鼠标事件 回调(通知) 客户 事件处理程序: OnSubmit 定阅鼠标事件 回调(通知) 事件发生器 事件 ButtonClick 最重要的意义是:事件源模块不用关心谁来响应事件,使系统间的模块间的关系是一种松散的关系。 上海大学机电工程与自动化学院 雷电 事件的处理主要有两种方法 委托式的事件处理模式(函数回调,函数指针的集合) 类的层次体系的虚函数覆盖。(多态性) 上海大学机电工程与自动化学院 雷电 事件机制的实现 VC++6.0没有提供支持:虽然C 语言所具有的函数回调对此非常适用,而 C++ 却始终缺少这种针对对象方法的回调。函数指针只能使用全局函数或静态函数。 例: typedef void (*EventFunc)(int x,int y ); EventFunc onBnEvent[ ] = ; onBnEvent [0]=myOnBn; myOnBn(int x,int y){….} onBnEvent [0](3 , 140 ); onBnEvent [1](3, 50 ); 声明委托(声明事件签名) 定义事件对象 事件源引发事件 处理事件 (全局函数) 订阅事件 上海大学机电工程与自动化学院 雷电 VC++7.0提供下面的关键字支持面向对象的事件编程 event_source 、event_receiver __event 、 __hook 、__unhook VC++8.0 提供下面的关键字支持托管代码的事件编程 delegate 、event .NET对不同类型的对象预定义了大量事件 订阅事件+= 取消订阅 -= VC++9.0 STL 增加了 function 类模板,bind函数,以支持本地的面向对象的事件编程 上海大学机电工程与自动化学院 雷电 例:.NET事件机制编程 using namespace System; delegate void Del(int, float); ref class EventSource { public: event Del^ E; void fire(int i, float f) { E(i, f); } }; ref class EventReceiver { public: void Handler(int i , float f) { Console::WriteLine(Receive:{0},{1},i,f); } }; int main () { EventSource ^ es = gcnew EventSource(); EventReceiver^ er = gcnew EventReceiver(); es-E += gcnew Del(er, EventReceiver::Handler); es - fire(1, 3.14); } 输出结果: Receive : 1 , 3.14 事件对象 声明委托(声明事件签名) 事件响应成员函数 创建对象 Hook事件 激发事件 上海大学机电工程与自动化学院 雷电 标准 C++ 库的扩展 (新) #include iostream #include vector #include functional using namespace std; using namespace std::tr1; using namespace std::tr1::placeholders; c

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档