为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

移动通信实验手册4-短信收发VC编程

2013-02-27 8页 pdf 686KB 20阅读

用户头像

is_955996

暂无简介

举报
移动通信实验手册4-短信收发VC编程 移动终端开发 VC编程实践——短信收发实现 实验目的:1)在实验 3的基础上,进一步通过编程实现手机短信的收发; 2)加深对 VC编程的理解和实践。 (注意:此实验文档以工程名 mygsm为基础编写的,每一组的工程名都不同,请根据自己 组实验 3的工程名作相应修改!不要盲目照抄!) 1. 在上次的工程中,将所有的 CView 类修改为 CListView 类,以显示短信的读取显示功 能;即在程序中查找所有的 CView,替换为 CListView,并且在StdAfx.h头文 件总添加如下语句: #inc...
移动通信实验手册4-短信收发VC编程
移动终端开发 VC编程实践——短信收发实现 实验目的:1)在实验 3的基础上,进一步通过编程实现手机短信的收发; 2)加深对 VC编程的理解和实践。 (注意:此实验文档以工程名 mygsm为基础编写的,每一组的工程名都不同,请根据自己 组实验 3的工程名作相应修改!不要盲目照抄!) 1. 在上次的工程中,将所有的 CView 类修改为 CListView 类,以显示短信的读取显示功 能;即在程序中查找所有的 CView,替换为 CListView,并且在StdAfx.h头文 件总添加如下语句: #include 2. 利用ClassWizard创建如下的函数: 点击此按钮编辑函数 点击此按钮增加函数 3. 在上图中先点击“Add Function”按钮,再点击“Edit Code”按钮,添加如下代码: CListCtrl& ListCtrl = GetListCtrl(); ListCtrl.InsertColumn(0, "号码", LVCFMT_LEFT, 100); ListCtrl.InsertColumn(1, "时间", LVCFMT_LEFT, 140); ListCtrl.InsertColumn(2, "消息内容", LVCFMT_LEFT, 500); SetTimer(1, 1000, NULL); //设置定时器 1,每 1秒触发一次 为了让 ListCtrl正常显示,在 CMygsmView中的 PreCreateWindow增加如下一行代码: cs.style |= LVS_SHOWSELALWAYS | LVS_REPORT; 4. 同理创建 OnDestroy函数: 5. 点击“Add Function”按钮,再点击“Edit Code”按钮,添加代码: KillTimer(1); //关闭定时器 1 6. 添加一个发送短信资源对话框如下: 其中,对话框 ID为 IDD_SEND_SM,属性设置如下: ID 定 义 为 : IDC_NUMBER ID 定 义 为 : IDC_CONTENT 7. 在MainFrm.h中定义: CDialogBar m_wndDialogBar; 在MainFrm.cpp的 OnCreate函数中增加如下代码: 8. 将“VC++手机短信收发例程”下负责短信收发处理的 SmsTraffic.h和 SmsTraffic.cpp拷 贝到当前工程的文件夹下,选择 VC++的菜单栏 Project—>Add to Project —>Files将这 两个文件加入到工程中。 9. 将 SmsFraffic.cpp中的包含文件改为自己创建的工程名: 改为自己的工程 10. 在新创建的 IDD_SEND_SM对话框上选中“发送”按钮,点击右键选择 ClassWizard, 在出现的“Adding a Class”窗口中选择 Cancel,如下图所示: 11. 在如下的对话框中先点击“Add Function”再点击“Edit Code”: 5 4 3 2 1 12. 点击“Edit Code”后输入如下发送短信代码: CComboBox* pNumberWnd=(CComboBox*)m_wndDialogBar.GetDlgItem(IDC_NUMBER); CComboBox* pContentWnd=(CComboBox*)m_wndDialogBar.GetDlgItem(IDC_CONTENT); CString strSmsc; CString strNumber; CString strContent; strSmsc = "13800280500"; //成都移动短信中心号码,如果是联通请改为 13010811500 pNumberWnd->GetWindowText(strNumber); pContentWnd->GetWindowText(strContent); // 检查号码 if(strNumber.GetLength() < 11) { AfxMessageBox("请输入正确的号码!"); pNumberWnd->SetFocus(); pNumberWnd->SetEditSel(-1, 0); return; } // 检查短消息内容是否空,或者超长 CString strUnicode; WCHAR wchar[1024]; int nCount = ::MultiByteToWideChar(CP_ACP, 0, strContent, -1, wchar, 1024); if(nCount <= 1) { AfxMessageBox("请输入消息内容!"); pContentWnd->SetFocus(); pContentWnd->SetEditSel(-1, 0); return; } else if(nCount > 70) // 全部用 UCS2编码,最大 70个字符(半角/全角) { AfxMessageBox("消息内容太长,无法发送!"); pContentWnd->SetFocus(); pContentWnd->SetEditSel(-1, 0); return; } if(AfxMessageBox("确定发送吗?", MB_YESNO) == IDYES) { SM_PARAM SmParam; memset(&SmParam, 0, sizeof(SM_PARAM)); // 去掉号码前的"+" if(strSmsc[0] == '+') strSmsc = strSmsc.Mid(1); if(strNumber[0] == '+') strNumber = strNumber.Mid(1); // 在号码前加"86" if(strSmsc.Left(2) != "86") strSmsc = "86" + strSmsc; if(strNumber.Left(2) != "86") strNumber = "86" + strNumber; // 填充短消息结构 strcpy(SmParam.SCA, strSmsc); strcpy(SmParam.TPA, strNumber); strcpy(SmParam.TP_UD, strContent); SmParam.TP_PID = 0; SmParam.TP_DCS = GSM_UCS2; // 发送短消息 theApp.m_pSmsTraffic->PutSendMessage(&SmParam); // 列表中加入新串 if(pNumberWnd->FindStringExact(-1, strNumber)<0) pNumberWnd->InsertString(0, strNumber); if(pContentWnd->FindStringExact(-1, strContent)<0) pContentWnd->InsertString(0, strContent); } pContentWnd->SetFocus(); pContentWnd->SetEditSel(-1, 0); 13. 在 mygsm.h中增加包含文件和变量定义: #include "SmsTraffic.h" public://定义在类里面 CSmsTraffic* m_pSmsTraffic; 在类定义之后,即 class CMygsmApp : public CWinApp{……};之后增加: extern CMygsmApp theApp; // CMygsmApp需要根据自己的 App修改 在 CMygsmApp中的 InitInstance()函数 return语句之前增加如下初始化语句: m_pSmsTraffic = new CSmsTraffic; 14. 在工程中增加 OnTimer()函数定时显示接收到的短信: 15. 点击“Add Function”,再点击“Edit Code”,增加如下代码: if(nIDEvent == 1) //对应 3中的 SetTimer(1, 1000, NULL) { SM_PARAM SmParam; CString strTime; CString strNumber; CString strContent; CListCtrl& ListCtrl = GetListCtrl(); // 取接收到的短消息 if(theApp.m_pSmsTraffic->GetRecvMessage(&SmParam)) { // 取短消息信息 strNumber = SmParam.TPA; strContent = SmParam.TP_UD; strTime = "20" + CString(&SmParam.TP_SCTS[0],2) + "-" + CString(&SmParam.TP_SCTS[2],2) + "-" + CString(&SmParam.TP_SCTS[4],2) + " " + CString(&SmParam.TP_SCTS[6],2) + ":" + CString(&SmParam.TP_SCTS[8],2) + ":" + CString(&SmParam.TP_SCTS[10],2); // 去掉号码前的"86" if(strNumber.Left(2) == "86") strNumber = strNumber.Mid(2); // 最多保留 200条 int nItemCount = ListCtrl.GetItemCount(); if(nItemCount >= 200) { ListCtrl.DeleteItem(0); nItemCount--; } // 插入新消息 ListCtrl.InsertItem(nItemCount, strNumber); ListCtrl.SetItemText(nItemCount, 1, strTime); ListCtrl.SetItemText(nItemCount, 2, strContent); ListCtrl.EnsureVisible(nItemCount, FALSE); } } else { // other timers CListView::OnTimer(nIDEvent); } 16. 调制并测试整个程序以实现短信的接收和发送,实现结果如下: 实验报告要求: 1、 根据自己组的实验情况,写出实验过程中出现的错误及解决的方法; 2、根据程序中实现短信收发的代码分析短信收发处理的流程(需要画出程序调用关系及流 程图)。
/
本文档为【移动通信实验手册4-短信收发VC编程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索