mobile5.0下制作短信收发程序

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();
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值