📄 cmaileditdlg.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 + -