您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++中回调函数使用的变身大法 【注册男护士专用博客】          

C++中回调函数使用的变身大法

www.nanhushi.com     佚名   不详 

  界面处理类 CShowGUI,数据上传类 CUploadData

  class CUploadData
  {
  ......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  int UploadFile(LPCTSTR lpFileNamePath,LPVOID lparam,SetUploadCaller Caller );
  // 接受外界出入的参数,主要是回调函数的地址通过参数Caller,
  int Send(LPCTSTR lpServerIP, LPCTSTR lpServerPort, LPCTSTR UploadFilePath) ;
  ...... // 注意此时不在需要GetCurState 函数了 。
  }

  class CShowGUI: public CDialog
  {
  .......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  void SetCallBack(LPCTSTR strPath);
  static int GetCurState(int nCurData, int nInAll, void * pParam) ;
  CUploadData m_Uploa
  d ; // 数据上传类是界面显示类的一个成员变量。
  .......
  }

  void CShowGUI :: SetCallBack(LPCTSTR strPath)
  {
  CUploadData myUploadData ;
  SetUploadCaller myCaller; // 声明一个函数指针变量
  myCaller = CurState ; // 取得界面处理函数的地址
  myUploadData .UploadFile(strPath,this,myCaller); // 界面处理类的函数传入,实现了数据传入与界面处理的分离 .
  }

  通过上面的演示做到了界面与数据的分离,回调函数分别扮演了不同角色,所以随着处理问题的不同应灵活应用,但同样因为处理数据类不知道界面处理类或外部调用类的类型,而更无法灵活地处理界面的不同显示方式。这方面还希望喜欢钻研技术的朋友继续研究。

  界面处理类 CShowGUI,数据上传类 CUploadData

  class CUploadData
  {
  ......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  int UploadFile(LPCTSTR lpFileNamePath,LPVOID lparam,SetUploadCaller Caller );
  // 接受外界出入的参数,主要是回调函数的地址通过参数Caller,
  int Send(LPCTSTR lpServerIP, LPCTSTR lpServerPort, LPCTSTR UploadFilePath) ;
  ...... // 注意此时不在需要GetCurState 函数了 。
  }

  class CShowGUI: public CDialog
  {
  .......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  void SetCallBack(LPCTSTR strPath);
  static int GetCurState(int nCurData, int nInAll, void * pParam) ;
  CUploadData m_Uploa
  d ; // 数据上传类是界面显示类的一个成员变量。
  .......
  }

  void CShowGUI :: SetCallBack(LPCTSTR strPath)
  {
  CUploadData myUploadData ;
  SetUploadCaller myCaller; // 声明一个函数指针变量
  myCaller = CurState ; // 取得界面处理函数的地址
  myUploadData .UploadFile(strPath,this,myCaller); // 界面处理类的函数传入,实现了数据传入与界面处理的分离 .
  }

  通过上面的演示做到了界面与数据的分离,回调函数分别扮演了不同角色,所以随着处理问题的不同应灵活应用,但同样因为处理数据类不知道界面处理类或外部调用类的类型,而更无法灵活地处理界面的不同显示方式。这方面还希望喜欢钻研技术的朋友继续研究。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目