📄 senddlg.cpp
字号:
// SendDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MailBomb.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
// m_nCount=0;
}
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_BN_CLICKED(IDCANCEL, OnCancel)
ON_MESSAGE(WM_THREADFINISHED, OnThreadFinished)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSendDlg message handlers
int m_nCount=0;
void CSendDlg::OnCancel()
{
// TODO: Add your control notification handler code here
if(m_nCount==0)
{
CDialog::OnCancel();
}
else
{
m_nCount=m_nCopyNumber;
}
}
BOOL CSendDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
AfxBeginThread(SendMailBomb,this);//GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
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 SendMailBomb(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_strSubject=pSendThread->m_strSubject;
msg.m_strBody=pSendThread->m_strBody;
//pSendThread->GetDlgItem(IDCANCEL)->EnableWindow(FALSE);
pSendThread->EnableUI(FALSE,TRUE);
pSendThread->SetDlgItemText(IDC_STATUS,"正在连接服务器......");
if(!smtp.Connect())
{
AfxMessageBox(smtp.GetLastError());
pSendThread->SetDlgItemText(IDC_STATUS,"连接服务器失败");
pSendThread->EnableUI(TRUE,TRUE);
//pSendThread->GetDlgItem(IDCANCEL)->EnableWindow(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(TRUE,FALSE);
return FALSE;
}
else
{
pSendThread->SetDlgItemText(IDC_STATUS,"正在发送信件......");
pSendThread->EnableUI(TRUE,TRUE);
pBar->SetPos((m_nCount+1)*100/pSendThread->m_nCopyNumber);
}
}
smtp.Disconnect();
if(AfxMessageBox(_T("邮件已被成功发送!"))==IDOK)
{
pSendThread->SetDlgItemText(IDC_STATUS,"发送完毕。");
pSendThread->EnableUI(TRUE,FALSE);
::PostMessage((HWND)pParam,WM_THREADFINISHED,0,0);
}
m_nCount=0;
return TRUE;
}
LRESULT CSendDlg::OnThreadFinished(WPARAM wParam,LPARAM lParam)
{
//AfxMessageBox("");
CDialog::OnOK();
return 0;
}
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 + -