查看: 2429|回复: 3

[Wince技术] winece下gprs拨号软件设计例程

[复制链接]
  • TA的每日心情

    2014-4-10 13:56
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-1-21 10:40:06 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 forlinx2013 于 2014-1-24 09:45 编辑

    欢迎大家来到飞凌爱板网专区,对嵌入式技术感兴趣的朋友不妨多多关注一下,我们提供了公司所有开发板的所有资料,也会更新大量技术文章,欢迎大家一块学习提高!!!

    Win CE6.0 GPRS拨打电话
    开发环境:VS2005
    开发工具:OK6410-A开发板
    开发语言:C++
    实现功能:有拨号键盘,能直接拨打电话,能保存最后一个来电
    实现代码:

    1. 新建一个工程,这里工程名字为GPRSDial,做一个对话框,对话框如下:
    图片5.png
    拨号控件(Check Box)ID:IDC_Dial
    接听控件(Check Box)ID:IDC_Take
    电话号码编辑框ID:IDC_EDIT_DIALCODE
    来电号码编辑框ID:IDC_DISP_CALLCODE
    为电话号码编辑框添加成员变量str2
    来电号码编辑框添加成员变量m_content

    2.为工程添加CGPRS类,右击工程文件下的Header FilesSource 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);
    号码2UpdateData(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());



    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-1-21 13:11:19 | 显示全部楼层
    顶一个~~~~~~~~~~~··
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-4-10 13:56
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-1-21 17:21:52 | 显示全部楼层
    fj1161 发表于 2014-1-21 13:11
    顶一个~~~~~~~~~~~··

                         
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-1-21 20:13:29 | 显示全部楼层
    很好                              
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-15 14:35 , Processed in 0.168057 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.