精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载

查看完整版本: C 中回调函数使用的变身大法

mxh1998 2008-3-26 22:38

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

  


                    界面处理类 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); // 界面处理类的函数传入,实现了数据传入与界面处理的分离 .

  }



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