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

📄 gprsdlg.cpp

📁 开发环境为EVC++,这个是一个我的一个简单的拨号程序,是通过串口接的GPRS模块,有开发WinCE下的同志可以以次入门
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*	rRect.left=20+uiStep*1;
	rRect.right=rRect.left+uiWidth;
	rRect.bottom=rRect.top+uiHight;

	m_GprsDigitalbutton=new CUIButton;
	if(!(m_GprsDigitalbutton->Create(_T("GPRS DIGITAL"),uiBtnStyle,rRect,this,ID_BTN_GPRSDIGITAL)))
	{
		MessageBox(_T("Create m_GprsDigitalbutton  Fails!"));
	}
	m_GprsDigitalbutton->SetNormalTextColor(RGB(0,0,0));*/
	//m_GprsDigitalbutton->ShowWindow(SW_HIDE);
//	m_GprsDigitalbutton->SetWindowText(_T("GPRS DIGITAL"));

	///////////////////////////////////////////
	rRect.left=20+uiStep*1;
	rRect.right=rRect.left+uiWidth;
	rRect.bottom=rRect.top+uiHight;

	m_GprsDiaHaltbutton=new CUIButton;
	if(!(m_GprsDiaHaltbutton->Create(_T("HALT"),uiBtnStyle,rRect,this,ID_BTN_GPRSHALT)))
	{
		MessageBox(_T("Create m_GprsDiaHoldbutton  Fails!"));
	}
	m_GprsDiaHaltbutton->SetNormalTextColor(RGB(0,0,0));
	//m_GprsDigitalbutton->ShowWindow(SW_HIDE);
	m_GprsDiaHaltbutton->SetWindowText(_T("HALT"));

	
	///////////////////////////////////////////

	rRect.left=20+uiStep*2;
	rRect.right=rRect.left+uiWidth;
	rRect.bottom=rRect.top+uiHight;

	m_Closebutton=new CUIButton;
	if(!(m_Closebutton->Create(_T("Close"),uiBtnStyle,rRect,this,ID_BTN_GPRSCLOSE)))
	{
		MessageBox(_T("Create m_Closebutton  Fails!"));
	}
	m_Closebutton->SetNormalTextColor(RGB(0,0,0));
	m_Closebutton->SetWindowText(_T("CLOSE"));


	///////////////////////////////////////////

	rRect.left=20+uiStep*3;
	rRect.right=rRect.left+uiWidth;
	rRect.bottom=rRect.top+uiHight;

	m_Okbutton=new CUIButton;
	if(!(m_Okbutton->Create(_T("OK"),uiBtnStyle,rRect,this,ID_BTN_GPRSOK)))
	{
		MessageBox(_T("Create m_Okbutton  Fails!"));
	}
	m_Okbutton->SetNormalTextColor(RGB(0,0,0));
	m_Okbutton->SetWindowText(_T("Exit"));
}

void CGPRSDlg::OnGprsButtonProc()
{
	int iBtnID=0;
	CWnd *pWnd = GetFocus();
	iBtnID=pWnd->GetDlgCtrlID();
	switch(iBtnID)
	{
	case (ID_BTN_GPRSDIA):
		{
			GprsDiaProc();
			/***************************************/
			if(m_ComPortOpen)
			{
				m_GprsDiabutton->EnableWindow(FALSE);	
			}
		}
		break;
	case (ID_BTN_GPRSDIGITAL):
		GprsDigitalProc();
		break;
	case (ID_BTN_GPRSOK):
		if(m_ComPortOpen)
		{
			//如果打开了就首先要关闭
			m_GprsDia.ClosePort();
		}
		OnOK();
		break;
	case (ID_BTN_GPRSHALT):
		GprsDiaHalt();
		break;
	case (ID_BTN_GPRSCLOSE):
		if(m_ComPortOpen)
		{
			//如果打开了就首先要关闭
			if(m_GprsDia.ClosePort())
			{
				m_ComPortOpen=FALSE;
				m_GprsDiabutton->EnableWindow(TRUE);
			}
		}
		break;
	default:
		break;
	}
}

void CGPRSDlg::OnOK() 
{
	// TODO: Add extra validation here
	 CDialog::OnOK();
}
void CGPRSDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
//	CDialog::OnCancel();
}

void CGPRSDlg::GprsDiaProc()
{
	UINT uiItemIndex=0;
	CString csStrPort("");
	CString csStrBaudRate("");
	CString csStrAtCmd("");
	CString csStrEdit("");
	LPTSTR lpsz = new TCHAR[1024];
	int iEditLinelen=0;




	uiItemIndex=m_ComPortComBox->GetCurSel();
	m_ComPortComBox->GetLBText(uiItemIndex,csStrPort);//get port name

	uiItemIndex=m_BaudRateComBox->GetCurSel();
	m_BaudRateComBox->GetLBText(uiItemIndex,csStrBaudRate);//get port name
	if(!m_ComPortOpen)
	{
		if(m_GprsDia.OpenPort(CSTRToLPTSTR(csStrPort),CSTRToLPTSTR(csStrBaudRate)))
		{
			m_ComPortOpen=TRUE;
		}
		else
		{
			return;
		}
	}
	else
	{
		//如果打开了就首先要关闭
		m_GprsDia.ClosePort();
		if(m_GprsDia.OpenPort(CSTRToLPTSTR(csStrPort),CSTRToLPTSTR(csStrBaudRate)))
		{
			m_ComPortOpen=TRUE;
		}
		else
		{
			return;
		}
	}
	//获取电话号码然后进行发送
	iEditLinelen=m_DiaNum->GetLine(0,lpsz);
	csStrEdit=lpsz;
	csStrEdit=csStrEdit.Mid(0,iEditLinelen);
	//AT CMD
	csStrAtCmd=_T("ATD ");
	csStrAtCmd+=csStrEdit;
	csStrAtCmd+=_T(";");
	csStrAtCmd+=_T("\r\n");

	if(!m_ReadComPortThreadIsInit)//创建一次线程
	{
		ReadComPortDataThreadStart();
		m_ReadComPortThreadIsInit=TRUE;
	}
#ifdef _DEBUG
	//两个函数是一样的作用在调试窗口中输出信息
	TRACE(_T("AT CMD:"));
	AfxOutputDebugString(csStrAtCmd);
#endif
	//first send a AT cmd
	m_GprsDia.SendATCmd(_T("AT\r\n"));
	Sleep(1000);//delay 1s
	//send a atd cmd
	m_GprsDia.SendATCmd(CSTRToLPTSTR(csStrAtCmd));

}

void CGPRSDlg::GprsDigitalProc()
{
	
}

void CGPRSDlg::CreateComBox()
{
	CRect rRect;
	int iCxScreen=0;
	int iCyScreen=0;
	int iStaticWidth;
	int iStaticHight;
	iCxScreen=GetSystemMetrics(SM_CXSCREEN);
	iCyScreen=GetSystemMetrics(SM_CYSCREEN);

	iStaticWidth=100;
	iStaticHight=100;

	//显示串口
	rRect.left=20+80;
	rRect.top=20;
	rRect.right=rRect.left+iStaticWidth;
	rRect.bottom=rRect.top+iStaticHight;

	m_ComPortComBox=new CUIComBox();
	m_ComPortComBox->Init(rRect,this,IDC_COMBO_COMPORT,NULL);

	//显示波特率
	rRect.left=20+80;
	rRect.top=42;
	rRect.right=rRect.left+iStaticWidth;
	rRect.bottom=rRect.top+iStaticHight;

	m_BaudRateComBox=new CUIComBox();
	m_BaudRateComBox->Init(rRect,this,IDC_COMBO_COMBARDRATE,NULL);

	////////////////////
	InsertComBoxItem();
}

void CGPRSDlg::InsertComBoxItem()
{
	int i=0;
	TCHAR wcBuff[50];
	CString csStrBaudRate("");

	m_ComPortComBox->AddString(TEXT("COM1"));
	m_ComPortComBox->AddString(TEXT("COM2"));
	m_ComPortComBox->AddString(TEXT("COM3"));
	m_ComPortComBox->AddString(TEXT("COM4"));
	m_ComPortComBox->AddString(TEXT("COM5"));
	m_ComPortComBox->AddString(TEXT("COM6"));
	m_ComPortComBox->AddString(TEXT("COM7"));
	m_ComPortComBox->SetCurSel(0);
	/******************************************
	*   默认的COM3
	******************************************/
	m_ComPortComBox->SetCurSel(0);

	for(i=0;i<9;i++)
	{
		_itow(gBaudRate[i],wcBuff,10);
		csStrBaudRate=wcBuff;
		m_BaudRateComBox->AddString(csStrBaudRate);

	}
	m_BaudRateComBox->SetCurSel(0);
	/******************************************
	*   默认的115200
	******************************************/
	m_BaudRateComBox->SetCurSel(8);

	if(!m_bIsShowComPort)//不显示时
	{
		m_ComPortComBox->ShowWindow(SW_HIDE);
		m_BaudRateComBox->ShowWindow(SW_HIDE);
	}

}

void CGPRSDlg::CreateEdit()
{
	CRect rRect;
	int iCxScreen=0;
	int iCyScreen=0;
	int iStaticWidth;
	int iStaticHight;
	iCxScreen=GetSystemMetrics(SM_CXSCREEN);
	iCyScreen=GetSystemMetrics(SM_CYSCREEN);

	iStaticWidth=280;
	iStaticHight=20;

	//显示电话号码
	rRect.left=20+80;
	rRect.top=64;
	rRect.right=rRect.left+iStaticWidth;
	rRect.bottom=rRect.top+iStaticHight;

	m_DiaNum=new CUIEdit();
	m_DiaNum->Init(rRect,this,IDC_EDIT_DIANUM,NULL);
	
}

LPTSTR CGPRSDlg::CSTRToLPTSTR(CString csStrString)
{
  LPTSTR lpsz = new TCHAR[csStrString.GetLength()+1];
  _tcscpy(lpsz, csStrString);
  return lpsz;
}

void CGPRSDlg::ReadComPortDataThreadStart() 
{
   HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ReadComPortThread, this, 0, NULL);
   if(!hThread)
   {
#ifdef _DEBUG
	TRACE(_T("Create ReadComPortThreadProc Failed !"));
#endif
   }
   CloseHandle(hThread);
}
void CGPRSDlg::GprsDiaHalt()
{
	//挂断
	CString csStrAtCmd("");
	//AT CMD
	csStrAtCmd=_T("ATH");
	csStrAtCmd+=_T("\r\n");

	m_GprsDia.SendATCmd(CSTRToLPTSTR(csStrAtCmd));
}
/*******************************************************************************
*              Thread
********************************************************************************/
DWORD ReadComPortThread(CGPRSDlg *pCGPRSDlg)
{
	pCGPRSDlg->ReadComPortThreadProc();
	return(0);
}

void CGPRSDlg::ReadComPortThreadProc()
{
	while(1)
	{
		LPTSTR  ptsComPortData=_T("");
		CString csStrComStateTitle("");
		m_GprsDia.ReadData(&ptsComPortData);
		csStrComStateTitle=ptsComPortData;
		m_StaticDiaState->SetCaption(CSTRToLPTSTR(csStrComStateTitle),RGB(0,0,255),15,0);	
		Sleep(1000);//相当于一个定时器
	}
#ifdef _DEBUG
	TRACE(_T("ReadComPortThreadProc Exit!"));
#endif
}

⌨️ 快捷键说明

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