// MyReceiveDlg.cpp : implementation file // #include "stdafx.h" #include "myMailServer.h" #include "MyReceiveDlg.h" #include "MyMailServerDlg.h" #include "MyProgressDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define WM_MY_GET (WM_USER +100) /////////////////////////////////////////////////////////////////////////// CString g_strUser; CString g_strPsd; CString g_strServer; CWnd *pWnd = NULL; _bstr_t g_bstrFrom; _bstr_t g_bstrSubject; _bstr_t g_bstrBody; COleDateTime g_oleDate; long i = 0; CStringArray g_strDetailArray; ///////////////////////////////////////////////////////////////////////////// // CMyReceiveDlg dialog UINT ReceiveMail( LPVOID lparam) { ::CoInitialize(NULL); try { pWnd->PostMessage(WM_MY_GET,1,0); jmail::IPOP3Ptr pPOP3("JMail.POP3"); jmail::IMessagesPtr pMessages; // 设置连接服务器超时限制 30S pPOP3->Timeout = 30; // 连接邮件服务器,110为pop3默认端口号 pPOP3->Connect((LPCTSTR)g_strUser, (LPCTSTR)g_strPsd, (LPCTSTR)g_strServer, 110); pMessages = pPOP3->Messages; pWnd->PostMessage(WM_MY_GET,2,0); // 已下载的邮件的实际个数(因为第0个ITEM是未用的,所以-1) long lCount = pMessages->Count - 1; if(lCount == 0) AfxMessageBox("信箱为空"); else { jmail::IMessagePtr pMessage; // 遍历每封信 for( i = 1; i <= lCount; i++) { pMessage = pMessages->Item[i]; //信件的具体信息 g_bstrFrom = pMessage->From; g_bstrSubject = pMessage->Subject; g_bstrBody = pMessage->Body; g_oleDate = pMessage->Date; //往list控件中添加信件信息 //显示信件的主体文本 g_strDetailArray.Add((const char*)g_bstrBody); pWnd->PostMessage(WM_MY_GET,4,0); pMessage.Release(); } pWnd->PostMessage(WM_MY_GET,3,0); } // 断开连接 pPOP3->Disconnect(); } //提示错误信息 catch(_com_error e) { pWnd->PostMessage(WM_MY_GET,3,0); CString strErr; strErr.Format("错误信息:%s\r\n错误描述:%s", (LPCTSTR)e.ErrorMessage(), (LPCTSTR)e.Description()); AfxMessageBox(strErr); } return 0; } CMyReceiveDlg::CMyReceiveDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyReceiveDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMyReceiveDlg) m_strDetail = _T(""); //}}AFX_DATA_INIT g_strUser = m_strUser; g_strPsd = m_strPsd; g_strServer = m_strServer; m_pos = 0; } void CMyReceiveDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyReceiveDlg) DDX_Control(pDX, IDC_SPERE, m_spere); DDX_Control(pDX, IDC_LIST1, m_list); DDX_Control(pDX, IDC_REPlY, m_bnReply); DDX_Control(pDX, IDC_PRE, m_bnPre); DDX_Control(pDX, IDC_NEXT, m_bnNext); DDX_Control(pDX, IDC_INFO, m_bnInfo); DDX_Control(pDX, IDC_CLEAR, m_bnClear); DDX_Control(pDX, IDC_QUIT, m_bnQuit); DDX_Control(pDX, IDC_TITLE, m_bnTitle); DDX_Control(pDX, IDC_MAX, m_bnMax); DDX_Control(pDX, IDC_MIN, m_bnMin); DDX_Text(pDX, IDC_EDIT1, m_strDetail); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMyReceiveDlg, CDialog) //{{AFX_MSG_MAP(CMyReceiveDlg) ON_BN_CLICKED(IDC_QUIT, OnQuit) ON_WM_CTLCOLOR() ON_WM_LBUTTONDOWN() ON_BN_CLICKED(IDC_REPlY, OnReFlah) ON_BN_CLICKED(IDC_CLEAR, OnClear) ON_NOTIFY(NM_CLICK, IDC_LIST1, OnOnShowDetail) ON_BN_CLICKED(IDC_PRE, OnPre) ON_BN_CLICKED(IDC_NEXT, OnNext) //}}AFX_MSG_MAP ON_MESSAGE(WM_MY_GET,OnDrawItem) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyReceiveDlg message handlers void CMyReceiveDlg::OnQuit() { // TODO: Add your control notification handler code here OnOK(); CMyMailServerDlg dlg; dlg.DoModal(); } BOOL CMyReceiveDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_bmBack.DeleteObject(); m_brBack.DeleteObject(); m_bmBack.LoadBitmap(IDB_RBACK); //导入背景图片 m_brBack.CreatePatternBrush(&m_bmBack); //保存窗体背景图片,供OnCtlColor()调用 //SetDialogFace(); //设置对话框图片 CString strFontName = _T("隶书"); //设置IDC_BUTTON_EXIT按钮图片 m_bnQuit.SetBitmaps(IDB_QUIT_N, IDB_QUIT_C, IDB_QUIT_H); m_bnMin.SetBitmaps(IDB_MIN_N, IDB_MIN_C, IDB_MIN_H); m_bnMax.SetBitmaps(IDB_MAX_D,NULL,NULL,IDB_MAX_D); // 升级列表控件 ::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); m_list.InsertColumn(0, "发件人", LVCFMT_LEFT, 130); m_list.InsertColumn(1, "主题", LVCFMT_LEFT, 350); m_list.InsertColumn(2, "日期", LVCFMT_LEFT, 100); ////////////////////////////////////////////////////////////////////////// // set btnHello //set bitmap m_bnReply.SetBitmaps(IDB_BLUE_N, NULL, IDB_BLUE_H); //位图 m_bnReply.SetForceColor(RGB(255, 255, 0), RGB(255, 255, 255), RGB(255, 255, 255)); //文字颜色 m_bnReply.SetSound(MAKEINTRESOURCE(IDR_WAVEMOVE), ::GetModuleHandle(NULL)); //动态 m_bnReply.SetSound(MAKEINTRESOURCE(IDR_WAVECLICK), ::GetModuleHandle(NULL), TRUE); //按下声音 // m_bnReply.SetFocusRectDeflateRect(12,12, FALSE); //焦点框与按钮边界距离 // m_bnReply.SetDrawFocusRect(TRUE, FALSE); //画焦点(默认不画) m_bnReply.SizeToContent(); //按钮自动适应第一个图片大小 m_bnReply.SetWindowText(TEXT("刷新邮箱")); //改变按钮显示文字 m_bnReply.SetBtnCursor(IDC_CURSOR_HAND, FALSE); //按钮鼠标类型 // m_bnReply.SetTextAlign(NL_ALIGN_CENTER, FALSE); //设置文字排列方式 //set font m_bnReply .SetDrawText(TRUE, FALSE) //是否显示按钮文字 .SetFont3D(TRUE, 3, 2, FALSE) //显示文字3d效果 .SetText3DBKColor(RGB(95, 95, 95)) //3d阴影颜色 .SetFontBold(TRUE, FALSE) //粗体 .SetFontSize(18, FALSE) //字体大小 .SetFontName(strFontName) //字体名称 ; ////////////////////////////////////////////////////////////////////////// // set btnKill //set bitmap m_bnClear.SetBitmaps(IDB_BLUE_N, NULL, IDB_BLUE_H); //位图 m_bnClear.SetForceColor(RGB(255, 255, 0), RGB(255, 255, 255), RGB(255, 255, 255)); //文字颜色 m_bnClear.SetSound(MAKEINTRESOURCE(IDR_WAVEMOVE), ::GetModuleHandle(NULL)); //动态 m_bnClear.SetSound(MAKEINTRESOURCE(IDR_WAVECLICK), ::GetModuleHandle(NULL), TRUE); //按下声音 m_bnClear.SizeToContent(); //按钮自动适应第一个图片大小 m_bnClear.SetWindowText(TEXT("清空邮箱")); //改变按钮显示文字 m_bnClear.SetBtnCursor(IDC_CURSOR_HAND, FALSE); //按钮鼠标类型 // m_bnClear.SetTextAlign(NL_ALIGN_RIGHT, FALSE); //设置文字排列方式 //set font m_bnClear .SetDrawText(TRUE, FALSE) //是否显示按钮文字 .SetFont3D(TRUE, 3, 2, FALSE) //显示文字3d效果 .SetText3DBKColor(RGB(95, 95, 95)) //3d阴影颜色 .SetFontBold(TRUE, FALSE) //粗体 .SetFontSize(18, FALSE) //字体大小 .SetFontName(strFontName) //字体名称 ; ////////////////////////////////////////////////////////////////////////// // set btnBackward //set bitmap m_bnPre.SetBitmaps(IDB_SET_N, IDB_SET_N, IDB_SET_H, IDB_SET_N); //位图 m_bnPre.SetForceColor(RGB(255, 255, 0), RGB(255, 255, 255), RGB(255, 255, 255), FALSE); //文字颜色 m_bnPre.SetSound(MAKEINTRESOURCE(IDR_WAVEMOVE), ::GetModuleHandle(NULL)); //动态 m_bnPre.SetSound(MAKEINTRESOURCE(IDR_WAVECLICK), ::GetModuleHandle(NULL), TRUE); //按下声音 m_bnPre.SizeToContent(); //按钮自动适应第一个图片大小 m_bnPre.SetBtnCursor(IDC_CURSOR_HAND, FALSE); //按钮鼠标类型 m_bnPre.SetWindowText(TEXT("上一封")); //改变按钮显示文字 m_bnPre.SetTextAlign(NL_ALIGN_RIGHT, FALSE); //设置文字排列方式 //set font m_bnPre .SetDrawText(TRUE, FALSE) //是否显示按钮文字 .SetFont3D(TRUE, 3, 2, FALSE) //显示文字3d效果 .SetText3DBKColor(RGB(95, 95, 95), FALSE) //3d阴影颜色 .SetFontSize(12, FALSE) //字体大小 .SetFontName(strFontName) //字体名称 ; ////////////////////////////////////////////////////////////////////////// // set btnForward //set bitmap m_bnNext.SetBitmaps(IDB_EXIT_N, IDB_EXIT_N, IDB_EXIT_H, IDB_EXIT_N); //位图 m_bnNext.SetForceColor(RGB(255, 255, 0), RGB(255, 255, 255), RGB(255, 255, 255), FALSE); //文字颜色 m_bnNext.SetSound(MAKEINTRESOURCE(IDR_WAVEMOVE), ::GetModuleHandle(NULL)); //动态 m_bnNext.SetSound(MAKEINTRESOURCE(IDR_WAVECLICK), ::GetModuleHandle(NULL), TRUE); //按下声音 m_bnNext.SizeToContent(); //按钮自动适应第一个图片大小 m_bnNext.SetBtnCursor(IDC_CURSOR_HAND, FALSE); //按钮鼠标类型 m_bnNext.SetWindowText(TEXT("下一封")); //改变按钮显示文字 m_bnNext.SetTextAlign(NL_ALIGN_LEFT, FALSE); //设置文字排列方式 //set font m_bnNext .SetDrawText(TRUE, FALSE) //是否显示按钮文字 .SetFont3D(TRUE, 3, 2, FALSE) //显示文字3d效果 .SetText3DBKColor(RGB(95, 95, 95), FALSE) //3d阴影颜色 .SetFontSize(12, FALSE) //字体大小 .SetFontName(strFontName) //字体名称 ; ////////////////////////////////////////////////////////////////////////// // set btnTitle m_bnTitle.SetForceColor(RGB(255, 255, 255), RGB(255, 255, 255), RGB(255, 255, 255), FALSE); //文字颜色 m_bnNext.SetTextAlign(NL_ALIGN_LEFT, FALSE); //设置文字排列方式 m_bnTitle .SetDrawText(TRUE, FALSE) //是否显示按钮文字 .SetDrawTextAsDisable(FALSE, FALSE) //按定义色彩画失效文字 .SetFontBold(TRUE, FALSE) //粗体 .SetFont3D(TRUE, 2, 1, FALSE) //显示文字3d效果 .SetText3DBKColor(RGB(95, 95, 95), FALSE) //3d阴影颜色 .SetFontSize(16 , FALSE) //字体大小 .SetFontName(strFontName) //字体名称 ; ////////////////////////////////////////////////////////////////////////// // set btnInfo m_bnInfo.SetForceColor(RGB(0, 138, 260), RGB(0, 138, 260), RGB(0, 138, 260), FALSE); //文字颜色 m_bnInfo.SetTextAlign(NL_ALIGN_LEFT, FALSE); //设置文字排列方式 m_bnInfo .SetDrawText(TRUE, FALSE) //是否显示按钮文字 .SetDrawTextAsDisable(FALSE) //按定义色彩画失效文字 ; //set bitmap m_spere.SetBitmaps(IDB_SPRETE, NULL, IDB_SPRETE); SetWindowText("Mail Receiver"); getMail(); //位图 return TRUE; // return TRUE unless you set the focus to a control } HBRUSH CMyReceiveDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_BTN) { pDC->SetBkMode(TRANSPARENT); return m_brBack; } // TODO: Return a different brush if the default is not desired return hbr; } void CMyReceiveDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if (point.y < 26) PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y)); CDialog::OnLButtonDown(nFlags, point); } int CMyReceiveDlg::getMail() { pWnd = CWnd::FromHandle(m_hWnd); AfxBeginThread(ReceiveMail,NULL,0); return 0; } LRESULT CMyReceiveDlg::OnDrawItem(LPARAM lparam, WPARAM wparam) { CMyProgressDlg dlg; HWND pHwnd = this->GetSafeHwnd(); CWnd *pWnd=FindWindow(NULL,"Progress"); if(lparam == 1) { dlg.m_message = "正在连接邮箱服务器,\n请稍后……"; dlg.DoModal(); } else if(lparam == 2) { pWnd->SendMessage(WM_CLOSE); dlg.m_message = "连接成功,\n正在获取邮件……"; dlg.DoModal(); } else if(lparam == 3) { pWnd->SendMessage(WM_CLOSE); } else if( lparam == 4) { int nListItem = m_list.InsertItem(i, (const char*)g_bstrFrom); m_list.SetItem(nListItem, 1, LVIF_TEXT, (const char*)g_bstrSubject, 0, 0, 0, NULL); m_list.SetItem(nListItem, 2, LVIF_TEXT, (const char*)g_oleDate.Format("%Y-%m-%d"), 0, 0, 0, NULL); } return 0; } CMyReceiveDlg::CMyReceiveDlg(CString server, CString id, CString psd): CDialog(CMyReceiveDlg::IDD, NULL) { g_strUser = m_strUser = id; g_strPsd = m_strPsd = psd; g_strServer = m_strServer = server; } void CMyReceiveDlg::OnReFlah() { // TODO: Add your control notification handler code here m_list.DeleteAllItems(); m_strDetail= ""; UpdateData(FALSE); getMail(); } void CMyReceiveDlg::OnClear() { // TODO: Add your control notification handler code here m_list.DeleteAllItems(); m_strDetail= ""; UpdateData(FALSE); } void CMyReceiveDlg::OnOnShowDetail(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; //获取选定信件的指针 POSITION pos = m_list.GetFirstSelectedItemPosition(); if(pos) { int nItem = m_list.GetNextSelectedItem(pos); //显示内容 m_strDetail= g_strDetailArray.GetAt(nItem); UpdateData(FALSE); m_pos = nItem; } *pResult = 0; } void CMyReceiveDlg::OnPre() { int len = g_strDetailArray.GetSize(); if(--m_pos < 0) { m_pos = g_strDetailArray.GetSize() - 1; } m_strDetail= g_strDetailArray.GetAt(m_pos); UpdateData(FALSE); } void CMyReceiveDlg::OnNext() { int len = g_strDetailArray.GetSize(); if(++m_pos > len - 1) { m_pos = 0; } m_strDetail= g_strDetailArray.GetAt(m_pos); UpdateData(FALSE); }