模拟手机通信的研究

来源 :无线互联科技 | 被引量 : 0次 | 上传用户:as78dfg
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:本系统是现实中手机的计算机模拟,是集网络通信,电话拨号,数据库操作,多媒体显示等各项功能于一身,是现实中手机在计算机中的再现。
  关键词:数据库;网络;电话拨号;多媒体;手机
  主程序是基于单文档建立起来的,消息始终贯穿于整个程序中。数据的变化,控制量的变化均是通过消息的通知来实现的。消息是VC++的精髓,消息的驱动能产生神奇的效果。当程序由待机状态进入主菜单时,程序创建主菜单CEntry类,这时m_pActiveWnd将被设置为CEntry类的对象地址,这样“手机键盘”产生的消息将由CEntry类来处理。当选择了主菜单的某一项时,CEntry类将向其父窗口CMobView回送一个自定义消息WM_FLAG以通知父窗口要创建新窗口了(::PostMessage(this->GetParent()->m_hWnd,WM_FLAG,m_nCurrentSel+1,0);),在WM_FLAG的處理函数中我们将创建新的窗口:
  void CMobView::OnFlag(WPARAM wParam, LPARAM lParam)
  {
  switch(wParam)
  {
  case 1:
  if(m_pActiveWnd != this)
  m_pActiveWnd->ShowWindow(SW_HIDE);
  m_pBeforeWnd = m_pActiveWnd;
  m_hTelebook.Create(this,IDD_TELEBOOK);
  m_pActiveWnd = &m_hTelebook;
  m_hTelebook.m_pBefore = this->m_pBeforeWnd;
  if(m_pActiveWnd != this)
  m_pActiveWnd->ShowWindow(SW_SHOW);
  break; .
  }
  }
  CMobView类中有个变量CWnd的指针类型变量m_pBeforeWnd,子窗口中也有指针类型变量m_pBefore。它的作用主要体现在从子窗口的返回过程中。在创建新的子窗口前先将当前活动窗口地址保存至子窗口的变量m_pBefore。子窗口创建后,“手机键盘”产生的消息都传送到子窗口中去。也就是说负责“返回”操作的右软键,所产生的消息由子窗口来处理。所以原窗口的显示,子窗口的销毁,都应该在子窗口中处理。这样我们就可以这样来做:
  void CEntry::OnRSoft()
  {
  m_bmpDisplay.DeleteObject();
  CMobView* pView;
  pView = (CMobView*)this->GetParent();
  m_pBefore = (CMobView*)this->GetParent();
  pView->m_pActiveWnd=m_pBefore;
  this->DestroyWindow();
  }
  我们把保存在子窗口中的原来的活动窗口重新传给父窗口的m_pActiveWnd,然后子窗口再销毁自己。这样,我们就成功地实现了窗口的返回。
  函数ReceiveMessage用于接收消息,处理接收到的消息数据。在本程序中,每次收到消息后,都将其存入数据库中。CMessage显示短信数据时,将从数据库中读取相应数据。其定义如下:
  void CMobView::ReceiveMessage()
  {
  ASSERT(m_pSocket);
  char buffer[4096];
  char bufferMess[4000];
  int len = m_pSocket->Receive(buffer,4095);
  if(len<1)
  {
  AfxMessageBox("接收信息异常!");
  return;
  }
  buffer[len] = 0;
  CString m_strAll = buffer;
  //取得时间
  CString m_strTime;
  char bufferTime[30];
  int j;
  for(j = 0;j  {
  bufferTime[j] = buffer[24+j];
  }
  bufferTime[m_nLen] = 0;
  m_strTime = bufferTime;
  //取得号码
  char bufferFrom[12];
  char bufferTo[12];
  for(int i = 0;i<11;i++)
  {
  bufferFrom[i] = buffer[i];
  bufferTo[i] = buffer[11+i];
  }
  bufferFrom[11] = 0;
  bufferTo[11] = 0;
  CString strFrom = bufferFrom;
  CString strTo = bufferTo;
  CString str = bufferMess;
  extern CString m_strMyNum;
  //播放声音
  m_nWave.OpenDevice();
  m_nWave.Play(this,m_strMesRing);
  函数OnSend用于发送消息,其定义如下:
  void CMobView::OnSend()
  {
  if(m_pSocket == NULL)
  return;
  extern CString m_strMyMess;
  if(!m_pSocket->Send(m_strMyMess,strlen(m_strMyMess)))
  {
  AfxMessageBox("发送消息失败!");
  return;
  }
  }
  在该函数中,Send所发送的消息为全局变量字符串m_strMyMess,它是在CMessage中被赋值的:
  m_strMyMess=m_strMyNum+m_strToNum+m_strLen+m_strTime+m_strMyMess;其中有本手机号,对方手机号,消息发送时间,编辑框中编辑的消息。
  当客户端收到消息时,将消息存入数据库表“短信”中。当客户端连接服务器成功后,通过查询字段TeleNumTo,来判断消息是否是自己的。如果是便可在“收件箱”中得以显示了。
  [参考文献]
  [1]王育坚.《Visual C++面向对象编程教程》.清华大学出版社,2003年.
  [2]梁肇新.《编程高手箴言》.电子工业出版社,2004年.
  [3]飞思科技.《精通MFC》.电子工业出版社,2003年.
  [4]George Shepherd,Scot Wingo.《深入解析MFC》.中国电力出版社,2003年.
  [5]张海藩.《软件工程导论》,清华大学出版社,2003年.
其他文献
目的探讨用痛泻要方调节腹部术后患者胃肠运动功能紊乱的作用。方法治疗组30例服用痛泻要方,对照组30例仅对症治疗。结果治疗组服药2~3剂(2~3d)后症状缓解,而对照组需对症治疗5~7d
摘 要:随着社会对平面设计师需求量的增大,Photoshop平面设计教学变得越来越重要,传统的Photoshop平面设计教学很难适应社会的需求,Photoshop平面设计教学的实践性显得愈发重要。本文简要描述了Photoshop平面设计的实践性教学,并详细探讨了Photoshop平面设计的实践性教学的方法,希望有所借鉴。  关键词:Photoshop平面设计;教学;实践性  Photoshop是使
园林景观设计在中国有悠久的历史。中国以其古老的画意园林艺术而著称,以大量的文化景观而闻名。在当今的城市膨胀和环境恶化背景下,随着建筑业的蓬勃发展,景观设计学的发展有着
急性缺血性脑卒中(AIS)已经成为全世界人口死亡的三大原因之一。在我国,缺血性卒中占整个卒中发病率的70%~75%,是卒中的主要类型。预防和治疗缺血性卒中应该成为卒中防治的重点
中医认为"心肺同源"这是心肺同治的理论源泉。心脏本身耗氧占整个人体的20%左右,若肺部出现病变,最先缺氧的就是心脏。如果长期轻度缺氧,会使心肌收缩增强,心率加快引发冠心病,
为了达到课程与就业的零距离接触,将教学思想,课程体系进行改革,加大实践教学的力度,将基于"工作过程导向"的教学思想引入到教学中,模拟工作现场,将知识点进行重组,采用项目教学法,实施讲练一体的教学模式非常必要的,本文就对《多媒体应用》课程的教学改革进行了探讨。
仔猪哺乳期死亡是养猪生产中的常见现象,也是导致养猪效益低下的重要原因。现结合多年来生产技术指导的经验,提出相应对策,供养猪户参考。
目的建立感冒消炎片的含量测定方法。方法色谱柱为十八烷基硅烷键合硅胶柱,流动相为甲醇-磷酸0.1%(25:75),检测波长323nm,流速1ml&#183;min-1。结果在此色谱条件下,咖啡酸在0.072~1.44μg