本帖最后由 forlinx2013 于 2014-1-24 09:45 编辑
欢迎大家来到飞凌爱板网专区,对嵌入式技术感兴趣的朋友不妨多多关注一下,我们提供了公司所有开发板的所有资料,也会更新大量技术文章,欢迎大家一块学习提高!!!
Win CE6.0 GPRS拨打电话 开发环境:VS2005 开发语言:C++ 实现功能:有拨号键盘,能直接拨打电话,能保存最后一个来电 实现代码:
1. 新建一个工程,这里工程名字为GPRSDial,做一个对话框,对话框如下: 拨号控件(Check Box)ID:IDC_Dial 接听控件(Check Box)ID:IDC_Take 电话号码编辑框ID:IDC_EDIT_DIALCODE 来电号码编辑框ID:IDC_DISP_CALLCODE 为电话号码编辑框添加成员变量str2 来电号码编辑框添加成员变量m_content
2.为工程添加CGPRS类,右击工程文件下的Header Files和Source Files文件,添加GPRS.h CeSerial.cpp GPRS.cpp CeSerial.h 四个文件,这四个文件可以从网上下载。
3.添加代码,在 GPRSDialDlg.h 中添加 CGPRS m_GPRS; /* CGPRS 类变量 */ static void CALLBACK OnGPRSRecv(DWORD UserParam, DWORD Status, CString strData); // GPRS 接收回调函数
在BOOL CGPRSDialDlg::OnInitDialog()函数添加如下代码: // 初始化GPRS BOOL ret = m_GPRS.GPRS_Init(_T("COM2:"), 115200, (DWORD)this); if (ret == FALSE) { MessageBox(_T("GPRS初始化失败,请检查是否安装正确.")); //return FALSE; } else{ MessageBox(_T("GPRS初始化成功, 可以进行拨打或接听操作")); }
// 设置GPRS 接收回调函数 m_GPRS.OnGPRSRecv = OnGPRSRecv;
添加拨号按钮单击事件代码:
void CGPRSDialDlg::OnDial() { BOOL ret; CString strDialCode; CButton *Key = (CButton *)GetDlgItem(IDC_Dial);
GetDlgItemText(IDC_EDIT_DIALCODE, strDialCode); /* 获取拨号号码*/
UINT state = Key->GetState(); if ((state & 0x0003) == 1) /* 按键按下*/ { if (strDialCode == _T("")) /* 输入号码有误*/ { MessageBox(_T("请输入拨号号码.")); Key->SetCheck(0); /* 恢复按键原状态*/ Key->SetWindowText(_T("拨号")); return; }
ret = m_GPRS.GPRS_DialUp(strDialCode); if (ret == FALSE) /* 拨号失败*/ { Key->SetCheck(0); Key->SetWindowText(_T("拨号")); /* 恢复按键原状态*/ return; }
Key->SetWindowText(_T("挂机")); /* 提示下次操作*/ } else { /* 按键未按下*/ ret = m_GPRS.GPRS_DialDown(); if (ret == FALSE) { /* 挂机失败*/ MessageBox(_T("挂机失败.")); }
Key->SetWindowText(_T("拨号")); /* 提示下次操作*/ } } 添加接听电话按钮单击事件代码,里面有保存电话代码,请看注释: void CGPRSDialDlg::OnTake() { BOOL ret; CFile MyFile; //文件cfile类 CString m_Filename; CStdioFile mFile; CButton *Key = (CButton *)GetDlgItem(IDC_Take);
UINT state = Key->GetState(); if ((state & 0x0003) == 1) /* 按键按下*/ { ret = m_GPRS.GPRS_TakeTheCall(); /* 接听来电*/ if (ret == FALSE) { /* 接听失败*/ Key->SetCheck(0); Key->SetWindowText(_T("接听")); /* 按键恢复原来的状态*/ MessageBox(_T("接听失败.")); //return; }
Key->SetWindowText(_T("挂断")); /* 提示下一次操作动作*/ } else { ret = m_GPRS.GPRS_HangUpTheCall(); /* 挂机*/ if (ret == FALSE) { MessageBox(_T("挂断失败.")); /* 挂机失败*/ }
Key->SetWindowText(_T("接听")); /* 按键恢复原来的状态*/
} UpdateData(TRUE); //挂断电话的时候开始更新电话数据
m_Filename = _T("来电号码");//创建一个名字为“来电号码”的文件,来存储来电的号码
if(!MyFile.Open(_T("来电号码.txt"),CFile::modeCreate|CFile::modeWrite))//创建文件 { MessageBox(_T("创建失败")); return; }
MyFile.SeekToBegin();//文件指针到文件头 //MyFile.Seek(30,CFile::current);///从当前位置往下移动字节 MyFile.Write("\n",NULL); //MyFile.Write(sUNICODE,sizeof(sUNICODE)); //将文件变为UNICODE编码 MyFile.Write(m_content,m_content.GetLength()*2); //mFile.WriteString("\n");
MyFile.Close();//关闭文件
} 编写GPRS回调函数: void CALLBACK CGPRSDialDlg::OnGPRSRecv(DWORD UserParam, DWORD Status, CString strData) { CGPRSDialDlg *pDlg = (CGPRSDialDlg *)UserParam;
if (Status == GPRS_STATUS_RECEIVE_CALL) /* 有电话打入*/ { //pDlg->SetDlgItemText(IDC_DISP_CALLCODE, _T("有来电请接电话.")); //Sleep(2000); pDlg->SetDlgItemText(IDC_DISP_CALLCODE, strData); /* 来电显示*/ }
if (Status == GPRS_STATUS_OTHER_SIDE_HANDUP) { /* 对方已挂机*/ CButton *ButTake = (CButton *)pDlg->GetDlgItem(IDC_Take); CButton *ButDial = (CButton *)pDlg->GetDlgItem(IDC_Dial);
if ((ButDial->GetState() & 0x003) == 1) { /* 本机拨出的情况*/ pDlg->SetDlgItemText(IDC_EDIT_DIALCODE, _T("对方已挂机.")); Sleep(2000); pDlg->SetDlgItemText(IDC_EDIT_DIALCODE, _T("")); } else { /* 来电的情况*/ pDlg->SetDlgItemText(IDC_DISP_CALLCODE, _T("对方已挂机.")); Sleep(2000); pDlg->SetDlgItemText(IDC_DISP_CALLCODE, _T("")); }
ButTake->SetWindowText(_T("接听")); /* 恢复按键原状态*/ ButDial->SetWindowText(_T("拨号")); ButTake->SetCheck(0); ButDial->SetCheck(0); } } 添加拨号按钮单击事件代码: 号码1: UpdateData(TRUE); str2 += "1"; UpdateData(FALSE); 号码2:UpdateData(TRUE); str2 += "2"; UpdateData(FALSE); 以此类推: 添加删除按钮单击事件代码: //删除 CString str; GetDlgItemText(IDC_EDIT_DIALCODE,str); str.Delete(str.GetLength()-1); SetDlgItemText(IDC_EDIT_DIALCODE,str); CEdit *pc=(CEdit*)GetDlgItem(IDC_EDIT_DIALCODE); pc->SetSel(str.GetLength(),str.GetLength());
|