下载此文档

CallBack回调函数使用之一.doc


文档分类:幼儿/小学教育 | 页数:约3页 举报非法文档有奖
1/3
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/3 下载此文档
文档列表 文档介绍
凡是由你设计却由windows系统呼叫的函数,统称为callback函数。某些API函数要求以callback作为你参数之一。如SetTimer,LineDDA,EnumObjects。回调函数是由开发者按照一定的原形进行定义的函数(每个回调函数都必须遵循这个原则来设计)例如:----------------------------------------BOOLCALLBACKDialogProc(        HWNDhwndDlg,//handleofdialogbox    UINTuMsg,//message    WPARAMwParam,//firstmessageparameter    LPARAMlParam//secondmessageparameter    );----------------------------------------说明:回调函数必须有关键词CALLBACK;回调函数本身必须是全局函数或者静态函数,不可定义为某个特定的类的成员函数2回调函数并不由开发者直接调用执行(只是使用系统接口API函数作为起点)3回调函数通常作为参数传递给系统API,由该API来调用4回调函数可能被系统API调用一次,也可能被循环调用多次 示范EnumObjects,发现某个DeviceContext的GDIobect符合我们的形态时,:classCMyclass{private: intnCount; intCALLBACK_export EnumObjectsProc(LPSTRlpLogObject,LPSTRlpData);public: voidenumIt(CDC&dc);}voidCMyclass::enumIt(CDC&dc){ //註冊callback函式 (OBJ_BRUSH,EnumObjectsProc,NULL);}C++编译器针对CMyclass::enumIt实际作出的码相当于:voidCMyclass::enumIt(CDC&dc){ //註冊callback函式 CDC::EnumObjects(OBJ_BRUSH,EnumObjectsProc,NULL,(CDC*)&dc);}你所看到的最后一个参数其实是this指针,=0;其实是this->nCount=0;基于相同的道理,上例中的EnumObjectProc既然是一个成员函数,C++, callback函数给windows呼叫用的,windows并不经由任何对象呼叫这个函数,也就无需传递this指针给callback函数,也是导致堆栈中有一个随机参数会成为this指针,,就必须告诉C++编译器,不要放this指针作为该函数的最后一个参数,两个方法可以做到这一点,(也就是说要使用全局函数),,第二种做法接近OO精神.

CallBack回调函数使用之一 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数3
  • 收藏数0 收藏
  • 顶次数0
  • 上传人ffy51856fy
  • 文件大小22 KB
  • 时间2019-05-27
最近更新