移动终端开发VC编程实践
1、双击VC图标打开VC++6.0
也可以从开始菜单的程序打开:
打开的VC++6.0程序界面如下:
2、打开file->new,出现的对话框选择MFC AppWizard[exe],在Project name文本框输入
mygsm,如下图所示:
3、单击ok,在新的对话框中选择Single document,单击Next,如下图:
4、一直选择默认设置到最后一步点击Finish
5、在出现的窗口中选择OK,新建工程如下:
6、创建串口设置对话框,单击resourcesview,右键单击dialog,选择insert dialog,如下图
所示:
右键单击Static Text选择属性,设置Text的显示内容:
同样,设置combo box属性如下:
图7-2
图7-3
8、设计好对话框后,将对话框的名字改为IDD_SETSERIALPORTDLG,然后双击对话框,
出现创建对话框类的窗口如下:
9、点击OK,输入对话框类的名字:
10、点击OK,在出现的MFC ClassWizard界面选择Member Variables标签页,点击Add
variable…按键,增加如下变量(名字可以自己定):
把所有的变
量创建完!
11、再在MFC ClassWizard对话框中选择Message Maps标签页,在Messages选项下选
择WM_INITDIALOG,点击Add Function增加对话框初始化函数:
点击OK后,在对话框的初始化函数中增加如下语句:
BOOL CsetSerialPort::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
strComm;
CString
for(int i=0; i<20; i++)
{
+
1);
i
strComm.Format("COM%d",
m_portnum.AddString(strComm);
}
m_brate.AddString("9600");
m_brate.AddString("14400");
m_brate.AddString("19200");
m_brate.AddString("28800");
m_brate.AddString("38400");
m_brate.AddString("57600");
m_brate.AddString("115200");
m_nbits.AddString("5");
m_nbits.AddString("6");
m_nbits.AddString("7");
m_nbits.AddString("8");
m_pairty.AddString("偶校验");
m_pairty.AddString("奇校验");
m_pairty.AddString("无");
m_stopbits.AddString("1");
m_stopbits.AddString("1.5");
m_stopbits.AddString("2");
m_flowctrl.AddString("Xon/Xoff");
m_flowctrl.AddString("硬件");
m_flowctrl.AddString("无");
m_strPort="COM1"; if(m_strPort.IsEmpty())
m_strRate="9600"; if(m_strRate.IsEmpty())
m_strPairty="无";
if(m_strPairty.IsEmpty())
m_strBits="8";
if(m_strBits.IsEmpty())
if(m_strStopbits.IsEmpty()) m_strStopbits="1";
m_strFlow="无";
if(m_strFlow.IsEmpty())
m_strPort);
m_portnum.SelectString(-1,
m_strRate);
m_brate.SelectString(-1,
m_strPairty);
m_pairty.SelectString(-1,
m_nbits.SelectString(-1,
m_strBits);
m_stopbits.SelectString(-1, m_strStopbits);
m_flowctrl.SelectString(-1, m_strFlow);
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE }
在头文件中增加下面变量的定义:
12、再次选择串口设置对话框,双击OK按键,创建OnOK函数如下:
void CsetSerialPort::OnOK()
{
UpdateData();
nSel;
int
nSel = m_portnum.GetCurSel();
if(nSel > -1) m_portnum.GetLBText(nSel, m_strPort);
nSel = m_brate.GetCurSel();
if(nSel > -1) m_brate.GetLBText(nSel, m_strRate);
nSel = m_pairty.GetCurSel();
if(nSel > -1) m_pairty.GetLBText(nSel, m_strPairty);
nSel = m_nbits.GetCurSel();
if(nSel > -1) m_nbits.GetLBText(nSel, m_strBits);////
nSel = m_stopbits.GetCurSel();
if(nSel > -1) m_stopbits.GetLBText(nSel, m_strStopbits);
nSel = m_flowctrl.GetCurSel();
if(nSel > -1) m_flowctrl.GetLBText(nSel, m_strFlow);
if(m_strPort.IsEmpty() || m_strRate.IsEmpty() || m_strPairty.IsEmpty() || m_strBits.IsEmpty() || m_strStopbits.IsEmpty() || m_strFlow.IsEmpty())
{
AfxMessageBox("请正确设置端口!");
//return;
}
CDialog::OnOK();
}
13、接着创建菜单栏如下:
设置菜单名依次为:ID_SETSERIALPORT、ID_COMM_CONNECT、ID_CHECK_GSM。
14、选择串口参数设置,单击右键选择ClassWizard打开MFC ClassWizard窗口,创建
消息映射函数OnSetserialport():
void CMygsmApp::OnSetserialport()
{
dlg;
CsetSerialPort
dlg.m_strRate = m_strRate;
=
m_strBits;
dlg.m_strBits
m_strPairty;
=
dlg.m_strPairty
m_strStopbits;
dlg.m_strStopbits
=
=
m_strFlow;
dlg.m_strFlow
if(dlg.DoModal() = = IDOK)
{
dlg.m_strPort)
if(m_strPort
!=
{
AfxMessageBox("端口设置在下次启动程序时生效");
}
=
dlg.m_strPort;
m_strPort
=
dlg.m_strRate;
m_strRate
dlg.m_strBits;
=
m_strBits
dlg.m_strPairty;
=
m_strPairty
=
dlg.m_strStopbits;
m_strStopbits
dlg.m_strFlow;
m_strFlow
=
}
}
15、同理创建菜单响应函数OnCommConnect()和:OnCheckGsm():
void CMygsmApp::OnCommConnect()
{
// TODO: Add your command handler code here
int nRate, nParity, nByteSize,nStopBits;
sscanf(m_strRate, "%d", &nRate);
&nParity);
sscanf(m_strPairty,"%d",
&nByteSize);
sscanf(m_strBits,"%d",
sscanf(m_strStopbits,"%d", &nStopBits);
while (!::OpenComm(m_strPort, nRate,nParity,nByteSize,nStopBits))
{
strError;
CString
strError.Format("无法打开端口%s! 现在设置串口参数吗?", m_strPort);
if (AfxMessageBox(strError, MB_YESNO) == IDNO) return;
dlg;
CsetSerialPort
m_strPort;
=
dlg.m_strPort
dlg.m_strBits
m_strBits;
=
m_strPairty;
dlg.m_strPairty
=
m_strStopbits;
=
dlg.m_strStopbits
=
m_strFlow;
dlg.m_strFlow
if (dlg.DoModal() == IDOK)
{
dlg.m_strPort;
m_strPort
=
dlg.m_strRate;
=
m_strRate
=
dlg.m_strBits;
m_strBits
=
dlg.m_strPairty;
m_strPairty
dlg.m_strStopbits;
=
m_strStopbits
dlg.m_strFlow;
=
m_strFlow
}
else
{
return
;
}
}
CString
str;
str.Format("%s已连接, %s-%s-%s-%s", m_strPort, m_strRate, m_strBits, m_strPairty, m_strStopbits);
CMainFrame*
pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
pStatus=&pFrame->m_wndStatusBar;
CStatusBar*
pStatus->SetWindowText(str);
}
void CMygsmApp::OnCheckGsm()
{
// TODO: Add your command handler code here
(!gsmInit())
if
{
AfxMessageBox("该端口上没有发现GSM模块!");
;
return
}
AfxMessageBox("GSM模块成功响应!");
}
在mygsm.h中增加变量的定义:
16、最后将参考工程“VC++手机短信收发”下的Comm.h、Comm.cpp和Sms.h、Sms.cpp
四个文件拷贝到当前工程文件夹下,然后依次点击VC菜单中的Project—>Add To Project —>Files,在出现的对话框中选中以上四个文件将其加入到工程中。
17、在mygsm.h头文件中增加三个包含文件:
#include "Comm.h"
#include "Sms.h"
#include "setSerialPort.h"
18、编译运行,查看程序运行结果,如有错误请修正错误后再编译运行!