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

📄 cmaileditdlg.cpp

📁 有关win32应用程序编程和wince应用程序编程的很全面
💻 CPP
字号:
// CMailEditDlg.cpp: implementation of the CMailEditDlg class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CMailEditDlg.h"
#include "resource.h"
#include "CContactsListDlg.h"
#include "CSendMailDB.h"
#include "CSendMailManager.h"
#include "harTransform.h"
#include "eSmtp.h"
#include "CSendingMailDlg.h"
extern CContactsListDlg g_contactlistdlg;
extern HINSTANCE g_hInst;
extern CSendMailDB g_sendmaildb;
extern TCHAR g_username[ADDRESS_LENTH];
extern CSendingMailDlg g_sendingmaildlg;
CMailEditDlg   g_maileditdlg;


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMailEditDlg::CMailEditDlg()
{

}

CMailEditDlg::~CMailEditDlg()
{

}



BOOL CALLBACK CMailEditDlgProc(const HWND hDlg, const UINT uiMessage, const WPARAM wParam, const LPARAM lParam)
{
	BOOL	bProcessedMsg = TRUE;
	switch(uiMessage)
	{
		case WM_INITDIALOG:
			CMailEditDlg::InitialDlg(g_maileditdlg,hDlg);
			break;
			
		case WM_COMMAND:
			switch (LOWORD(wParam)) 
			{
			case IDC_BUTTON_TO:					//收信人地址
				if(HIWORD(wParam) == BN_CLICKED)
				{
					g_contactlistdlg.m_selectflag = TRUE;
					g_contactlistdlg.CreateDlg(hDlg,g_hInst);
				
					lstrcat(g_contactlistdlg.m_resaddress,L" ");
					SendMessage(GetDlgItem(hDlg,IDC_EDIT_TO),EM_SETSEL,MAILEIDTADDRESSLENGH,MAILEIDTADDRESSLENGH);
					SendMessage(GetDlgItem(hDlg,IDC_EDIT_TO),EM_REPLACESEL ,FALSE,(long)g_contactlistdlg.m_resaddress);

					
				}
				break;	
			case ID_MENUITEM_TOP:
				{
 				 SendMessage(hDlg,DM_RESETSCROLL,TRUE,TRUE);
				 g_maileditdlg.m_focus = GetDlgItem(hDlg,IDC_EDIT_TO);
				 SetFocus(g_maileditdlg.m_focus);
				 break;
				}

			case ID_MENUITEM_SAVE:
				if(CMailEditDlg::SaveMail(g_maileditdlg,hDlg,MAIL_NOTSEND))
				{
					TCHAR imf[50];
					LoadString(g_hInst,IDS_STRING_MAILSAVED,imf,50);
					MessageBox(hDlg,imf,NULL,MB_OK|MB_ICONINFORMATION);
					CMailEditDlg::ClearText(g_maileditdlg,hDlg);
				}
				break;

			case ID_MENUITEM_SEND:
				if(CMailEditDlg::SendMail(g_maileditdlg,hDlg))
				{
					TCHAR imf[50];
					LoadString(g_hInst,IDS_STRING_SUCCESSSEND,imf,50);
					MessageBox(hDlg,imf,NULL,MB_OK|MB_ICONINFORMATION);
					CMailEditDlg::ClearText(g_maileditdlg,hDlg);
				}
				else
				{
					TCHAR imf[80];
					TCHAR title[10];
					LoadString(g_hInst,IDS_STRING_ERROR,title,10);
					CMailEditDlg::LoadErrorString(g_messageid,imf,80);
					MessageBox(hDlg,imf,title,MB_OK|MB_ICONINFORMATION);

				}
				break;

			case ID_MENUITEM_SS:				
				if(CMailEditDlg::SendMail(g_maileditdlg,hDlg))
				{
					CMailEditDlg::SaveMail(g_maileditdlg,hDlg,MAIL_SENDED);
					TCHAR imf[50];
					LoadString(g_hInst,IDS_STRING_SUCCESSSEND,imf,50);
					MessageBox(hDlg,imf,NULL,MB_OK|MB_ICONINFORMATION);
					CMailEditDlg::ClearText(g_maileditdlg,hDlg);
				}
				else
				{
					CMailEditDlg::SaveMail(g_maileditdlg,hDlg,MAIL_NOTSEND);
					TCHAR imf[80];
					TCHAR title[10];
					LoadString(g_hInst,IDS_STRING_ERROR,title,10);
					CMailEditDlg::LoadErrorString(g_messageid,imf,80);
					MessageBox(hDlg,imf,title,MB_OK|MB_ICONINFORMATION);

				}
				break;
			

			case ID_MENUITEM_EXIT:
				{
					if(CMailEditDlg::DeterMotify(g_maileditdlg,hDlg))
					{	
						TCHAR imf[50];
						LoadString(g_hInst,IDS_STRING_SAVENOTIFY,imf,50);
						int res = MessageBox(hDlg,imf,NULL,MB_YESNO|MB_ICONQUESTION);
						if(res == IDYES)
							CMailEditDlg::Savesame(g_maileditdlg,hDlg,FALSE);
					}
					CMailEditDlg::DestroyDlg(g_maileditdlg,hDlg);
					break;
				}

			case ID_MENUITEM_SENDSENDSAVE:
				{
					if(CMailEditDlg::SendMail(g_maileditdlg,hDlg))
					{
						TCHAR imf[50];
						CMailEditDlg::Savesame(g_maileditdlg,hDlg,TRUE);
						LoadString(g_hInst,IDS_STRING_SUCCESSSEND,imf,50);
						MessageBox(hDlg,imf,NULL,MB_OK|MB_ICONINFORMATION);
						CMailEditDlg::DestroyDlg(g_maileditdlg,hDlg);
					}
					else
					{
						CMailEditDlg::Savesame(g_maileditdlg,hDlg,FALSE);
						TCHAR imf[80];
						TCHAR title[10];
						LoadString(g_hInst,IDS_STRING_ERROR,title,10);
						CMailEditDlg::LoadErrorString(g_messageid,imf,80);
						MessageBox(hDlg,imf,title,MB_OK|MB_ICONINFORMATION);
					}
					break;
				}

			case ID_MENUITEM_RESET:
				CMailEditDlg::UpDateDlgEdit(g_maileditdlg,hDlg,g_maileditdlg.m_pmail);
				break;

			case ID_MENUITEM_CANCLE:
				if(CMailEditDlg::CancleEdit(g_maileditdlg,hDlg))
						CMailEditDlg::DestroyDlg(g_maileditdlg,hDlg);
				break;
			
			default:
				bProcessedMsg = FALSE;
				break;
			}
			break;	

		case WM_CLOSE:
			CMailEditDlg::DestroyDlg(g_maileditdlg,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)
			 {
				 SetFocus(g_maileditdlg.m_focus);
			 }
			 else
			 {
				 g_maileditdlg.m_focus = GetFocus();
				 bProcessedMsg = FALSE;
			 }
			 break;
			}

		default:
			bProcessedMsg = FALSE;
			break;
	}
	return bProcessedMsg;
}

BOOL CMailEditDlg::DlgBox(CMailEditDlg &dlg, HWND parent, HINSTANCE hInstance)
{
	dlg.m_result = DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG_EDITMAIL),parent,(DLGPROC )CMailEditDlgProc);
	if(dlg.m_result == -1)
		return FALSE;
	return TRUE;
}

BOOL CMailEditDlg::InitialDlg(CMailEditDlg &dlg,HWND hDlg)
{
	TCHAR		lpszSubTitle[30];

	// Specify that the dialog box should stretch full screen
	SHINITDLGINFO shidi;
	ZeroMemory(&shidi, sizeof(shidi));
    shidi.dwMask = SHIDIM_FLAGS;
    shidi.dwFlags = SHIDIF_SIZEDLGFULLSCREEN|SHIDIF_SIPDOWN;
    shidi.hDlg = hDlg;
            
	// Set up the menu bar
	SHMENUBARINFO shmbi;
	ZeroMemory(&shmbi, sizeof(shmbi));
    shmbi.cbSize = sizeof(shmbi);
    shmbi.hwndParent = hDlg;
	if(dlg.m_pmail == NULL)
		shmbi.nToolBarId = IDR_MENUBAR_EDITMAIL;
	else 
		shmbi.nToolBarId = IDR_MENUBAR_EDITMAIL2;
    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_EDITMAIL,lpszSubTitle,ARRAYSIZE(lpszSubTitle));
	if (lpszSubTitle)
		SetWindowText(hDlg, lpszSubTitle);

	//Overriding Back button functionality
	(void)SendMessage(shmbi.hwndMB, SHCMBM_OVERRIDEKEY, VK_TBACK, 
			  MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, 
						 SHMBOF_NODEFAULT | SHMBOF_NOTIFY));

	dlg.m_focus = GetDlgItem(hDlg,IDC_EDIT_TO);
	SetFocus(dlg.m_focus);

//设定编辑框里的字符长度
	SendMessage(GetDlgItem(hDlg,IDC_EDIT_TO),EM_LIMITTEXT,MAILEIDTADDRESSLENGH,0);
	SendMessage(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),EM_LIMITTEXT,MAIL_SUBJECTLENTH,0);
	SendMessage(GetDlgItem(hDlg,IDC_EDIT_CONTENT),EM_LIMITTEXT,MAIL_CONTENTLENTH,0);
	
	if(dlg.m_havecontactflag)
	{
		lstrcat(g_contactlistdlg.m_resaddress,L" ");
		SetWindowText(GetDlgItem(hDlg,IDC_EDIT_TO),g_contactlistdlg.m_resaddress);
	}

	if(dlg.m_pmail != NULL)
		UpDateDlgEdit(dlg,hDlg,dlg.m_pmail);

	
	return TRUE;
}

BOOL CMailEditDlg::DestroyDlg(CMailEditDlg &dlg, HWND hDlg)
{
	if(!EndDialog(hDlg,dlg.m_result))
		return FALSE;
	return TRUE;
}

BOOL CMailEditDlg::SendMail(CMailEditDlg &dlg, HWND hDlg)
{
	g_sendingmaildlg.m_pdlg = &dlg;
	g_sendingmaildlg.m_parent = hDlg;
	CSendingMailDlg::DlgBox(g_sendingmaildlg,g_hInst,hDlg);
	BOOL res = g_sendingmaildlg.m_res;
	return res;
}

BOOL CMailEditDlg::SaveMail(CMailEditDlg &dlg, HWND hwnd,int sendflag)
{


	CSMailImf mail;
	TCHAR	to[MAILEIDTADDRESSLENGH];
	CEPROPID proid = ID_TIME;
	int start,i;

	mail.m_oidRecord = 0;
	memset(mail.m_address,0,sizeof(mail.m_address));

	GetWindowText(GetDlgItem(hwnd,IDC_EDIT_SUBJECT),mail.m_mailsubject,ARRAYSIZE(mail.m_mailsubject));

	GetWindowText(GetDlgItem(hwnd,IDC_EDIT_TO),to,MAILEIDTADDRESSLENGH);
	mail.m_numaddress = 0;
	start = 0;
	for(i = 0;to[i] != 0;++i)
	{
		if((i == 0||to[i-1]==TCHAR(' '))&&to[i] != TCHAR(' '))
		{
			mail.m_numaddress++;
			if(mail.m_numaddress == 1)
				start = i;
		}
	}
	for(i = start;to[i]!=TCHAR(' ')&&to[i]!=0;++i)
		mail.m_address[i - start] = to[i];

	mail.m_sendflag = sendflag;
	if(sendflag == MAIL_SENDED)
	{
		SYSTEMTIME t;
		GetLocalTime(&t);
		SystemTimeToFileTime(&t,&mail.m_time);
	}
	
	if(g_sendmaildb.OpenDataBase(proid,g_username) == FALSE)
	{
		if(g_sendmaildb.CreateDataBase(g_username) == FALSE)
		{
			return FALSE;
		}
		g_sendmaildb.OpenDataBase(proid,g_username);
	}
		
	CSendMailManager* pm = new CSendMailManager;
	pm->CreateUserDirectory(g_username);
	pm->GenerateFileName(mail,g_username);


	LPWSTR tto,content,sub;
	tto = new TCHAR[MAILEIDTADDRESSLENGH+1];
	content = new TCHAR[MAIL_CONTENTLENTH+1];
	sub = new TCHAR[MAIL_SUBJECTLENTH+1];

	GetWindowText(GetDlgItem(hwnd,IDC_EDIT_TO),tto,MAILEIDTADDRESSLENGH);
	GetWindowText(GetDlgItem(hwnd,IDC_EDIT_SUBJECT),sub,MAIL_SUBJECTLENTH);
	mail.m_size = GetWindowText(GetDlgItem(hwnd,IDC_EDIT_CONTENT),content,MAIL_CONTENTLENTH);
	pm->SaveMailFile(mail.m_file,sub,to,NULL,NULL,content);

	if(g_sendmaildb.EditRecord(mail) == FALSE)
	{
		delete pm;
		return FALSE;
	}

	delete []sub;
	delete []content;
	delete []tto;
	delete pm;
	
	return TRUE;
}

BOOL CMailEditDlg::CancleEdit(CMailEditDlg &dlg, HWND hDlg)
{
	TCHAR buffer[50];
	LoadString(g_hInst,IDS_STRING_QUITEDIT,buffer,50);
	int res = MessageBox(hDlg,buffer,NULL,MB_YESNO|MB_ICONQUESTION);
	if(res == IDYES)
		return TRUE;
	return FALSE;
}

BOOL CMailEditDlg::UpDateDlgEdit(CMailEditDlg &dlg, HWND hDlg, CSMailImf* mail)
{
	HANDLE fhandle;
	DWORD size;
	LPWSTR	pbuffer;


	SetWindowText(GetDlgItem(hDlg,IDC_EDIT_TO),L"");
	SetWindowText(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),L"");
	SetWindowText(GetDlgItem(hDlg,IDC_EDIT_CONTENT),L"");

	fhandle = CreateFile(mail->m_file,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,NULL);
	if(fhandle == NULL||fhandle == INVALID_HANDLE_VALUE)
	{
		int m = GetLastError();
		return FALSE;
	}


	size = GetFileSize(fhandle,NULL) / 2;
	CloseHandle(fhandle);

	pbuffer = new TCHAR[size + 10];
	if(pbuffer == NULL)
	{
		return FALSE;
	}

	CSendMailManager* pm = new CSendMailManager;
	pm->ReadSMailFile(mail->m_file,pbuffer,size);
	pbuffer[size] = 0;
	delete pm;
	
	DWORD begin,i,count;
	begin = 0;
	count = 0;
	for(i = 0;i < size;++i)
	{
		if(pbuffer[i] == TCHAR('\n'))
		{
			count++;
			pbuffer[i] = 0;
			if(count == 1)
			{
				SetWindowText(GetDlgItem(hDlg,IDC_EDIT_TO),pbuffer + begin);
			}
			else if(count == 2)
			{
				SetWindowText(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),pbuffer + begin);
				SetWindowText(GetDlgItem(hDlg,IDC_EDIT_CONTENT),pbuffer+i+1);
				break;
			}
			begin = i + 1;
		}
	}
	delete []pbuffer;

	SendMessage(GetDlgItem(hDlg,IDC_EDIT_TO),EM_SETMODIFY,FALSE,0);
	SendMessage(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),EM_SETMODIFY,FALSE,0);
	SendMessage(GetDlgItem(hDlg,IDC_EDIT_CONTENT),EM_SETMODIFY,FALSE,0);
	return TRUE;
}

BOOL CMailEditDlg::ClearText(CMailEditDlg &dlg, HWND hDlg)
{
	SetWindowText(GetDlgItem(hDlg,IDC_EDIT_TO),L"");
	SetWindowText(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),L"");
	SetWindowText(GetDlgItem(hDlg,IDC_EDIT_CONTENT),L"");
	return TRUE;
}




BOOL CMailEditDlg::Savesame(CMailEditDlg &dlg,HWND hDlg,BOOL reallysend)
{

	CSMailImf mail;
	TCHAR	to[MAILEIDTADDRESSLENGH];
	CEPROPID proid = ID_TIME;
	int start,i;

	mail.m_oidRecord = dlg.m_pmail->m_oidRecord;
	memset(mail.m_address,0,sizeof(mail.m_address));

	GetWindowText(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),mail.m_mailsubject,ARRAYSIZE(mail.m_mailsubject));

	GetWindowText(GetDlgItem(hDlg,IDC_EDIT_TO),to,MAILEIDTADDRESSLENGH);
	mail.m_numaddress = 0;
	start = 0;
	for(i = 0;to[i] != 0;++i)
	{
		if((i == 0||to[i-1]==TCHAR(' '))&&to[i] != TCHAR(' '))
		{
			mail.m_numaddress++;
			if(mail.m_numaddress == 1)
				start = i;
		}
	}
	for(i = start;to[i]!=TCHAR(' ')&&to[i]!=0;++i)
		mail.m_address[i - start] = to[i];
	
	if(!reallysend)
	{
		mail.m_sendflag = dlg.m_pmail->m_sendflag;
		mail.m_time = dlg.m_pmail->m_time;
	}
	else
	{
		SYSTEMTIME t;
		GetLocalTime(&t);
		SystemTimeToFileTime(&t,&mail.m_time);
		mail.m_sendflag = MAIL_SENDED;
	}

	lstrcpy(mail.m_file,dlg.m_pmail->m_file);

	if(g_sendmaildb.OpenDataBase(proid,g_username) == FALSE)
	{
		if(g_sendmaildb.CreateDataBase(g_username) == FALSE)
		{
			return FALSE;
		}
		g_sendmaildb.OpenDataBase(proid,g_username);
	}
		
	CSendMailManager* pm = new CSendMailManager;

	LPWSTR tto,content,sub;
	tto = new TCHAR[MAILEIDTADDRESSLENGH+1];
	content = new TCHAR[MAIL_CONTENTLENTH+1];
	sub = new TCHAR[MAIL_SUBJECTLENTH+1];

	GetWindowText(GetDlgItem(hDlg,IDC_EDIT_TO),tto,MAILEIDTADDRESSLENGH);
	GetWindowText(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),sub,MAIL_SUBJECTLENTH);
	mail.m_size = GetWindowText(GetDlgItem(hDlg,IDC_EDIT_CONTENT),content,MAIL_CONTENTLENTH);
	pm->SaveMailFile(mail.m_file,sub,to,NULL,NULL,content);

	if(g_sendmaildb.EditRecord(mail) == FALSE)
	{
		delete pm;
		return FALSE;
	}
	delete []sub;
	delete []content;
	delete []tto;
	delete pm;
	
	return TRUE;

}



BOOL CMailEditDlg::DeterMotify(CMailEditDlg &dlg, HWND hDlg)
{
	return (SendMessage(GetDlgItem(hDlg,IDC_EDIT_TO),EM_GETMODIFY ,0,0)
		   ||SendMessage(GetDlgItem(hDlg,IDC_EDIT_SUBJECT),EM_GETMODIFY ,0,0)
		   ||SendMessage(GetDlgItem(hDlg,IDC_EDIT_CONTENT),EM_GETMODIFY ,0,0));
}

BOOL CMailEditDlg::LoadErrorString(int id,LPWSTR buffer,int len)
{
	int sid;
	switch (id)
	{
		case SERVER_NO_RESPONSE:sid = IDS_STRING_SERVERNORES;break;
		case CAN_NOT_FIND_SERVER:sid = IDS_STRING_SERVERNOTEXIST;break;
		case SMTP_LOGIN_ERROR:sid = IDS_STRING_SMTPLOGINERROR;break;
		case DES_NOT_RIGHT:sid = IDS_STRING_MAILDESNOTRIGHT;break;
		case TRANS_DATA_ERROR:sid = IDS_STRING_DATATANSEROOR;break;
		case DESNOT_EMPTY:sid = IDS_STRING_RECEIVERNOTEMPTY;break;
		case GPRS_CREAEFAIL:sid = IDS_STRING_GPRSFAIL;break;
		default:return FALSE;
	}
	LoadString(g_hInst,sid,buffer,len);
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -