📄 senddlg.cpp
字号:
// SendDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MailMulti.h"
#include "SendDlg.h"
#include "MailMessage.h"
#include "SMTP.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSendDlg dialog
CSendDlg::CSendDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSendDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSendDlg)
m_strStatus = _T("");
//}}AFX_DATA_INIT
}
void CSendDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSendDlg)
DDX_Control(pDX, IDC_ANIMATE, m_ctrlAnimate);
DDX_Text(pDX, IDC_STATUS, m_strStatus);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSendDlg, CDialog)
//{{AFX_MSG_MAP(CSendDlg)
ON_MESSAGE(WM_THREADFINISHED,OnThreadFinished)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSendDlg message handlers
int m_nCount = 0;
void CSendDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
LRESULT CSendDlg::OnThreadFinished(WPARAM wParam,LPARAM lParam)
{
CDialog::OnOK();
return 0;
}
BOOL CSendDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
AfxBeginThread(SendMailMulti,this);
m_ctrlAnimate.Open(IDR_AVI);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
UINT SendMailMulti(LPVOID pParam)
{
CSendDlg * pSendThread = (CSendDlg *)pParam;
CSMTP smtp(pSendThread->m_strSmtpServer,pSendThread->m_nPort);
CMailMessage msg;
msg.m_strFrom = pSendThread->m_strFrom;
msg.m_strTo = pSendThread->m_strTo;
msg.m_strBody = pSendThread->m_strBody;
msg.m_strSubject = pSendThread->m_strSubject;
pSendThread->EnableUI(FALSE,TRUE);
pSendThread->SetDlgItemText(IDC_STATUS,"正在连接服务器....");
if(!smtp.Connect())
{
AfxMessageBox(smtp.GetLastError());
pSendThread->SetDlgItemText(IDC_STATUS,"连接服务器失败!");
pSendThread->EnableUI(TRUE,TRUE);
return FALSE;
}
CProgressCtrl * pBar;
pBar = (CProgressCtrl *)
pSendThread->GetDlgItem(IDC_PROGRESS_SEND);
for(m_nCount;m_nCount<pSendThread->m_nCopyNumber;
::InterlockedIncrement((long *)&m_nCount))
{
if(!smtp.SendMessage(&msg))
{
AfxMessageBox(smtp.GetLastError());
smtp.DisConnect();
pSendThread->SetDlgItemText(IDC_STATUS,"发送信件出错!");
pSendThread->EnableUI(FALSE,TRUE);
return FALSE;
}
else
{
pSendThread->SetDlgItemText(IDC_STATUS,"正在发送邮件...");
pSendThread->EnableUI(TRUE,TRUE);
pBar->SetPos((m_nCount+1)*100/pSendThread->m_nCopyNumber);
}
}
smtp.DisConnect();
if(AfxMessageBox("邮件已成功发送!")==IDOK)
{
pSendThread->SetDlgItemText(IDC_STATUS,"发送完毕!");
pSendThread->EnableUI(TRUE,FALSE);
::PostMessage((HWND)pParam,WM_THREADFINISHED,0,0);
}
m_nCount = 0;
return TRUE;
}
void CSendDlg::EnableUI(BOOL bEnable,BOOL bAvi)
{
GetDlgItem(IDCANCEL)->EnableWindow(bEnable);
if(bAvi)
{
m_ctrlAnimate.Play(0,(UINT)-1,(UINT)-1);
}
else
{
m_ctrlAnimate.Stop();
m_ctrlAnimate.Seek(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -