Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104640931
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-16 18:51:53

     来源:vczx    作者:upCAL

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

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

阅读(205) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~