📄 msglistsendwnd.cpp
字号:
// MsgListSendWnd.cpp : implementation file
//
#include "stdafx.h"
#include "msgdemo.h"
#include "MsgListSendWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMsgListSendWnd
BEGIN_EVENTSINK_MAP(CMsgListSendWnd, CWnd)
//{{AFX_EVENTSINK_MAP(CTestactivexDlg)
ON_EVENT(CMsgListSendWnd, IDC_SMSX, 4 /* OnConnectResult */, OnConnectResultSmsx, VTS_I4)
ON_EVENT(CMsgListSendWnd, IDC_SMSX, 6 /* OnSendMsg */, OnSendMsgSmsx, VTS_I2 VTS_I4)
// ON_EVENT(CMsgDemoView, IDC_SMSX1, 5 /* OnRecvMsg */, OnOnRecvMsgSmsx1, VTS_I2)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
CMsgListSendWnd::CMsgListSendWnd()
{
nMaxNum = 0;
bConnected = FALSE;
}
CMsgListSendWnd::~CMsgListSendWnd()
{
}
//IMPLEMENT_DYNCREATE(CMsgListSendWnd, CWnd)
BEGIN_MESSAGE_MAP(CMsgListSendWnd, CWnd)
//{{AFX_MSG_MAP(CMsgListSendWnd)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMsgListSendWnd message handlers
CString szPortName="COM1";
CString szAccessCode="170223117220192";
void CMsgListSendWnd::InitDevice()//初始化设备
{
//创建通讯空间
m_hSms.Create("",WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),AfxGetApp()->GetMainWnd(),IDC_SMSX);
m_hSms.Init();
m_hSms.ConnectModem(szPortName,57600,szAccessCode);
m_hSms.ShowWindow(SW_HIDE);
//传见结构体初始化对象
m_Info = new MsgInfo[500];
for(int i=0;i<500;i++)
{
m_Info[i].bAutoSend=FALSE;
m_Info[i].bSend=TRUE;
m_Info[i].nHour=0;
m_Info[i].nNum=0;
m_Info[i].szContent.Empty();
m_Info[i].szDes.Empty();
m_Info[i].szId.Empty();
}
//读取INI文件配置内容
ReadIniFileVal();
//打开数据源
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=JHWY.mdb","","",adModeUnknown);///连接数据库
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; }
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
exit(0);
}
}
BOOL CMsgListSendWnd::ReadIniFileVal()
{
//读取固定报警信息内容
CIniFile IniFile;
CString str,path;
path=AfxGetApp()->m_pszHelpFilePath;
str=AfxGetApp()->m_pszExeName;
path=path.Left(path.GetLength()-str.GetLength()-4);
IniFile.SetName("MsgList");
IniFile.SetPath(path);
BOOL bExist=IniFile.OpenIniFileForRead();
if(bExist)
{
CString strId,strTolVal;
for(int i=0;i<500;i++)
{
strId.Format("%.4d",i+1);
strTolVal.Empty();
IniFile.GetItemString("Data",strId,strTolVal);
if(!strTolVal.IsEmpty())
DataProcessIniVal(strTolVal,FALSE);
}
}
//读取固定发送信息
IniFile.SetName("SetTimerList");
IniFile.SetPath(path);
bExist=IniFile.OpenIniFileForRead();
if(bExist)
{
CString strId,strTolVal;
for(int i=0;i<50;i++)
{
strId.Format("%.4d",i+1);
strTolVal.Empty();
IniFile.GetItemString("Data",strId,strTolVal);
if(!strTolVal.IsEmpty())
DataProcessIniVal(strTolVal,TRUE);
}
return TRUE;
}
return FALSE;
}
void CMsgListSendWnd::DataProcessIniVal(CString strVal,BOOL bAutoSend)
{
CString szTemp;
szTemp=strVal;
CString str[10];
int nSize=1;
while(1)
{
int nCount=szTemp.Find(';');
if(nCount==-1)
break;
str[nSize]=szTemp.Left(nCount);
szTemp=szTemp.Right(szTemp.GetLength()-nCount-1);
nSize++;
}
str[nSize]=szTemp;
//Reset the temp value
if(!str[1].IsEmpty())
{
m_Info[nMaxNum].szId=str[1];
m_Info[nMaxNum].szContent=str[2];
m_Info[nMaxNum].nNum=atoi(str[3]);
if(str[4]=="发送")
m_Info[nMaxNum].bSend=TRUE;
else
m_Info[nMaxNum].bSend=FALSE;
m_Info[nMaxNum].szDes=str[5];
if(bAutoSend)//固定信息发送
{
DataCString(str[5]);
m_Info[nMaxNum].bAutoSend=TRUE;
}
nMaxNum++;
}
}
int CMsgListSendWnd::GetMaxBuffNum()
{
return nMaxNum;
}
void CMsgListSendWnd::DataCString(CString strVal)
{
CString szTemp;
szTemp=strVal;
CString str[30];
int nSize=1;
while(1)
{
int nCount=szTemp.Find(',');
if(nCount==-1)
break;
str[nSize]=szTemp.Left(nCount);
szTemp=szTemp.Right(szTemp.GetLength()-nCount-1);
nSize++;
}
str[nSize]=szTemp;
//Insert ListCtrl Content
int nCount=0;
for(int i=0;i<30;i++)
{
if(!str[i+1].IsEmpty())
nCount++;
else
break;
}
//
this->m_Info[nMaxNum].nHour=nCount;
for(i=0;i<nCount;i++)
this->m_Info[nMaxNum].nHourBuff[i]=atoi(str[i+1]);
}
BOOL CMsgListSendWnd::SetMsgListContent(CString strId)
{
BOOL bExist;
int nPos=0;
for(int i=0;i<500;i++)
{
if(strcmp(this->m_Info[i].szId,strId)==0)
{
bExist=TRUE;
nPos=i;
break;
}
}
//发送消息
if(bConnected)
{
CString strNum,strContent;
if(m_Info[nPos].bSend)
{
strNum.Format("%d",m_Info[nPos].nNum);
strContent=m_Info[nPos].szContent;
m_hSms.SendMsg(strNum,strContent,0);
}
}
return bExist;
}
void CMsgListSendWnd::OnConnectResultSmsx(long Status)
{
if (Status==0)
bConnected=TRUE;
else
bConnected=FALSE;
}
void CMsgListSendWnd::OnSendMsgSmsx(short Result,long MsgIndex)
{
// TODO: Add your control notification handler code here
if (Result==0)
::AfxMessageBox("短信发送成功! ");
else
::AfxMessageBox("短信发送失败! ");
}
void CMsgListSendWnd::JudgeTimeToSendMsg()//判断时间然后发送消息
{
CTime Tm=CTime::GetCurrentTime();
CString strVal;
if(Tm.GetMinute()==0 && Tm.GetSecond()==0)
{
for(int i=0;i<this->nMaxNum;i++)
{
if(this->m_Info[i].bAutoSend)
{
for(int j=0;j<m_Info[i].nHour;j++)
{
if(Tm.GetHour()==m_Info[i].nHourBuff[j])
{
strVal.Format("%.2f",GetRealVal(m_Info[i].szId));
//发送消息
if(bConnected)
{
CString strNum,strContent;
if(m_Info[i].bSend)
{
strNum.Format("%d",m_Info[i].nNum);
strContent=m_Info[i].szContent;
strContent+=strVal;
m_hSms.SendMsg(strNum,strContent,0);
}
}
}
}
}
}
}
}
double CMsgListSendWnd::GetRealVal(CString strVal)//获得定时发送数据实时内容
{
double dValue = 0.00f;
CString strId,szVal;
//read data from database and save to ini file
_RecordsetPtr m_pRecordset;
_variant_t RecordsAffected;
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pConnection->put_ConnectionTimeout(long(5));
//开关量表
m_pRecordset->Open("select * from RealElecenergy",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
while(!m_pRecordset->adoEOF)
{
_variant_t var = m_pRecordset->GetCollect("ID");
if(var.vt != VT_NULL)
{
strId = (LPCSTR)_bstr_t(var);
if(strcmp(strId,strVal)==0)
{
var = m_pRecordset->GetCollect("RealValue");
szVal = (LPCSTR)_bstr_t(var);
dValue = (double)atof(szVal);
}
}
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
return dValue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -