模拟手机通信的研究

2013-04-29 00:44赵艳锋
无线互联科技 2013年9期
关键词:手机网络多媒体

赵艳锋

摘 要:本系统是现实中手机的计算机模拟,是集网络通信,电话拨号,数据库操作,多媒体显示等各项功能于一身,是现实中手机在计算机中的再现。

关键词:数据库;网络;电话拨号;多媒体;手机

主程序是基于单文档建立起来的,消息始终贯穿于整个程序中。数据的变化,控制量的变化均是通过消息的通知来实现的。消息是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年.

猜你喜欢
手机网络多媒体
借助多媒体探寻有效设问的“四度”
多媒体在《机械制图》课中的应用
苹果手机黑产案件侦查与法律适用研究
例谈没收手机引发的师生矛盾冲突
关于高校体育课堂“手机”现象的思考
油气集输系统信息化发展形势展望
基于网络的信息资源组织与评价现状及发展趋势研究
手机锂离子电池充电电路的设计与实现
基于网络的中学阅读指导
新形势下地市报如何运用新媒体走好群众路线