📄 crecievemaildlg.cpp
字号:
// CRecieveMailDlg.cpp: implementation of the CRecieveMailDlg class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CRecieveMailDlg.h"
#include "resource.h"
#include "harTransform.h"
#include "CGPRSManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern TCHAR g_username[ADDRESS_LENTH];
extern userDataDB* g_puserDataDB;
CRecieveMailDlg g_rmaildlg;
CRecieveMailDlg::CRecieveMailDlg()
{
m_curusername = NULL;
}
CRecieveMailDlg::~CRecieveMailDlg()
{
}
struct RecieveMailProcParam
{
CRecieveMailDlg* pdlg;
HWND hDlg;
userDataDB* pdb;
};
DWORD WINAPI RecieveMailThreadProc(LPVOID lpParameter)
{
RecieveMailProcParam* pr = (RecieveMailProcParam*)lpParameter;
int rmail = 0;
CRecieveMailDlg* dlg;
HWND hDlg;
userDataDB* pdb;
dlg = pr->pdlg;
hDlg = pr->hDlg;
pdb = pr->pdb;
BOOL res;
long i,len;
BOOL created = FALSE;
userDataDB* puserdb;
userData user;
CePop3* ppop3;
TCHAR textbuffer[50];
BOOL deleteoption;
if(pdb == NULL)
{
puserdb = new userDataDB(g_hInst);
if(puserdb == NULL)
{
EndDialog(hDlg,dlg->m_result);
delete pr;
return FALSE;
}
created = TRUE;
}
else
puserdb = pdb;
//得到用户信息
puserdb->OpenOrCreateDB();
if(!puserdb->GetUserInfo(dlg->m_curusername,user))
{
EndDialog(hDlg,dlg->m_result);
delete pr;
return FALSE;
}
//创建CePop3对象
ppop3 = new CePop3;
if(ppop3 == NULL)
{
if(created)
delete puserdb;
EndDialog(hDlg,dlg->m_result);
delete pr;
return FALSE;
}
//初始化信息
char *pass,*pop3,*userid,*username;
CharTransform trans;
pass = trans.TCharToChar(user.pass_mail);
pop3 = trans.TCharToChar(user.pop3_name);
userid = trans.TCharToChar(user.user_name);
username = trans.TCharToChar(dlg->m_curusername);
deleteoption = user.delete_option;
ppop3->set_password(pass);
ppop3->set_servername(pop3);
ppop3->set_username(username);
ppop3->set_user(userid);
ppop3->PrepareDB();
delete []pass;
delete []pop3;
delete []userid;
delete []username;
RECT rect;
GetClientRect(hDlg,&rect);
HBRUSH hb;
rect.left += 2;
rect.top = 60;
rect.right -= 2;
rect.bottom = 100;
hb = CreateSolidBrush(RGB(255,255,255));
HDC hdc = GetWindowDC(hDlg);
LoadString(g_hInst,IDS_STRING_CONNECT,textbuffer,50);
SendMessage(GetDlgItem(hDlg,IDC_PROGRESS_MAIL),PBM_SETPOS,0,0);
FillRect(hdc,&rect,hb);
DrawText(hdc,textbuffer,-1,&rect,DT_CENTER);
CGPRSManager mag;
if (!mag.TrigerConnection())
{
g_messageid = GPRS_CREAEFAIL;
res = FALSE;
goto end;
}
if(!ppop3->POP3Connect())
{
res = FALSE;
g_messageid = CAN_NOT_CONNECT_POPSERVER;
goto end;
}
if(dlg->m_cancleflag)
{
g_messageid = USER_QUIT;
res = FALSE;
goto end;
}
LoadString(g_hInst,IDS_STRING_STATELOGIN,textbuffer,50);
SendMessage(GetDlgItem(hDlg,IDC_PROGRESS_MAIL),PBM_SETPOS,10,0);
FillRect(hdc,&rect,hb);
DrawText(hdc,textbuffer,-1,&rect,DT_CENTER);
if(!ppop3->Login())
{
g_messageid = POP_LOGIN_ERROR;
res = FALSE;
goto end;
}
if(dlg->m_cancleflag)
{
g_messageid = USER_QUIT;
res = FALSE;
goto end;
}
LoadString(g_hInst,IDS_STRING_STATEGETMAILIMF,textbuffer,50);
Sleep(20);
SendMessage(GetDlgItem(hDlg,IDC_PROGRESS_MAIL),PBM_SETPOS,20,0);
FillRect(hdc,&rect,hb);
DrawText(hdc,textbuffer,-1,&rect,DT_CENTER);
if(!ppop3->Statistics())
{
g_messageid = RECEI_FAIL;
res = FALSE;
goto end;
}
if(!ppop3->List())
{
g_messageid = LIST_MAIL_FAIL;
res = FALSE;
goto end;
}
if(!ppop3->UIDL())
{
g_messageid = LIST_UID_FAIL;
res = FALSE;
goto end;
}
if(dlg->m_cancleflag)
{
g_messageid = USER_QUIT;
res = FALSE;
goto end;
}
LoadString(g_hInst,IDS_STRING_RETIVEMAIL,textbuffer,50);
len = lstrlen(textbuffer);
if(ppop3->HaveNewMails())
{
ppop3->CreateMailList();
for(i = 0;i < ppop3->m_NumberMail;++i)
{
int yes = IDYES;
if(ppop3->m_MailList[i].m_size >= 100*1024)
{
TCHAR imf[60];
LoadString(g_hInst,IDS_STRING_MAILSIZEQUEST,imf,60);
yes = MessageBox(hDlg,imf,NULL,MB_YESNO);
}
if(yes == IDYES)
{
wsprintf(textbuffer+len,L"(%d/%d)",i+1,ppop3->m_NumberMail);
SendMessage(GetDlgItem(hDlg,IDC_PROGRESS_MAIL),PBM_SETPOS,20 + (i+1)*80/ppop3->m_NumberMail,0);
FillRect(hdc,&rect,hb);
DrawText(hdc,textbuffer,-1,&rect,DT_CENTER);
if(!ppop3->Retrieve(i))
{
g_messageid = CONNECT_INTERRUPT;
res = FALSE;
goto end;
}
if(ppop3->ParseMailHead(i))
{
if(deleteoption)
{
ppop3->Delete(i);
}
else
{
ppop3->AddUidlDB(i);
}
rmail++;
}
}
if(dlg->m_cancleflag)
{
g_messageid = USER_QUIT;
res = FALSE;
goto end;
}
}
}
LoadString(g_hInst,IDS_STRING_STATEDICON,textbuffer,50);
SendMessage(GetDlgItem(hDlg,IDC_PROGRESS_MAIL),PBM_SETPOS,100,0);
FillRect(hdc,&rect,hb);
DrawText(hdc,textbuffer,-1,&rect,DT_CENTER);
if(!ppop3->DisConnect())
{
g_messageid = DISCONNECT_FAIL;
res = FALSE;
goto end;
}
res = TRUE;
g_messageid = RECIEVE_SUCEES;
end:
ppop3->m_UidlDB.CloseDBHandle();
ppop3->ReleaseSrc();
delete ppop3;
DeleteObject(hb);
ReleaseDC(hDlg,hdc);
if(g_messageid != USER_QUIT)
{
TCHAR imf[80];
CRecieveMailDlg::LoadErrorString(g_messageid,imf,80);
if(res)
{
wsprintf(imf,imf,rmail);
MessageBox(hDlg,imf,NULL,MB_OK|MB_ICONINFORMATION);
}
else
MessageBox(hDlg,imf,NULL,MB_OK|MB_ICONERROR);
}
EndDialog(hDlg,dlg->m_result);
delete pr;
mag.Release();
return res;
}
BOOL HasNewMail()
{
userDataDB* puserdb;
userData user;
CePop3* ppop3;
BOOL res;
CGPRSManager mag;
puserdb = new userDataDB(g_hInst);
if(puserdb == NULL)
{
return FALSE;
}
//得到用户信息
puserdb->OpenOrCreateDB();
if(!puserdb->GetUserInfo(g_username,user))
{
return FALSE;
}
//创建CePop3对象
ppop3 = new CePop3;
if(ppop3 == NULL)
{
delete puserdb;
return FALSE;
}
//初始化信息
char *pass,*pop3,*userid,*username;
CharTransform trans;
pass = trans.TCharToChar(user.pass_mail);
pop3 = trans.TCharToChar(user.pop3_name);
userid = trans.TCharToChar(user.user_name);
username = trans.TCharToChar(g_username);
ppop3->set_password(pass);
ppop3->set_servername(pop3);
ppop3->set_username(username);
ppop3->set_user(userid);
ppop3->PrepareDB();
delete []pass;
delete []pop3;
delete []userid;
delete []username;
if (!mag.TrigerConnection())
{
res = FALSE;
goto end;
}
if(!ppop3->POP3Connect())
{
res = FALSE;
goto end;
}
if(!ppop3->Login())
{
res = FALSE;
goto end;
}
if(!ppop3->Statistics())
{
res = FALSE;
goto end;
}
if(!ppop3->UIDL())
{
res = FALSE;
goto end;
}
res = ppop3->HaveNewMails();
end:
ppop3->m_UidlDB.CloseDBHandle();
ppop3->ReleaseSrc();
delete ppop3;
mag.Release();
return res;
}
BOOL CALLBACK CRecieveMailDlgProc(const HWND hDlg, const UINT uiMessage, const WPARAM wParam, const LPARAM lParam)
{
BOOL bProcessedMsg = TRUE;
switch(uiMessage)
{
case WM_INITDIALOG:
CRecieveMailDlg::InitialDlg(g_rmaildlg,hDlg);
//CRecieveMailDlg::RecieveMail(&g_rmaildlg,hDlg,NULL);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_MENUITEM_CANCLE:
KillTimer(hDlg,1000);
g_rmaildlg.m_cancleflag = TRUE;
CRecieveMailDlg::DestroyDlg(g_rmaildlg,hDlg);
default:
bProcessedMsg = FALSE;
break;
}
break;
case WM_TIMER:
{
if(wParam == 1000)
{
KillTimer(hDlg,1000);
RecieveMailProcParam* p = new RecieveMailProcParam;
p->hDlg = hDlg;
p->pdb = NULL;
p->pdlg = &g_rmaildlg;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)RecieveMailThreadProc,(LPVOID)(p),0,&g_rmaildlg.m_threadid);
//CRecieveMailDlg::RecieveMail(&g_rmaildlg,hDlg,NULL);
}
break;
}
case WM_SIZE:
{
break;
}
case WM_CLOSE:
CRecieveMailDlg::DestroyDlg(g_rmaildlg,hDlg);
break;
case WM_HOTKEY:
if(VK_TBACK == HIWORD(lParam))
{
//SHSendBackToFocusWindow(uiMessage, wParam, lParam);
}
else
bProcessedMsg = FALSE;
break;
case WM_ACTIVATE:
{
DWORD dwFlags = LOWORD(wParam);
if(dwFlags != WA_INACTIVE)
{
}
else
{
//g_maileditdlg.m_focus = GetFocus();
bProcessedMsg = FALSE;
}
break;
}
default:
bProcessedMsg = FALSE;
break;
}
return bProcessedMsg;
}
BOOL AutoRecieve(HWND hwnd)
{
BOOL flag = HasNewMail();
if(!flag)
return FALSE;
TCHAR imf[50];
LoadString(g_hInst,IDS_STRING_NEWMAIL,imf,50);
int m = MessageBox(hwnd,imf,NULL,MB_YESNO|MB_ICONQUESTION);
if(m != IDYES)
return FALSE;
g_rmaildlg.m_curusername = (LPWSTR)g_username;
CRecieveMailDlg::DlgBox(g_rmaildlg,g_hInst,hwnd);
return TRUE;
}
BOOL CRecieveMailDlg::DlgBox(CRecieveMailDlg &dlg, HINSTANCE hinst, HWND parent)
{
dlg.m_result = DialogBox(hinst,MAKEINTRESOURCE(IDD_DIALOG_RMAILDLG),parent,(DLGPROC)CRecieveMailDlgProc);
if(dlg.m_result == -1)
return FALSE;
return TRUE;
}
BOOL CRecieveMailDlg::DestroyDlg(CRecieveMailDlg &dlg, HWND hDlg)
{
if(!EndDialog(hDlg,dlg.m_result))
return FALSE;
return TRUE;
}
BOOL CRecieveMailDlg::InitialDlg(CRecieveMailDlg &dlg, HWND hDlg)
{
TCHAR lpszSubTitle[80];
// Specify that the dialog box should stretch full screen
SHINITDLGINFO shidi;
ZeroMemory(&shidi, sizeof(shidi));
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_SIPDOWN;
shidi.hDlg = hDlg;
// Set up the menu bar
SHMENUBARINFO shmbi;
ZeroMemory(&shmbi, sizeof(shmbi));
shmbi.cbSize = sizeof(shmbi);
shmbi.hwndParent = hDlg;
shmbi.nToolBarId = IDR_MENUBAR_CANCLE;
shmbi.hInstRes = g_hInst;
// If we could not initialize the dialog box, return an error
if (!(SHInitDialog(&shidi) && SHCreateMenuBar(&shmbi)))
{
return FALSE;
}
// set the title bar
LoadString(g_hInst,IDS_STRING_RECEIMAIL,lpszSubTitle,ARRAYSIZE(lpszSubTitle));
lstrcat(lpszSubTitle,L" ");
lstrcat(lpszSubTitle,dlg.m_curusername);
SetWindowText(hDlg, lpszSubTitle);
//Overriding Back button functionality
(void)SendMessage(shmbi.hwndMB, SHCMBM_OVERRIDEKEY, VK_TBACK,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
SendMessage(GetDlgItem(hDlg,IDC_PROGRESS_MAIL),PBM_SETRANGE32,0,100);
SendMessage(GetDlgItem(hDlg,IDC_PROGRESS_MAIL),PBM_SETPOS,0,0);
SetTimer(hDlg,1000,500,NULL);
dlg.m_cancleflag = FALSE;
return TRUE;
}
BOOL CRecieveMailDlg::LoadErrorString(int id,LPWSTR buffer,int len)
{
int sid;
switch (id)
{
case CAN_NOT_CONNECT_POPSERVER:sid = IDS_STRING_SERVERNOTEXIST;break;
case POP_LOGIN_ERROR:sid = IDS_STRING_SMTPLOGINERROR;break;
case RECEI_FAIL:sid = IDS_STRING_RETRIVEIMFFAIL;break;
case CONNECT_INTERRUPT:sid = IDS_STRING_CONNECTIONINTERRUP;break;
case DISCONNECT_FAIL:sid = IDS_STRING_DISCOUNTERROR;break;
case LIST_MAIL_FAIL:sid = IDS_STRING_LISTMAILFAIL;break;
case LIST_UID_FAIL:sid = IDS_STRING_LISTUIDFAIL;break;
case GPRS_CREAEFAIL:sid = IDS_STRING_GPRSFAIL;break;
case RECIEVE_SUCEES:sid = IDS_STRING_COMPLETE;break;
default:return FALSE;
}
LoadString(g_hInst,sid,buffer,len);
return TRUE;
}
BOOL CRecieveMailDlg::RecieveMail(CRecieveMailDlg *dlg, HWND hDlg, userDataDB *pdb)
{
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -