class CWeatherView : public CFormView
{
protected: // 仅从序列化创建
CWeatherView();
DECLARE_DYNCREATE(CWeatherView)
public:
enum{ IDD = IDD_WEATHER_FORM };
// 属性
public:
CChatDoc* GetDocument() const;
// 操作
public:
BOOL ReceiveNewSMS(int A_Type, ULONG cbEntryID, LPENTRYID lpEntryID);
private:
BOOL SmsGetMessageDetail(LPMESSAGE pMsg, UINT nAlertType);
BOOL SmsGetMessage(LPMAPIFOLDER pFolder, UINT nAlertType, LPMESSAGE *pMsg);
BOOL SmsGetFolder(LPMDB pStore, UINT Folder_Style, LPMAPIFOLDER *pFolder);
BOOL SmsGetStore(LPMAPISESSION pSession, LPMAPITABLE pTable, LPMDB *pStore);
BOOL SmsGetStorgeTable(LPMAPISESSION pSession, LPMAPITABLE *pTable);
BOOL SmsBeginSession(LPMAPISESSION *pSession);
BOOL SmsDelMessage(LPMAPIFOLDER pFolder, LPENTRYLIST lpMsgList);
BOOL SmsClearAll(LPMAPIFOLDER pFolder);
BOOL SmsCreateMessage(LPMAPIFOLDER pFolder, LPMESSAGE *p_msg);
BOOL SendSmsMessage(LPMESSAGE p_msg);
BOOL SmsMoveMessage(LPMAPIFOLDER pSrcFolder, LPENTRYLIST lpMsgList, LPMAPIFOLDER pDestFolder);
BOOL SmsSetMessageProp(LPMESSAGE p_msg, CString text, CString Recipient);
BOOL SmsSetMessageTextProp(LPMESSAGE p_msg);
BOOL SmsCreateFolder(LPMAPIFOLDER pFolder, CString FoldName, LPMAPIFOLDER *pNewFolder);
BOOL SendMessage(LPMAPIFOLDER pFolder, CString text, CString Recipient);
BOOL Advise(LPMDB pStore);
BOOL UnAdvise(LPMDB pStore);
LPMAPISESSION m_pSession;
LPMAPITABLE m_pTable;
LPMDB m_pStore;
LPMAPIFOLDER m_pFolder;
LPMAPIFOLDER m_pChildFolder;
LPMAPIFOLDER m_pSendFolder;
LPMESSAGE m_pMsg;
std::list <SBinary> m_list;
CString m_str_Recipient;
BOOL B_DebugMachine;
CString m_strRingStyle;
void clear_list();
// 重写
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual void OnInitialUpdate(); // 构造后第一次调用
// 实现
public:
virtual ~CWeatherView();
#ifdef _DEBUG
virtual void AssertValid() const;
#endif
protected:
CString m_sServerSite;
CString m_sServerPort;
// 生成的消息映射函数
protected:
DECLARE_MESSAGE_MAP()
public:
CListCtrl m_lstWeatherItem;
CListBox m_lstWeatherItem1;
public:
void InitImglist(void);
public:
void InitListCtr(void);
public:
CImageList* m_pImageList;
public:
void ShowWeatherMyCity(void);
public:
afx_msg void OnImageApChina();
public:
afx_msg void OnImageCloudChina();
public:
afx_msg void OnImageRainChina();
public:
afx_msg void OnImageRainSouth();
public:
CTabCtrl m_tabWeather;
public:
void InitTabCtrl(void);
public:
afx_msg void OnTcnSelchangeTabWeather(NMHDR *pNMHDR, LRESULT *pResult);
public:
CComboBox m_cmbDate;
public:
void ShowWeatherAllCity(void);
public:
void ShowWeatherChina(void);
public:
void InitCombox(void);
public:
void ShowWeatherFoul(void);
public:
int UpdateWeather(void);
public:
void OnSelectTab(void);
public:
afx_msg void OnCbnSelchangeComboDate();
public:
afx_msg void OnReportday10();
public:
afx_msg void OnReportmonth();
public:
afx_msg void OnReportseason();
public:
afx_msg void OnTimer(UINT_PTR nIDEvent);
public:
void InitParam();
public:
afx_msg void OnLbnSelchangeListWeatheritem1();
public:
afx_msg void OnNMDblclkListWeatheritem(NMHDR *pNMHDR, LRESULT *pResult);
public:
// afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
public:
afx_msg void OnBnClickedBtnDel();
public:
afx_msg void OnMenuSearch();
public:
afx_msg void OnMenuSet();
public:
afx_msg void OnSetRing();
};
#ifndef _DEBUG // WeatherView.cpp 中的调试版本
inline CChatDoc* CWeatherView::GetDocument() const
{ return reinterpret_cast<CChatDoc*>(m_pDocument); }
#endif
class CAdviseSink : public IMAPIAdviseSink
{
public:
CAdviseSink(CWeatherView* pview)
{
m_pView = pview;
}
CAdviseSink()
{
m_pView = NULL;
}
~CAdviseSink(){};
virtual ULONG OnNotify(ULONG cNotif, LPNOTIFICATION lpNotifications);
virtual HRESULT QueryInterface(REFIID iid, void** ppvObject){return S_OK;}
virtual ULONG AddRef(){return 0;}
virtual ULONG Release(){return 0;}
private:
ULONG m_cRef;
CWeatherView *m_pView;
};
ULONG m_ulAdviseSink = 0;
BOOL B_Have_New_Message = FALSE;
CAdviseSink* g_pAdviseSink;
const int A_River_Water = 0x01; //江河水情警报
const int A_Reservoir_Water = 0x02; //水库水情警报
const int A_Water_Rain = 0x04; //水文雨情警报
const int A_Weather_Rain = 0x08; //气象雨情警报
const int A_Typhoon = 0x10; //热带气旋警报
const CString STR_ALERT_0X01 = _T("江河水情警报");
const CString STR_ALERT_0X02 = _T("水库水情警报");
const CString STR_ALERT_0X04 = _T("水文雨情警报");
const CString STR_ALERT_0X08 = _T("气象雨情警报");
const CString STR_ALERT_0X10 = _T("热带气旋警报");
int Alert_Type = 0x01;
// CWeatherView
IMPLEMENT_DYNCREATE(CWeatherView, CFormView)
BEGIN_MESSAGE_MAP(CWeatherView, CFormView)
// ON_COMMAND(ID_IMAGE_AP_CHINA, &CWeatherView::OnImageApChina)
// ON_COMMAND(ID_IMAGE_CLOUD_CHINA, &CWeatherView::OnImageCloudChina)
// ON_COMMAND(ID_IMAGE_RAIN_CHINA, &CWeatherView::OnImageRainChina)
// ON_COMMAND(ID_IMAGE_RAIN_SOUTH, &CWeatherView::OnImageRainSouth)
// ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_WEATHER, &CWeatherView::OnTcnSelchangeTabWeather)
ON_CBN_SELCHANGE(IDC_COMBO_DATE, &CWeatherView::OnCbnSelchangeComboDate)
// ON_COMMAND(ID_ReportDay10, &CWeatherView::OnReportday10)
// ON_COMMAND(ID_ReportMonth, &CWeatherView::OnReportmonth)
// ON_COMMAND(ID_ReportSeason, &CWeatherView::OnReportseason)
ON_WM_TIMER()
ON_NOTIFY(NM_DBLCLK, IDC_LIST_WEATHERITEM, &CWeatherView::OnNMDblclkListWeatheritem)
// ON_WM_SYSCOMMAND()
ON_BN_CLICKED(IDC_BTN_DEL, &CWeatherView::OnBnClickedBtnDel)
ON_COMMAND(ID_MENU_SEARCH, &CWeatherView::OnMenuSearch)
ON_COMMAND(ID_MENU_SET, &CWeatherView::OnMenuSet)
ON_COMMAND(ID_SET_RING, &CWeatherView::OnSetRing)
END_MESSAGE_MAP()
// CWeatherView 构造/析构
CWeatherView::CWeatherView()
: CFormView(CWeatherView::IDD)
{
// TODO: 在此处添加构造代码
this->m_pSession = NULL;
this->m_pTable = NULL;
this->m_pStore = NULL;
this->m_pFolder = NULL;
this->m_pSendFolder = NULL;
this->m_pChildFolder = NULL;
this->m_pMsg = NULL;
m_str_Recipient = _T("");
g_pAdviseSink = NULL;
B_DebugMachine = FALSE;
clear_list();
m_strRingStyle = _T("");
}
void CWeatherView::clear_list()
{
int count = m_list.size();
std::list <SBinary>::iterator it;
it = m_list.begin();
while(it != m_list.end())
{
delete (*it).lpb;
(*it).lpb = NULL;
it++;
}
m_list.clear();
}
CWeatherView::~CWeatherView()
{
UnAdvise(m_pStore);
if(m_pMsg)
{
m_pMsg->Release();
m_pMsg = NULL;
}
if(m_pSendFolder)
{
m_pSendFolder->Release();
m_pSendFolder = NULL;
}
if(m_pChildFolder)
{
m_pChildFolder->Release();
m_pChildFolder = NULL;
}
if(m_pFolder)
{
m_pFolder->Release();
m_pFolder = NULL;
}
if(m_pStore)
{
m_pStore->Release();
m_pStore = NULL;
}
if(m_pTable)
{
m_pTable->Release();
m_pTable = NULL;
}
if(m_pSession)
{
m_pSession->Logoff(0, 0, 0);
m_pSession->Release();
m_pSession = NULL;
}
MAPIUninitialize();
CoUninitialize();
clear_list();
}
void CWeatherView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_WEATHERITEM, m_lstWeatherItem);
// DDX_Control(pDX, IDC_TAB_WEATHER, m_tabWeather);
DDX_Control(pDX, IDC_COMBO_DATE, m_cmbDate);
}
BOOL CWeatherView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CFormView::PreCreateWindow(cs);
}
void CWeatherView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
//ShowWeatherMyCity();
InitListCtr();
// InitTabCtrl();
InitCombox();
InitParam();
/*
this->GetDlgItem(IDC_EDIT_MYCITY)->SetWindowTextW(_T("/r/n/r/n/r/n正在更新天气预报..."));
Sleep(20);
UpdateWeather();
this->GetDlgItem(IDC_EDIT_MYCITY)->SetWindowTextW(_T("/r/n/r/n/r/n更新完毕"));
Sleep(20);*/
// OnSelectTab();
// this->SetTimer(1,1000,NULL);
SmsBeginSession(&m_pSession);
SmsGetStorgeTable(m_pSession, &m_pTable);
SmsGetStore(m_pSession, m_pTable, &m_pStore);
Advise(m_pStore);
SmsGetFolder(m_pStore, 1, &m_pFolder);
SmsGetFolder(m_pStore, 2, &m_pSendFolder);
// SmsCreateFolder(m_pFolder, _T("ALert"), &m_pChildFolder);
SmsGetMessage(m_pFolder, Alert_Type, &m_pMsg);
// SmsClearAll(m_pFolder);
//
// SmsGetMessage(m_pChildFolder, &m_pMsg);
//
//
}
// CWeatherView 诊断
#ifdef _DEBUG
void CWeatherView::AssertValid() const
{
CFormView::AssertValid();
}
CChatDoc* CWeatherView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CChatDoc)));
return (CChatDoc*)m_pDocument;
}
#endif //_DEBUG
// CWeatherView 消息处理程序
void CWeatherView::InitImglist(void)
{
/* m_pImageList = new CImageList();
m_pImageList->Create(32,32,ILC_COLOR,8,8);
const int iIconLen=12;
int iIcon=0;
HICON hicon[iIconLen];
//hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_SYS00_OA);
hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_CITYWEATHER);
hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_REPORT);
hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_AP);
hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_CLOUD);
hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_RAIN);
//hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_SYS90_SYSSET);
//hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_SYS91_SYSHELP);
//hicon[iIcon++]=AfxGetApp()->LoadIcon(IDI_ICON_SYS99_SYSEXIT);
for(int i=0;i<iIcon;i++)
m_pImageList->Add(hicon[i]);*/
}
void CWeatherView::InitListCtr(void)
{
//m_lstWeatherItem.SetImageList(m_pImageList,LVSIL_NORMAL);//LVSIL_SMALL);
m_lstWeatherItem.InsertColumn(0,_T("内容"),LVCFMT_LEFT,80);
m_lstWeatherItem.InsertColumn(1,_T("时间"),LVCFMT_LEFT,90);
m_lstWeatherItem.InsertColumn(2,_T("状态"),LVCFMT_LEFT,40);
m_lstWeatherItem.SetExtendedStyle(m_lstWeatherItem.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
// m_lstWeatherItem.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
// m_lstWeatherItem.SetFocus();
// CString sTemp=_T("");
// sTemp = m_lstWeatherItem.GetItemText(0,0);
// this->GetDlgItem(IDC_STATIC_TEXT)->SetWindowTextW(sTemp);
}
void CWeatherView::InitTabCtrl(void)
{
m_tabWeather.InsertItem(0,_T(""));
m_tabWeather.InsertItem(1,_T("重大气象"));//危险天气 //wyx modify
m_tabWeather.InsertItem(2,_T("天气预报"));//省内城市 //wyx modify
//m_tabWeather.InsertItem(3,_T("国内城市"));
}
void CWeatherView::InitCombox(void)
{
m_cmbDate.AddString(STR_ALERT_0X01);
m_cmbDate.AddString(STR_ALERT_0X02);
m_cmbDate.AddString(STR_ALERT_0X04);
m_cmbDate.AddString(STR_ALERT_0X08);
m_cmbDate.AddString(STR_ALERT_0X10);
m_cmbDate.SetCurSel(0);
}
void CWeatherView::OnTcnSelchangeTabWeather(NMHDR *pNMHDR, LRESULT *pResult)
{
OnSelectTab();
*pResult = 0;
}
void CWeatherView::ShowWeatherMyCity(void)
{
CPub pub;
CXMLRecordset rsWeather;
if(rsWeather.OpenXML(pub.GetAppDataDir()+_T("WT_MYCITY.XML")))
{
rsWeather.First();
if(!rsWeather.Eof())
{
int nFieldcnt=rsWeather.GetFieldCnt();
CString sTemp=_T("/r/n >>>>>市区天气预报<<<<< /r/n/r/n");
CString sTemp1;
for(int i=1;i<nFieldcnt-1;i++)
{
sTemp1=rsWeather.GetFieldValue(i);
if(sTemp1!=_T("") && sTemp1!=_T("null"))
{
sTemp=sTemp+sTemp1+_T("/r/n/r/n");
}
}
this->GetDlgItem(IDC_EDIT_MYCITY)->SetWindowTextW(sTemp);
}
rsWeather.Close();
}
}
void CWeatherView::ShowWeatherFoul(void)
{
CPub pub;
CXMLRecordset rsWeather;
if(rsWeather.OpenXML(pub.GetAppDataDir()+_T("WT_FOUL.XML")))
{
//CString sLine('-',33);
CString sTemp=_T(""),sTemp1;
CString sTitle=_T("/r/n >>>>>危险天气预报<<<<< /r/n/r/n");
CString sNoRec=_T(" [没有危险天气] /r/n/r/n");
rsWeather.First();
while(!rsWeather.Eof())
{
sTemp1=rsWeather.GetFieldValue(_T("nr"));
if(sTemp1!=_T("") && sTemp1!=_T("null"))
{
sTemp=sTemp+sTemp1+_T("/r/n/r/n");
}
rsWeather.Next();
}
//CString sOldText;
//this->GetDlgItem(IDC_EDIT_MYCITY)->GetWindowTextW(sOldText);
if(sTemp==_T(""))
sTemp=/*sOldText+sLine+*/sTitle+sNoRec;
else
sTemp=/*sOldText+sLine+*/sTitle+sTemp;
this->GetDlgItem(IDC_EDIT_MYCITY)->SetWindowTextW(sTemp);
rsWeather.Close();
}
}
void CWeatherView::ShowWeatherAllCity(void)
{
CPub pub;
CString sDateFlag=_T("");
int iSel=m_cmbDate.GetCurSel();
switch(iSel)
{
case 0:
sDateFlag="a";
break;
case 1:
sDateFlag="b";
break;
case 2:
sDateFlag="c";
}
CString arrField[2],arrValue[2];
int i=0;
if(sDateFlag!=_T(""))
{
arrField[i]=_T("day2");
arrValue[i]=sDateFlag;
i++;
}
CXMLRecordset rsWeather;
if(rsWeather.OpenXML(pub.GetAppDataDir()+_T("WT_ALLCITY.XML")))
{
rsWeather.LoadDataToListCtrlEx(arrField,arrValue,i,&m_lstWeatherItem,_T("cs,tq,qw,wind"));
rsWeather.Close();
}
}
void CWeatherView::ShowWeatherChina(void)
{
}
int CWeatherView::UpdateWeather(void)
{
CString sSql;
CChatDoc *pDoc=this->GetDocument();
//更新市区天气预报
sSql=_T("select * from v_whfc_sqdqyb01");
if(!pDoc->GetXMLData(_T("WT_MYCITY"),sSql))
{
AfxMessageBox(_T("更新市区天气预报失败"));
return 0;
}
//更新危险天气预报
sSql=_T("select nr from v_crsj01");
if(!pDoc->GetXMLData(_T("WT_FOUL"),sSql))
{
AfxMessageBox(_T("更新危险天气预报失败"));
return 1;
}
//更新省内所有城市天气预报
CPub pub;
CTime ct=CTime::GetCurrentTime()+CTimeSpan( 0, 15, 0, 0 );
BOOL bNeedUpdate=TRUE;
CXMLRecordset rsWeather;
if(rsWeather.OpenXML(pub.GetAppDataDir()+_T("WT_ALLCITY.XML")))
{
rsWeather.First();
if(!rsWeather.Eof())
{
//CString sLastUpdateDate=rsWeather.GetFieldValue(_T("fbsj")).Left(10);
if(rsWeather.GetFieldValue(_T("fbsj")).Left(10)==pub.FormatDate(ct))
{
bNeedUpdate=FALSE;
}
}
rsWeather.Close();
}
if(!bNeedUpdate)
return 2;
sSql=_T("select * from v_whfc_qsldyb01");
if(!pDoc->GetXMLData(_T("WT_ALLCITY"),sSql))
{
AfxMessageBox(_T("更新省内所有城市天气预报失败"));
return 2;
}
return 3;
}
void CWeatherView::OnSelectTab(void)
{
int nSel=m_tabWeather.GetCurSel();
this->GetDlgItem(IDC_EDIT_MYCITY)->ShowWindow(nSel<2?SW_SHOW:SW_HIDE);
this->GetDlgItem(IDC_COMBO_DATE)->ShowWindow(nSel>=2?SW_SHOW:SW_HIDE);
this->GetDlgItem(IDC_LIST_WEATHERITEM)->ShowWindow(nSel>=2?SW_SHOW:SW_HIDE);
switch(nSel)
{
case 0:
ShowWeatherMyCity();
break;
case 1:
ShowWeatherFoul();
break;
case 2:
if(m_lstWeatherItem.GetItemCount()==0)
{
ShowWeatherAllCity();
}
break;
case 3:
if(m_lstWeatherItem.GetItemCount()==0)
{
ShowWeatherChina();
}
break;
}
}
void CWeatherView::OnCbnSelchangeComboDate()
{
int count = m_list.size();
while(count > 0)
{
MAPIFreeBuffer(&(m_list.front()));
m_list.pop_front();
count--;
}
m_lstWeatherItem.DeleteAllItems();
clear_list();
Alert_Type = m_cmbDate.GetCurSel() + 1;
SmsGetMessage(m_pFolder, Alert_Type, &m_pMsg);
}
void CWeatherView::OnReportday10()
{
CPub pub;
CString sExeFile=pub.GetAppDir()+_T("HTMLHost.exe");
CString sPara;
sPara.Format(_T("天气旬报,http://%s:%s/yubao/xunbao.htm"),m_sServerSite,m_sServerPort);
pub.RunExe(sExeFile,sPara);
}
void CWeatherView::OnReportmonth()
{
CPub pub;
CString sExeFile=pub.GetAppDir()+_T("HTMLHost.exe");
CString sPara;
sPara.Format(_T("天气月报,http://%s:%s/yubao/yuebao.htm"),m_sServerSite,m_sServerPort);
pub.RunExe(sExeFile,sPara);
}
void CWeatherView::OnReportseason()
{
CPub pub;
CString sExeFile=pub.GetAppDir()+_T("HTMLHost.exe");
CString sPara;
sPara.Format(_T("天气季报,http://%s:%s/yubao/jibao.htm"),m_sServerSite,m_sServerPort);
pub.RunExe(sExeFile,sPara);
}
void CWeatherView::OnImageApChina()
{
CPub pub;
CString sExeFile=pub.GetAppDir()+_T("image.exe");
CString sPara=_T("气压图,week,//week");
pub.RunExe(sExeFile,sPara);
}
void CWeatherView::OnImageCloudChina()
{
CPub pub;
CString sFileName=_T("image.exe");//szExeFileName;
CString sExeFile=pub.GetAppDir()+sFileName;
CString sPara=_T("卫星云图,yuntu,//yuntu");
pub.RunExe(sExeFile,sPara);
}
void CWeatherView::OnImageRainChina()
{
CPub pub;
CString sFileName=_T("image.exe");//szExeFileName;
CString sExeFile=pub.GetAppDir()+sFileName;
CString sPara=_T("雨量图,rain,//rain");
pub.RunExe(sExeFile,sPara);
}
void CWeatherView::OnImageRainSouth()
{
CPub pub;
CString sFileName=_T("image.exe");//szExeFileName;
CString sExeFile=pub.GetAppDir()+sFileName;
CString sPara=_T("华南区雨量图,southrain,//southrain");
pub.RunExe(sExeFile,sPara);
}
void CWeatherView::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent==1)
{
/* this->KillTimer(1);
CString sTemp;
this->GetDlgItem(IDC_EDIT_MYCITY)->GetWindowTextW(sTemp);
this->GetDlgItem(IDC_EDIT_MYCITY)->SetWindowTextW(sTemp+_T("/r/n 正在更新......"));
Sleep(20);
UpdateWeather();
//this->GetDlgItem(IDC_EDIT_MYCITY)->SetWindowTextW(_T("/r/n/r/n/r/n更新完毕"));
Sleep(20);
OnSelectTab();
this->KillTimer(-1);*/
}
CFormView::OnTimer(nIDEvent);
}
void CWeatherView::InitParam()
{
CXMLRecordset rsConfig;
CPub pub;
if(rsConfig.OpenXML(pub.GetAppDir()+_T("sysconfig.xml")))
{
rsConfig.First();
if(!rsConfig.Eof())
{
m_sServerSite=rsConfig.GetFieldValue(_T("SERVERSITE"));
m_sServerPort=rsConfig.GetFieldValue(_T("SERVERPORT"));
m_str_Recipient = rsConfig.GetFieldValue(_T("RECIPIENT"));
m_strRingStyle = rsConfig.GetFieldValue(_T("RINGSTYLE"));
CString str = rsConfig.GetFieldValue(_T("DEBUGMACHINE"));
B_DebugMachine = wcstoul(str, NULL, 10);
}
rsConfig.Close();
}
}
void CWeatherView::OnLbnSelchangeListWeatheritem1()
{
// TODO: 在此添加控件通知处理程序代码
}
void CWeatherView::OnNMDblclkListWeatheritem(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
POSITION pos = 0;
int nItem = 0;
CString str;
pos = m_lstWeatherItem.GetFirstSelectedItemPosition( );
if(pos)
{
nItem = m_lstWeatherItem.GetNextSelectedItem(pos);
if(nItem >= 0)
{
str = m_lstWeatherItem.GetItemText(nItem,0);
CDisplayMessageDlg dlg;
dlg.content = str;
dlg.DoModal();
}
}
*pResult = 0;
}
BOOL CWeatherView::SmsBeginSession(LPMAPISESSION *pSession)
{
BOOL f_Ret = TRUE;
HRESULT hr;
// ICEMAPISession * pSession = NULL;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
hr = MAPIInitialize(NULL);
if (hr != S_OK)
{
// MAPIInitialize failed.
f_Ret &= FALSE;
}
// hr = MAPILogonEx(0, NULL, NULL, 0, (LPMAPISESSION *)&pSession);
hr = MAPILogonEx(0, NULL, NULL, 0, pSession);
if (hr != S_OK)
{
// MAPILogonEx failed.
f_Ret &= FALSE;
}
return f_Ret;
}
BOOL CWeatherView::SmsGetStorgeTable(LPMAPISESSION pSession, LPMAPITABLE *pTable)
{
if(!pSession)
{
return FALSE;
}
HRESULT hr;
// Get the message stores table.
hr = pSession->GetMsgStoresTable(MAPI_UNICODE, pTable);
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SmsGetStore(LPMAPISESSION pSession, LPMAPITABLE pTable, LPMDB *pStore)
{
if(!pSession || !pTable)
{
return FALSE;
}
CString str_DisplayName = _T("SMS");
if(B_DebugMachine) str_DisplayName = _T("ActiveSync");
HRESULT hr;
SRowSet * psrs = NULL;
SizedSPropTagArray(2 , Columns) =
{
2 ,
PR_ENTRYID,
PR_DISPLAY_NAME
};
//pSession->GetMsgStoresTable(MAPI_UNICODE , &pTable);
pTable->SetColumns((LPSPropTagArray)&Columns, 0);
while(SUCCEEDED(m_pTable->QueryRows(1, 0, &psrs)))
{
if (NULL == psrs || psrs->cRows != 1)
{
break;
}
//开始一条条记录查询,pRows->aRow[0].lpProps[0]代表了第一个查询属性,即Entry ID,pRows->aRow[0].lpProps[1]则表示Display Name。
if (_tcsicmp(psrs->aRow[0].lpProps[1].Value.lpszW, str_DisplayName) == 0)
{
ULONG ulMesageType;
//如果是SMS,则获取Store对象
hr = pSession->OpenEntry(psrs->aRow[0].lpProps[0].Value.bin.cb,
(LPENTRYID)psrs->aRow[0].lpProps[0].Value.bin.lpb,
NULL,
MAPI_BEST_ACCESS,
&ulMesageType,
(LPUNKNOWN*)pStore);
break;
}
FreeProws(psrs);
}
if(hr != S_OK) return FALSE;
else return TRUE;
}
//Folder_Style 1:收件箱 2:发件箱 3:草稿箱
BOOL CWeatherView::SmsGetFolder(LPMDB pStore, UINT Folder_Style, LPMAPIFOLDER *pFolder)
{
if(!pStore) return FALSE;
BOOL f_Ret = TRUE;
HRESULT hr;
ULONG UseBox_EID = PR_CE_IPM_INBOX_ENTRYID;
if(B_DebugMachine)
{
UseBox_EID = PR_CE_IPM_DRAFTS_ENTRYID;
}
else
{
if(Folder_Style == 1) UseBox_EID = PR_CE_IPM_INBOX_ENTRYID;
else if(Folder_Style == 2) UseBox_EID = PR_IPM_SENTMAIL_ENTRYID;
else if(Folder_Style == 3) UseBox_EID = PR_CE_IPM_DRAFTS_ENTRYID;
}
ULONG rgTags[] = {1, UseBox_EID};//PR_CE_IPM_INBOX_ENTRYID PR_CE_IPM_DRAFTS_ENTRYID PR_IPM_SENTMAIL_ENTRYID
ULONG cValues = 0;
LPSPropValue rgprops = NULL;
hr = pStore->GetProps((LPSPropTagArray)rgTags, MAPI_UNICODE, &cValues, &rgprops);
if(hr != S_OK) f_Ret &= FALSE;
ASSERT(rgprops);
ASSERT(rgprops[0].ulPropTag == UseBox_EID);//PR_CE_IPM_DRAFTS_ENTRYID PR_CE_IPM_INBOX_ENTRYID
hr = pStore->OpenEntry(rgprops[0].Value.bin.cb, (LPENTRYID)rgprops[0].Value.bin.lpb, NULL,MAPI_BEST_ACCESS , NULL, reinterpret_cast <IUnknown **>(pFolder));//MAPI_MODIFY
if(hr != S_OK) f_Ret &= FALSE;
MAPIFreeBuffer(rgprops);
return f_Ret;
}
BOOL CWeatherView::ReceiveNewSMS(int A_Type, ULONG cbEntryID, LPENTRYID lpEntryID)
{
if(!lpEntryID) return FALSE;
HRESULT hr = E_FAIL;
LPMESSAGE pMsg = NULL;
ULONG ulMesageType;
BOOL f_Ret = TRUE;
hr = m_pFolder->OpenEntry(cbEntryID, lpEntryID, NULL, MAPI_BEST_ACCESS, &ulMesageType,(LPUNKNOWN*)&pMsg);
if(!SUCCEEDED(hr)) f_Ret &= FALSE;
else
{
SPropValue * rgprops = NULL;
ULONG rgTags[] = {4,PR_ENTRYID, PR_MESSAGE_DELIVERY_TIME, PR_SUBJECT, PR_MESSAGE_FLAGS};
ULONG cCount = 0;
hr = pMsg->GetProps((SPropTagArray *)rgTags, MAPI_UNICODE, &cCount, &rgprops);
if(!SUCCEEDED(hr)) f_Ret &= FALSE;
else
{
if(rgprops[2].ulPropTag == PR_SUBJECT)
{
CString text;
text = rgprops[2].Value.lpszW;
CString str_type;
int pos = 0;
int i_type = -1;
pos = text.Find(_T(",zy_over,"), 0);
if(pos > 0 && pos < text.GetLength())
{
str_type = text.Left(pos);
text = text.Right(text.GetLength() - (pos + 9));
if(str_type.Left(6) == _T("Alert "))
{
i_type = wcstoul(str_type.Right(2), NULL, 10);
}
}
if(i_type == A_Type)
{
m_lstWeatherItem.InsertItem(0, text,0);
if(rgprops[1].ulPropTag!=10)
{
FILETIME ft;
SYSTEMTIME stTime;
FileTimeToLocalFileTime(&(rgprops[1].Value.ft),&ft);
FileTimeToSystemTime(&ft,&stTime);
CString str;
str.Format(_T("%02d-%02d-%02d %02d:%02d"),stTime.wYear,stTime.wMonth,stTime.wDay,stTime.wHour,stTime.wMinute);
m_lstWeatherItem.SetItemText(0, 1, str);
}
if(rgprops[3].ulPropTag!=10)
{
if(rgprops[3].Value.ul & MSGFLAG_READ)
{
m_lstWeatherItem.SetItemText(0, 2, _T("已读"));
}
else
{
m_lstWeatherItem.SetItemText(0, 2, _T("未读"));
}
}
SBinary Sbin;
Sbin.cb = rgprops[0].Value.bin.cb;
Sbin.lpb = new BYTE[Sbin.cb];
memcpy(Sbin.lpb, rgprops[0].Value.bin.lpb, Sbin.cb);
m_list.push_front(Sbin);
}
else
{
CString str = _T("有新的:");
if(i_type == A_River_Water) str = str + STR_ALERT_0X01;
else if(i_type == A_Reservoir_Water) str = str + STR_ALERT_0X02;
else if(i_type == A_Water_Rain) str = str + STR_ALERT_0X04;
else if(i_type == A_Weather_Rain) str = str + STR_ALERT_0X08;
else if(i_type == A_Typhoon) str = str + STR_ALERT_0X10;
SetDlgItemTextW(IDC_STATIC_TIP, str);
}
}
MAPIFreeBuffer(rgprops);
}
pMsg->Release();
pMsg = NULL;
}
return f_Ret;
}
BOOL CWeatherView::SmsGetMessage(LPMAPIFOLDER pFolder, UINT nAlertType, LPMESSAGE *pMsg)
{
if(!pFolder) return FALSE;
BOOL f_Ret = TRUE;
HRESULT hr = E_FAIL;
LPMAPITABLE pTable_message = NULL;
LPSRowSet pRows = NULL;
ULONG ulNumCols = 1;
//指定我们需要获取Entry ID属性
// SizedSPropTagArray(ulNumCols, Columns) = {ulNumCols, PR_ENTRYID};
ULONG Columns[] = {ulNumCols, PR_ENTRYID};
pFolder->GetContentsTable(0, &pTable_message);
hr = pTable_message->SetColumns((LPSPropTagArray)&Columns, 0);
if(hr != S_OK) f_Ret &= FALSE;
//从这些代码可以看出,和获取Message Store的方法很相似,只不过一个是从Session对象里拿,而另一个是从Folder里面拿而已。
while(SUCCEEDED(pTable_message->QueryRows(1, 0, &pRows)))
{
if(pRows && pRows->cRows == 1)
{
ULONG ulMesageType;
//通过OpenEntry获取IMessage对象
hr = pFolder->OpenEntry( pRows->aRow[0].lpProps[0].Value.bin.cb, (LPENTRYID)pRows->aRow[0].lpProps[0].Value.bin.lpb,
NULL, MAPI_BEST_ACCESS, &ulMesageType,(LPUNKNOWN*)pMsg);
if(hr != S_OK) f_Ret &= FALSE;
SmsGetMessageDetail(*pMsg, nAlertType);
(*pMsg)->Release();
*pMsg = NULL;
// ENTRYLIST MsgList;
// MsgList.cValues = 1;
// MsgList.lpbin = &(pRows->aRow[0].lpProps[0].Value.bin);
// SmsDelMessage(pFolder, &MsgList);
// SmsMoveMessage(pFolder, &MsgList, m_pChildFolder);
MAPIFreeBuffer(pRows);
pRows = NULL;
}
else
{
MAPIFreeBuffer(pRows);
pRows = NULL;
break;
}
}
pTable_message->Release();
pTable_message = NULL;
return f_Ret;
}
BOOL CWeatherView::SmsGetMessageDetail(LPMESSAGE pMsg, UINT nAlertType)
{
if(!pMsg) return FALSE;
HRESULT hr = E_FAIL;
SPropValue * rgprops = NULL;
ULONG rgTags[] = {4,PR_ENTRYID, PR_MESSAGE_DELIVERY_TIME, PR_SUBJECT, PR_MESSAGE_FLAGS};
ULONG cCount = 0;
// Get properties from the message.
hr = pMsg->GetProps((SPropTagArray *)rgTags, MAPI_UNICODE, &cCount, &rgprops);
// Access the properties that were just retrieved.
if (SUCCEEDED(hr))
{
// Check that the ulPropTag member of each property value is the property type requested and is not PT_ERROR.
if (rgprops[0].ulPropTag == PR_ENTRYID && rgprops[2].ulPropTag == PR_SUBJECT)
{
// int count = 0;
// count = m_lstWeatherItem.GetItemCount();
CString text;
text = rgprops[2].Value.lpszW;
CString str_type;
int pos = 0;
int i_type = -1;
pos = text.Find(_T(",zy_over,"), 0);
if(pos > 0 && pos < text.GetLength())
{
str_type = text.Left(pos);
text = text.Right(text.GetLength() - (pos + 9));
if(str_type.Left(6) == _T("Alert "))
{
i_type = wcstoul(str_type.Right(2), NULL, 10);
}
}
if(i_type == nAlertType)
{
m_lstWeatherItem.InsertItem(0, text,0);
if(rgprops[1].ulPropTag!=10)
{
FILETIME ft;
SYSTEMTIME stTime;
FileTimeToLocalFileTime(&(rgprops[1].Value.ft),&ft);
FileTimeToSystemTime(&ft,&stTime);
CString str;
str.Format(_T("%02d-%02d-%02d %02d:%02d"),stTime.wYear,stTime.wMonth,stTime.wDay,stTime.wHour,stTime.wMinute);
m_lstWeatherItem.SetItemText(0, 1, str);
}
if(rgprops[1].ulPropTag!=10)
{
FILETIME ft;
SYSTEMTIME stTime;
FileTimeToLocalFileTime(&(rgprops[1].Value.ft),&ft);
FileTimeToSystemTime(&ft,&stTime);
CString str;
str.Format(_T("%02d-%02d-%02d %02d:%02d"),stTime.wYear,stTime.wMonth,stTime.wDay,stTime.wHour,stTime.wMinute);
m_lstWeatherItem.SetItemText(0, 1, str);
}
if(rgprops[3].ulPropTag!=10)
{
if(rgprops[3].Value.ul & MSGFLAG_READ)
{
m_lstWeatherItem.SetItemText(0, 2, _T("已读"));
}
else
{
m_lstWeatherItem.SetItemText(0, 2, _T("未读"));
}
}
SBinary Sbin;
Sbin.cb = rgprops[0].Value.bin.cb;
Sbin.lpb = new BYTE[Sbin.cb];
memcpy(Sbin.lpb, rgprops[0].Value.bin.lpb, Sbin.cb);
m_list.push_front(Sbin);
}
}
MAPIFreeBuffer(rgprops);
}
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SmsDelMessage(LPMAPIFOLDER pFolder, LPENTRYLIST lpMsgList)
{
if(!pFolder || !lpMsgList) return FALSE;
HRESULT hr = E_FAIL;
hr = pFolder->DeleteMessages(lpMsgList, 0, NULL, 0);
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SendSmsMessage(LPMESSAGE p_msg)
{
if(!p_msg) return FALSE;
HRESULT hr = E_FAIL;
hr = p_msg->SubmitMessage(0);
if(!SUCCEEDED(hr)) return FALSE;
else
{
if(p_msg)
{
p_msg->Release();
p_msg = NULL;
}
return TRUE;
}
}
BOOL CWeatherView::SmsMoveMessage(LPMAPIFOLDER pSrcFolder, LPENTRYLIST lpMsgList, LPMAPIFOLDER pDestFolder)
{
if(!pSrcFolder || !lpMsgList || !pDestFolder) return FALSE;
HRESULT hr = E_FAIL;
hr = pSrcFolder->CopyMessages(lpMsgList, NULL, pDestFolder, 0, NULL, MESSAGE_MOVE);
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SmsCreateMessage(LPMAPIFOLDER pFolder, LPMESSAGE *p_msg)
{
if(!pFolder) return FALSE;
if(*p_msg)
{
(*p_msg)->Release();
(*p_msg) = NULL;
}
HRESULT hr = E_FAIL;
hr = pFolder->CreateMessage(NULL, 0, p_msg);
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SmsSetMessageProp(LPMESSAGE p_msg, CString text, CString Recipient)
{
if(!p_msg) return FALSE;
HRESULT hr = E_FAIL;
int nListBufSize = CbNewADRLIST(1); //计算1个联系人需要的存储空间
LPADRLIST pAddressList = NULL;
MAPIAllocateBuffer(nListBufSize, (LPVOID FAR *)&pAddressList); //分配空间
memset(pAddressList, 0, nListBufSize);
pAddressList->cEntries = 1; //表明一共有1个联系人信息
int nPropNum = 7;
MAPIAllocateBuffer(sizeof(SPropValue) * nPropNum, (LPVOID FAR *)&pAddressList->aEntries[0].rgPropVals); //分配空间
memset(pAddressList->aEntries[0].rgPropVals, 0, sizeof(SPropValue) * nPropNum);
pAddressList->aEntries[0].rgPropVals[0].ulPropTag = PR_RECIPIENT_TYPE;
pAddressList->aEntries[0].rgPropVals[0].Value.ul = MAPI_TO; //表明是写到To
pAddressList->aEntries[0].rgPropVals[1].ulPropTag = PR_ADDRTYPE;
pAddressList->aEntries[0].rgPropVals[1].Value.LPSZ = _T("SMS");
pAddressList->aEntries[0].rgPropVals[2].ulPropTag = PR_EMAIL_ADDRESS; //收件人
pAddressList->aEntries[0].rgPropVals[2].Value.LPSZ = Recipient.GetBuffer(Recipient.GetLength());
pAddressList->aEntries[0].cValues = nPropNum; //表明改联系人有3个属性要设置
hr = p_msg->ModifyRecipients(MODRECIP_ADD, pAddressList);
if(SUCCEEDED(hr))
{
SPropValue prop[4];
prop[0].ulPropTag = PR_MESSAGE_CLASS;
prop[0].Value.lpszW = _T("IPM.SMStext");
prop[1].ulPropTag = PR_SUBJECT;
prop[1].Value.lpszW = text.GetBuffer(text.GetLength());
prop[2].ulPropTag = PR_MSG_STATUS; //(4)标志设置信息类型
prop[2].Value.ul = MSGSTATUS_RECTYPE_SMS; //(5)设置具体类型 PR_STATUS_STRING_W
prop[3].ulPropTag = PR_MESSAGE_FLAGS;
prop[3].Value.ul = MSGFLAG_FROMME | MSGFLAG_UNSENT;//未发送
hr = p_msg->SetProps(4, prop, NULL);
MAPIFreeBuffer(prop);
}
MAPIFreeBuffer(pAddressList->aEntries[0].rgPropVals);
MAPIFreeBuffer(pAddressList);
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SmsSetMessageTextProp(LPMESSAGE p_msg)
{
if(!p_msg) return FALSE;
HRESULT hr = E_FAIL;
int nListBufSize = CbNewADRLIST(1); //计算1个联系人需要的存储空间
LPADRLIST pAddressList = NULL;
MAPIAllocateBuffer(nListBufSize, (LPVOID FAR *)&pAddressList); //分配空间
memset(pAddressList, 0, nListBufSize);
pAddressList->cEntries = 1; //表明一共有1个联系人信息
int nPropNum = 3;
MAPIAllocateBuffer(sizeof(SPropValue) * nPropNum, (LPVOID FAR *)&pAddressList->aEntries[0].rgPropVals); //分配空间
memset(pAddressList->aEntries[0].rgPropVals, 0, sizeof(SPropValue) * nPropNum);
pAddressList->aEntries[0].rgPropVals[0].ulPropTag = PR_MESSAGE_CLASS;
pAddressList->aEntries[0].rgPropVals[0].Value.lpszW = TEXT("IPM.SMStext");
pAddressList->aEntries[0].rgPropVals[1].ulPropTag = PR_SUBJECT; //正文
pAddressList->aEntries[0].rgPropVals[1].Value.lpszW = _T("content4356wertwer");
pAddressList->aEntries[0].rgPropVals[2].ulPropTag = PR_MESSAGE_FLAGS; //(6)标志设置发送属性
pAddressList->aEntries[0].rgPropVals[2].Value.ul = MSGFLAG_FROMME | MSGFLAG_UNSENT; //(7)设置具体发送属性
// pAddressList->aEntries[0].rgPropVals[2].ulPropTag = PR_SENDER_EMAIL_ADDRESS;
// pAddressList->aEntries[0].rgPropVals[2].Value.LPSZ = _T("135789"); // 发件人
// pAddressList->aEntries[0].rgPropVals[3].ulPropTag = PR_MSG_STATUS; //(4)标志设置信息类型
// pAddressList->aEntries[0].rgPropVals[3].Value.ul = PR_STATUS_STRING_W; //(5)设置具体类型
// pAddressList->aEntries[0].rgPropVals[4].ulPropTag = PR_MESSAGE_FLAGS; //(6)标志设置发送属性
// pAddressList->aEntries[0].rgPropVals[4].Value.ul = MSGFLAG_FROMME | MSGFLAG_UNSENT; //(7)设置具体发送属性
// SPropValue prop1[1];
// prop1[0].ulPropTag = PR_MESSAGE_CLASS;
// prop1[0].Value.lpszW = TEXT("IPM.SMStext");
//hr = p_msg->SetProps(1, prop1, NULL);
// SPropValue prop[3];
// prop[0].ulPropTag = PR_MESSAGE_CLASS;
// prop[0].Value.lpszW = _T("IPM.SMStext");
// prop[1].ulPropTag = PR_SUBJECT;
// prop[1].Value.lpszW = _T("content4356wertwer");
// prop[2].ulPropTag = PR_MESSAGE_FLAGS;
// prop[2].Value.ul = MSGFLAG_FROMME | MSGFLAG_UNSENT;//未发送
// hr = p_msg->SetProps(3, prop, NULL);
pAddressList->aEntries[0].cValues = nPropNum; //表明改联系人有3个属性要设置
// hr = p_msg->ModifyRecipients(MODRECIP_ADD, pAddressList);
hr = p_msg->SetProps(nPropNum, (LPSPropValue)&(pAddressList->aEntries[0].rgPropVals), NULL);//(9)设置属性
// SmsSendMessage(p_msg);
//调用ModifyRecipients添加联系人,完了记的释放申请的内存,pMsg为你想操作的Message的对象实例,关于如何获取可以参考以前的文章。
// MAPIFreeBuffer(prop);
// MAPIFreeBuffer(prop1);
MAPIFreeBuffer(pAddressList->aEntries[0].rgPropVals);
MAPIFreeBuffer(pAddressList);
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SmsCreateFolder(LPMAPIFOLDER pFolder, CString FoldName, LPMAPIFOLDER *pNewFolder)
{
if(!pFolder) return NULL;
if(*pNewFolder)
{
(*pNewFolder)->Release();
(*pNewFolder) = NULL;
}
HRESULT hr = E_FAIL;
hr = pFolder->CreateFolder(0, _T("EEE"), NULL, NULL, MAPI_UNICODE|OPEN_IF_EXISTS, pNewFolder);
if(hr != S_OK) return FALSE;
else return TRUE;
}
BOOL CWeatherView::SmsClearAll(LPMAPIFOLDER pFolder)
{
if(!pFolder) return FALSE;
HRESULT hr = E_FAIL;
hr = pFolder->EmptyFolder(0,0,0);
if(hr != S_OK) return FALSE;
else return TRUE;
}
void CWeatherView::OnBnClickedBtnDel()
{
int count = m_list.size();
POSITION pos = 0;
int nItem = 0;
CString str;
pos = m_lstWeatherItem.GetFirstSelectedItemPosition( );
if(pos)
{
nItem = m_lstWeatherItem.GetNextSelectedItem(pos);
if(nItem >= 0)
{
m_lstWeatherItem.DeleteItem(nItem);
std::list <SBinary>::iterator it;
it = m_list.begin();
while(it != m_list.end() && nItem > 0)
{
it++;
nItem--;
}
ENTRYLIST MsgList;
MsgList.cValues = 1;
MsgList.lpbin = &(*it);
SmsDelMessage(m_pFolder, &MsgList);
delete (*it).lpb;
(*it).lpb = NULL;
m_list.erase(it);
}
}
}
void CWeatherView::OnMenuSearch()
{
CMessageSetDlg dlg;
dlg.B_IsSearch_Dlg = TRUE;
if(dlg.DoModal() == IDOK)
{
CString str, str1;
// int value = 0;
// if(dlg.b_River_Water) value |= A_River_Water;
// if(dlg.b_Typhoon) value |= A_Typhoon;
// if(dlg.b_Reservoir_Water) value |= A_Reservoir_Water;
// if(dlg.b_Water_Rain) value |= A_Water_Rain;
// if(dlg.b_Weather_Rain) value |= A_Weather_Rain;
// str.Format(_T("Search alert %02d"),value);
str = _T("Search alert ");
if(dlg.b_River_Water)
{
str1.Format(_T("%02d,"), A_River_Water);
str = str + str1;
}
if(dlg.b_Typhoon)
{
str1.Format(_T("%02d,"), A_Typhoon);
str = str + str1;
}
if(dlg.b_Reservoir_Water)
{
str1.Format(_T("%02d,"), A_Reservoir_Water);
str = str + str1;
}
if(dlg.b_Water_Rain)
{
str1.Format(_T("%02d,"), A_Water_Rain);
str = str + str1;
}
if(dlg.b_Weather_Rain)
{
str1.Format(_T("%02d,"), A_Weather_Rain);
str = str + str1;
}
str = str.Left(str.GetLength() - 1);
SendMessage(m_pSendFolder, str, m_str_Recipient);
}
}
void CWeatherView::OnMenuSet()
{
CMessageSetDlg dlg;
dlg.B_IsSearch_Dlg = FALSE;
if(dlg.DoModal() == IDOK)
{
CString str, str1;
// int value = 0;
// if(dlg.b_River_Water) value |= A_River_Water;
// if(dlg.b_Typhoon) value |= A_Typhoon;
// if(dlg.b_Reservoir_Water) value |= A_Reservoir_Water;
// if(dlg.b_Water_Rain) value |= A_Water_Rain;
// if(dlg.b_Weather_Rain) value |= A_Weather_Rain;
// str.Format(_T("Set alert %02d"),value);
str = _T("Set alert ");
if(dlg.b_River_Water)
{
str1.Format(_T("%02d,"), A_River_Water);
str = str + str1;
}
if(dlg.b_Typhoon)
{
str1.Format(_T("%02d,"), A_Typhoon);
str = str + str1;
}
if(dlg.b_Reservoir_Water)
{
str1.Format(_T("%02d,"), A_Reservoir_Water);
str = str + str1;
}
if(dlg.b_Water_Rain)
{
str1.Format(_T("%02d,"), A_Water_Rain);
str = str + str1;
}
if(dlg.b_Weather_Rain)
{
str1.Format(_T("%02d,"), A_Weather_Rain);
str = str + str1;
}
str = str.Left(str.GetLength() - 1);
SendMessage(m_pSendFolder, str, m_str_Recipient);
}
}
BOOL CWeatherView::SendMessage(LPMAPIFOLDER pFolder, CString text, CString Recipient)
{
if(!pFolder) return FALSE;
BOOL f_Ret = TRUE;
f_Ret = f_Ret && SmsCreateMessage(pFolder, &m_pMsg);
UINT value = 0;
f_Ret = f_Ret && SmsSetMessageProp(m_pMsg, text, Recipient);
CPub pub;
// if(!CreateProcess(_T(".//Windows//tmail.exe"), _T("-RunInBKG"), NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL))
// if(!pub.RunExe(_T("//Windows//tmail.exe"), _T("-RunInBKG")))
// if(!pub.RunExe(_T("//Windows//tmail.exe"), _T("-service /"MMS/"")))
// {
// MessageBox(_T("run tmail.exe fail"), _T("error"), MB_OK);
// }
f_Ret = f_Ret && SendSmsMessage(m_pMsg);
/* HRESULT hr = E_FAIL;
SMS_HANDLE hSms = NULL;
HANDLE hSmsEvent = NULL;
hr = SmsOpen(SMS_MSGTYPE_TEXT,SMS_MODE_SEND, &hSms, &hSmsEvent);
if(FAILED(hr)) f_Ret = FALSE;
SMS_ADDRESS smsDestination;
SMS_MESSAGE_ID smsMsgId = 0;
memset(&smsDestination, 0, sizeof(SMS_ADDRESS));
smsDestination.smsatAddressType = SMSAT_INTERNATIONAL;
_tcsncpy(smsDestination.ptsAddress, Recipient.GetBuffer(0), Recipient.GetLength());
DWORD dwMessageLength = text.GetLength() * sizeof(TCHAR);
TEXT_PROVIDER_SPECIFIC_DATA txtProviderData;
DWORD dwProviderLength = 0;
memset(&txtProviderData, 0, sizeof(TEXT_PROVIDER_SPECIFIC_DATA));
txtProviderData.dwMessageOptions = PS_MESSAGE_OPTION_NONE;
txtProviderData.psMessageClass = PS_MESSAGE_CLASS0;
txtProviderData.psReplaceOption = PSRO_NONE;
dwProviderLength = sizeof(TEXT_PROVIDER_SPECIFIC_DATA);
hr = SmsSendMessage(hSms,
NULL,
&smsDestination,
NULL,
(BYTE*)text.GetBuffer(0),
dwMessageLength,
(BYTE*)&txtProviderData,
dwProviderLength,
SMSDE_OPTIMAL,
SMS_OPTION_DELIVERY_NONE,
&smsMsgId);
if(FAILED(hr)) f_Ret = FALSE;
SmsClose(hSms);*/
return f_Ret;
}
BOOL CWeatherView::Advise(LPMDB pStore)
{
if(!pStore) return FALSE;
HRESULT hr = E_FAIL;
g_pAdviseSink = new CAdviseSink(this);
//用来标识AdviseSink,当取消注册时我们需要用到它。
// uEventMask : 它的作用是告诉系统,我们关心哪些方面的notification,没有列出来的事件在CAdviseSink::OnNotify里面就不会响应到。
// ULONG uEventMask = fnevCriticalError | fnevNewMail | fnevObjectCreated | fnevObjectDeleted |
//
// fnevObjectModified | fnevObjectMoved | fnevObjectCopied | fnevSearchComplete | fnevTableModified |
//
// fnevStatusObjectModified | fnevReservedForMapi | fnevExtended;
ULONG uEventMask = fnevNewMail | fnevObjectCreated | fnevObjectMoved | fnevObjectCopied | fnevTableModified;
hr = pStore->Advise(0, NULL, uEventMask, g_pAdviseSink, &m_ulAdviseSink);
if(hr = S_OK) return TRUE;
else return FALSE;
}
BOOL CWeatherView::UnAdvise(LPMDB pStore)
{
if(!pStore) return FALSE;
HRESULT hr = E_FAIL;
if(m_ulAdviseSink) hr = pStore->Unadvise(m_ulAdviseSink);
if(g_pAdviseSink)
{
delete g_pAdviseSink;
g_pAdviseSink = NULL;
}
if(hr = S_OK) return TRUE;
else return FALSE;
}
ULONG CAdviseSink::OnNotify(ULONG cNotif, LPNOTIFICATION lpNotifications)
{
// cNotif : 指定有多少个Notification通知
// lpNotifications : Notification数组,个数为cNotif
for(int i = 0; i < (int)cNotif; ++i)
{
//根据不同的Notification类型做不同的处理,类型有很多种,这里只是简单的列出的几种,要获取这些通知和注册AdviseSink密切相关,你需要告诉系统,你关心哪些方面的消息,比如消息的移动,删除等等,系统就会把这些相应的通知发给你,而其他你不关心的,就不会通知到你,这些我们会在后面注册部分讲到。
switch(lpNotifications[i].ulEventType)
{
case fnevObjectMoved:
// ::MessageBox(NULL,_T("move object event"), _T("info"), MB_OK);
break;
case fnevObjectModified:
// ::MessageBox(NULL,_T("modify object event"), _T("info"), MB_OK);
break;
case fnevObjectDeleted:
// ::MessageBox(NULL,_T("delete object event"), _T("info"), MB_OK);
break;
case fnevNewMail:
// ::MessageBox(NULL,_T("new mail event"), _T("info"), MB_OK);
break;
case fnevObjectCreated: //接收到新的短信 、创建新短信
if(m_pView) m_pView->ReceiveNewSMS(Alert_Type, lpNotifications[i].info.obj.cbEntryID, lpNotifications[i].info.obj.lpEntryID);
// ::MessageBox(NULL,_T("create object event"), _T("info"), MB_OK);
break;
default:
// ::MessageBox(NULL,_T("default event"), _T("info"), MB_OK);
break;
}
}
return 0;
}
void CWeatherView::OnSetRing()
{
CDlgRing dlg;
dlg.m_strRingStyle = m_strRingStyle;
dlg.DoModal();
}