⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crecievemaildlg.cpp

📁 这个基于嵌入式平台SMART PHONE电子邮件收发管理系统(MAIL MAN是一个电子邮件客户端软件。它以很小的体积
💻 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 + -