⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsmdlg.cpp

📁 通过串口控制SIM300Z实现短信息的收发. 并且是基于对话框实现的.
💻 CPP
字号:
// GSMDlg.cpp : implementation file
//

#include "stdafx.h"
#include <string.h>
#include "GSM.h"
#include "GSMDlg.h"
#include  "Comm.h"
#include  "Sms.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGSMDlg dialog

CGSMDlg::CGSMDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CGSMDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGSMDlg)
	m_StrPhoneNum = _T("");
	m_StrMsg = _T("");
	m_IntIdex = 1;
	m_strHead = _T("");
	m_strCom = _T("");
	m_strRule = _T("");
	m_strEnd = _T("");
	m_str5 = _T("");
	m_str6 = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CGSMDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGSMDlg)
	DDX_Control(pDX, IDC_LIST2, m_LIstMsg);
	DDX_Text(pDX, IDC_EDIT3, m_StrPhoneNum);
	DDV_MaxChars(pDX, m_StrPhoneNum, 13);
	DDX_Text(pDX, IDC_EDIT2, m_StrMsg);
	DDV_MaxChars(pDX, m_StrMsg, 140);
	DDX_Text(pDX, IDC_EDIT4, m_IntIdex);
	DDV_MinMaxInt(pDX, m_IntIdex, 1, 50);
	DDX_Text(pDX, IDC_EDHead, m_strHead);
	DDV_MaxChars(pDX, m_strHead, 139);
	DDX_Text(pDX, IDC_EDCom, m_strCom);
	DDV_MaxChars(pDX, m_strCom, 139);
	DDX_Text(pDX, IDC_EDRule, m_strRule);
	DDV_MaxChars(pDX, m_strRule, 139);
	DDX_Text(pDX, IDC_EDend, m_strEnd);
	DDV_MaxChars(pDX, m_strEnd, 139);
	DDX_Text(pDX, IDC_EDIT5, m_str5);
	DDX_Text(pDX, IDC_EDIT6, m_str6);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CGSMDlg, CDialog)
	//{{AFX_MSG_MAP(CGSMDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTGetMSG, OnBTGetMSG)
	ON_BN_CLICKED(IDC_BUTTON3, OnPrintMsg)
	ON_BN_CLICKED(IDC_BUTTON2, OnSendMsg)
	ON_BN_CLICKED(IDC_BUTTON4, OnOpenCom)
	ON_BN_CLICKED(IDC_BUTTON5, OnDelMsg)
	ON_LBN_DBLCLK(IDC_LIST2, OnGetMsg)
	ON_BN_CLICKED(IDC_BUTTON1, OnShutCom)
	ON_BN_CLICKED(IDC_BUTTON6, OnGetIndex)
	ON_BN_CLICKED(IDC_BUTTON7, OnSend1)
	ON_BN_CLICKED(IDC_BUTTON8, Onsend2)
	ON_BN_CLICKED(IDC_BUTTON9, Onsend3)
	ON_BN_CLICKED(IDC_BUTTON10, Onsend5)
	ON_BN_CLICKED(IDC_BUTTON11, Onsend6)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGSMDlg message handlers

BOOL CGSMDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_bGSMOpened = FALSE ;
	 SetDlgItemText(IDC_STATICMsg,"Com closed ......");
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CGSMDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CGSMDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CGSMDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CGSMDlg::OnBTGetMSG() 
{
	// TODO: Add your control notification handler code here

	int pmsg_Len ;
	CString tmp ;
    CString stmp;
	 if(!m_bGSMOpened)
	  {
      MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	  return ;
	  }
	m_msg.len=0 ;
	memset(m_msg.data,0,7000) ;
	m_LIstMsg.ResetContent( );
    if( gsmReadMessageList())
	{
      while(gsmGetResponse(&m_msg)==GSM_WAIT);
	}
    pmsg_Len = gsmParseMessageList(m_sms,&m_msg);
    for(int i=0;i<pmsg_Len ;i++)
	{
		tmp.Format("%d| ",m_sms[i].index) ;
		stmp=tmp ;
		tmp.Format("Time: %s| ",m_sms[i].TP_SCTS);
		stmp+=tmp ;
		tmp.Format("Phone: %s", m_sms[i].TPA);
		stmp+=tmp ;
		 m_LIstMsg.AddString(stmp) ;
		 UpdateData(FALSE) ;
	}
}

void CGSMDlg::OnPrintMsg() 
{
	// TODO: Add your control notification handler code here

}

//  将一条优惠卷拆粉成多条信息 且每条信息不超过 140 字节 
//   且信息头分为 上下四位 
 void CGSMDlg::SendSms()
 {
    	char Buf[100] ;
	    UpdateData() ;	  
	    if(!m_bGSMOpened)
		{
          MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	     return ;
		}
	       sprintf(m_Smsend.SCA,"8613800758500");
	        m_Smsend.TP_DCS = GSM_UCS2  ;
			sprintf(Buf,"输入的字节 %d ",m_strEnd.GetLength());
           if(m_strEnd.GetLength()>139)
		   {
			   MessageBox("你输入的字节大于140字节!");
			   return  ;
		   }
          sprintf((m_Smsend.TP_UD+1),"%s",m_strEnd) ;
           m_Smsend.TP_UD[0] = '4' ;
		   sprintf(m_Smsend.TPA,"%s",m_StrPhoneNum) ;
		   strcat(Buf,"确认发送?") ;
		  if(MessageBox(Buf,NULL,MB_YESNO)==IDYES)
		  {
	         if(gsmSendMessage(&m_Smsend)>0) 
			
	         MessageBox("send successful!!","waning",MB_OK) ;
		   	else
              MessageBox("send failed!!","waning",MB_OK) ;
		  }
         OnShutCom() ;	 

 }
void CGSMDlg::OnSendMsg() 
{
	// TODO: Add your control notification handler code here

   SendSms() ;
}

void CGSMDlg::OnOpenCom() 
{
	// TODO: Add your control notification handler code here
  if(!OpenComm("COM1",9600, NOPARITY, 8, ONESTOPBIT))
	{
      MessageBox("OpenCom Error","waning",MB_OK) ;
	}
  
  if(gsmInit())
  {
	  m_bGSMOpened = TRUE ;
	 SetDlgItemText(IDC_STATICMsg,"Com opened and GSM started.......");
  }
	 else
  {
    MessageBox("Gsm/gprs not start ",NULL ,MB_OK) ; 
  }
}

void CGSMDlg::OnDelMsg() 
{
	// TODO: Add your control notification handler code here
   	int Idex=0 ;
	CString tmp ;
	char buf[4];
	if(!m_bGSMOpened)
	  {
      MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	  return ;
	  }
	Idex = m_LIstMsg.GetCurSel() ;
   if(Idex <0) return ;
   else
   {
	m_LIstMsg.GetText(Idex,tmp) ; 
    buf[0]=tmp[0];
	buf[1]=tmp[1];
	buf[2]=tmp[2];
	buf[3]=tmp[3];
    Idex=0 ;
	for(int i=0;i<3;i++)
	{ 
		if(buf[i]!='|') Idex = Idex*10 + (buf[i]-0x30);
		else break ;
	}
	if(MessageBox("确认删除?",NULL,MB_YESNO)==IDYES)
	{
	 gsmDeleteMessage(Idex);
	}
   }
}

void CGSMDlg::OnGetMsg() 
{
	// TODO: Add your control notification handler code here
	CString tmp ;
	int Idex=0 ;
	Idex = m_LIstMsg.GetCurSel() ;
    tmp.Format("%s",m_sms[Idex].TP_UD);
    SetDlgItemText(IDC_EDIT1,tmp);
    UpdateData(FALSE) ;
}

void CGSMDlg::OnShutCom() 
{
	// TODO: Add your control notification handler code here
	
	   CloseComm() ;
	   m_bGSMOpened = FALSE ;

    SetDlgItemText(IDC_STATICMsg,"Com closed ......");
}

void CGSMDlg::OnGetIndex() 
{
	// TODO: Add your control notification handler code here
	char Buf[15];
	int x;
	if(!m_bGSMOpened)
	  {
      MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	  return ;
	  }
    
	 memset(m_msg.data,0,7000);
//	 memset(m_smsIdex.TP_UD,0,160);
	 m_msg.len=0;
	  UpdateData();
//	 m_IntIdex= ;
	 
	 m_smsIdex.index = m_IntIdex;

	 sprintf(Buf,"AT+CMGR=%d\r",m_IntIdex);
//	 m_IntIdex++ ;
     WriteComm(Buf,10);
	
     while(gsmGetResponse(&m_msg)==GSM_WAIT);
	 
	 x=gsmParseMessageMsg(&m_smsIdex,&m_msg);
	 if(x>0) {
	    CString tmp,stmp;
	    tmp.Format("%d| ",m_smsIdex.index) ;
		stmp+=tmp ;
		tmp.Format("Time: %s| ",m_smsIdex.TP_SCTS);
		stmp+=tmp ;
		tmp.Format("Phone: %s", m_smsIdex.TPA);
		stmp+=tmp ;
	    m_LIstMsg.AddString(stmp) ;
	//	for(int j =0 ; j<m_smsIdex.TP_UDLen ;j++)
	//	if(!m_smsIdex.TP_UD[j]) m_smsIdex.TP_UD[j]=10 ;
       // m_smsIdex.TP_UD[0]=0xc4;
        tmp.Format("%s",m_smsIdex.TP_UD);
        SetDlgItemText(IDC_EDIT1,tmp);
		UpdateData(FALSE) ;
	 }
	 //m_msg  
}

void CGSMDlg::OnSend1() 
{
	// TODO: Add your control notification handler code here
		char Buf[100] ;
	    UpdateData() ;	  
	    if(!m_bGSMOpened)
		{
          MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	     return ;
		}
	       sprintf(m_Smsend.SCA,"8613800758500");
	        m_Smsend.TP_DCS = GSM_UCS2  ;
			sprintf(Buf,"输入的字节 %d ",m_strHead.GetLength());
           if(m_strHead.GetLength()>139)
		   {
			   MessageBox("你输入的字节大于140字节!");
			   return  ;
		   }
          sprintf((m_Smsend.TP_UD),"%s",m_strHead) ;
        //   m_Smsend.TP_UD[0] = '1'  ;
		   sprintf(m_Smsend.TPA,"%s",m_StrPhoneNum) ;
		   strcat(Buf,"确认发送?") ;
		  if(MessageBox(Buf,NULL,MB_YESNO)==IDYES)
		  {
	         if(gsmSendMessage(&m_Smsend)>0) 
			
	         MessageBox("send successful!!","waning",MB_OK) ;
		   	else
              MessageBox("send failed!!","waning",MB_OK) ;
		  }
         OnShutCom() ;	 

}

void CGSMDlg::Onsend2() 
{
	// TODO: Add your control notification handler code here
		char Buf[100] ;
	    UpdateData() ;	  
	    if(!m_bGSMOpened)
		{
          MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	     return ;
		}
	       sprintf(m_Smsend.SCA,"8613800758500");
	        m_Smsend.TP_DCS = GSM_UCS2  ;
			sprintf(Buf,"输入的字节 %d ",m_strCom.GetLength());
           if(m_strCom.GetLength()>139)
		   {
			   MessageBox("你输入的字节大于140字节!");
			   return  ;
		   }
          sprintf((m_Smsend.TP_UD),"%s",m_strCom) ;
         //  m_Smsend.TP_UD[0] = '2';
		   sprintf(m_Smsend.TPA,"%s",m_StrPhoneNum) ;
		   strcat(Buf,"确认发送?") ;
		  if(MessageBox(Buf,NULL,MB_YESNO)==IDYES)
		  {
	         if(gsmSendMessage(&m_Smsend)>0) 
			
	         MessageBox("send successful!!","waning",MB_OK) ;
		   	else
              MessageBox("send failed!!","waning",MB_OK) ;
		  }
         OnShutCom() ;	 

}

void CGSMDlg::Onsend3() 
{
	// TODO: Add your control notification handler code here
		char Buf[100] ;
	    UpdateData() ;	  
	    if(!m_bGSMOpened)
		{
          MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	     return ;
		}
	       sprintf(m_Smsend.SCA,"8613800758500");
	        m_Smsend.TP_DCS = GSM_UCS2  ;
			sprintf(Buf,"输入的字节 %d ",m_strRule.GetLength());
           if(m_strRule.GetLength()>139)
		   {
			   MessageBox("你输入的字节大于140字节!");
			   return  ;
		   }
          sprintf((m_Smsend.TP_UD),"%s",m_strRule) ;
         //  m_Smsend.TP_UD[0] = '3' ;
		   sprintf(m_Smsend.TPA,"%s",m_StrPhoneNum) ;
		   strcat(Buf,"确认发送?") ;
		  if(MessageBox(Buf,NULL,MB_YESNO)==IDYES)
		  {
	         if(gsmSendMessage(&m_Smsend)>0) 
			
	         MessageBox("send successful!!","waning",MB_OK) ;
		   	else
              MessageBox("send failed!!","waning",MB_OK) ;
		  }
         OnShutCom() ;	 

}

void CGSMDlg::Onsend5() 
{
	// TODO: Add your control notification handler code here
		char Buf[100] ;
	    UpdateData() ;	  
	    if(!m_bGSMOpened)
		{
          MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	     return ;
		}
	       sprintf(m_Smsend.SCA,"8613800758500");
	        m_Smsend.TP_DCS = GSM_UCS2  ;
			sprintf(Buf,"输入的字节 %d ",m_str5.GetLength());
           if(m_str5.GetLength()>139)
		   {
			   MessageBox("你输入的字节大于140字节!");
			   return  ;
		   }
          sprintf((m_Smsend.TP_UD),"%s",m_str5) ;
         //  m_Smsend.TP_UD[0] = '5' ;
		   sprintf(m_Smsend.TPA,"%s",m_StrPhoneNum) ;
		   strcat(Buf,"确认发送?") ;
		  if(MessageBox(Buf,NULL,MB_YESNO)==IDYES)
		  {
	         if(gsmSendMessage(&m_Smsend)>0) 
			
	         MessageBox("send successful!!","waning",MB_OK) ;
		   	else
              MessageBox("send failed!!","waning",MB_OK) ;
		  }
         OnShutCom() ;	 
}

void CGSMDlg::Onsend6() 
{
	// TODO: Add your control notification handler code here
		char Buf[100] ;
	    UpdateData() ;	  
	    if(!m_bGSMOpened)
		{
          MessageBox("GSM还没启动或者没连接","waning",MB_OK) ;
	     return ;
		}
	       sprintf(m_Smsend.SCA,"8613800758500");
	        m_Smsend.TP_DCS = GSM_UCS2  ;
			sprintf(Buf,"输入的字节 %d ",m_str6.GetLength());
           if(m_str6.GetLength()>139)
		   {
			   MessageBox("你输入的字节大于140字节!");
			   return  ;
		   }
          sprintf((m_Smsend.TP_UD),"%s",m_str6) ;
        //   m_Smsend.TP_UD[0] = '5' ;
		   sprintf(m_Smsend.TPA,"%s",m_StrPhoneNum) ;
		   strcat(Buf,"确认发送?") ;
		  if(MessageBox(Buf,NULL,MB_YESNO)==IDYES)
		  {
	         if(gsmSendMessage(&m_Smsend)>0) 
			
	         MessageBox("send successful!!","waning",MB_OK) ;
		   	else
              MessageBox("send failed!!","waning",MB_OK) ;
		  }
         OnShutCom() ;	 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -