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

📄 csendmaildlg.cpp

📁 这个基于嵌入式平台SMART PHONE电子邮件收发管理系统(MAIL MAN是一个电子邮件客户端软件。它以很小的体积
💻 CPP
字号:
// CSendMailDlg.cpp: implementation of the CSendMailDlg class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CSendMailDlg.h"
#include "CMailEditDlg.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSendMailDlg g_sendmaildlg;
extern HBITMAP g_mailsendmap;
extern HBITMAP g_mailnotsendmap;
extern CSendMailDB	g_sendmaildb;
extern TCHAR g_username[ADDRESS_LENTH];
extern CMailEditDlg g_maileditdlg;
CSendMailDlg::CSendMailDlg()
{

}

CSendMailDlg::~CSendMailDlg()
{

}

BOOL CALLBACK CSendMailDlgProc(const HWND hDlg, const UINT uiMessage, const WPARAM wParam, const LPARAM lParam)
{
	BOOL	bProcessedMsg = TRUE;
	
	switch(uiMessage)
	{
		case WM_INITDIALOG:
			CSendMailDlg::InitialDlg(g_sendmaildlg,hDlg);
			break;
			
		case WM_MEASUREITEM:	//Set the item height to 36 pixels	
		{
			LPMEASUREITEMSTRUCT lpmi;

			lpmi = (LPMEASUREITEMSTRUCT)lParam;

			if(lpmi->CtlType == ODT_LISTVIEW)
			{
					lpmi->itemHeight = 30;
			}
			break;
		}


		case WM_DRAWITEM:		//custom drawing code for owner-draw listview control	
			CSendMailDlg::DrawItem(g_sendmaildlg,hDlg,lParam);
			break;


		case WM_COMMAND:
			switch (LOWORD(wParam)) 
			{
				
			case ID_MENUITEM_EXIT:
				CSendMailDlg::DestroyDlg(g_sendmaildlg,hDlg);
				break;

			case ID_MENUITEM_DELETE:
				{
					int index = ListView_GetNextItem(g_sendmaildlg.m_view,-1,LVNI_SELECTED);
					if(index == -1)
						break;
					
					CSMailImf mail;
					g_sendmaildb.SeekToPos(index,mail,&g_sendmaildlg.m_curcep,1);
					g_sendmaildb.ReadRecord(mail);

					TCHAR imf[50];
					LoadString(g_hInst,IDS_STRING_READLLYDELETEMAIL,imf,50);
					int res  = MessageBox(hDlg,imf,NULL,MB_OKCANCEL|MB_ICONQUESTION);
					if(res == IDOK)
					{
						CSendMailDlg::DeleteMail(g_sendmaildlg,hDlg,mail);
						ListView_SetItemCount(g_sendmaildlg.m_view, g_sendmaildb.GetNumDisplay(g_username,0,NULL));
						InvalidateRect(g_sendmaildlg.m_view,NULL,FALSE);
					}
					break;
				}
			case ID_MENUITEM_CLEARALL:
				{
					TCHAR imf[50];
					LoadString(g_hInst,IDS_STRING_REALLYCLEAR,imf,50);
					int res  = MessageBox(hDlg,imf,NULL,MB_OKCANCEL|MB_ICONQUESTION);
					if(res == IDOK)
					{
						CSendMailDlg::ClearMailBox(g_sendmaildlg,hDlg);
						ListView_SetItemCount(g_sendmaildlg.m_view, g_sendmaildb.GetNumDisplay(g_username,0,NULL));
						InvalidateRect(g_sendmaildlg.m_view,NULL,FALSE);
					}
					break;
				}
			case ID_MENUITEM_SD:
				{
					g_sendmaildb.OpenDataBase(ID_TIME,g_username);
					InvalidateRect(g_sendmaildlg.m_view,NULL,FALSE);
					break;
				}
			case ID_MENUITEM_SS:
				{
					g_sendmaildb.OpenDataBase(ID_SIZE,g_username);
					InvalidateRect(g_sendmaildlg.m_view,NULL,FALSE);
					break;
				}
			case ID_MENUITEM_SA:
				{
					g_sendmaildb.OpenDataBase(ID_ADDRESS,g_username);
					InvalidateRect(g_sendmaildlg.m_view,NULL,FALSE);
					break;
				}
			case ID_MENUITEM_SENDED:
				{
					g_sendmaildb.OpenDataBase(ID_SENDFLAG,g_username);
					g_sendmaildlg.m_curcep.propid = ID_SENDFLAG;
					g_sendmaildlg.m_curcep.wLenData = g_sendmaildlg.m_curcep.wFlags = 0;
					g_sendmaildlg.m_curcep.val.iVal = MAIL_SENDED;
					ListView_SetItemCount(g_sendmaildlg.m_view, g_sendmaildb.GetNumDisplay(g_username,&g_sendmaildlg.m_curcep,1));
					InvalidateRect(g_sendmaildlg.m_view,NULL,FALSE);
					break;
				}
			case ID_MENUITEM_NONE:
				{
					g_sendmaildb.OpenDataBase(ID_TIME,g_username);
					g_sendmaildlg.m_curcep.propid = 0;
					ListView_SetItemCount(g_sendmaildlg.m_view, g_sendmaildb.GetNumDisplay(g_username,&g_sendmaildlg.m_curcep,1));
					InvalidateRect(g_sendmaildlg.m_view,NULL,FALSE);
					break;
				}
			default:
				if(BN_CLICKED == HIWORD(wParam))
				{
					int index = ListView_GetNextItem(g_sendmaildlg.m_view,-1,LVNI_SELECTED);
					if(index == -1)
						break;
					CSMailImf mail;
					g_sendmaildb.SeekToPos(index,mail,&g_sendmaildlg.m_curcep,1);
					g_sendmaildb.ReadRecord(mail);
					g_maileditdlg.m_pmail = &mail;
					g_maileditdlg.m_havecontactflag = FALSE;
					CMailEditDlg::DlgBox(g_maileditdlg,hDlg,g_hInst);
				}
				break;
			}
			break;	

		case WM_CLOSE:	
			
			break;

		case WM_HOTKEY:
			 if(VK_TBACK == HIWORD(lParam)) 
			{
				
            }
			else
				bProcessedMsg = FALSE;
            break;

		case WM_ACTIVATE:
			 {
                DWORD dwFlags = LOWORD(wParam);

                if(dwFlags != WA_INACTIVE)
                {
                    SetFocus(g_sendmaildlg.m_view);
                }
             }
			break;

		case  WM_NOTIFY:
			if(IDC_LIST_MAIL == wParam)
			{
				CSendMailDlg::OnListViewNotify(g_sendmaildlg,hDlg,lParam);
            }
            else
            {
				bProcessedMsg = FALSE;
            }
            break;

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

BOOL CSendMailDlg::DlgBox(CSendMailDlg &dlg, HINSTANCE hinst, HWND parent)
{
	dlg.m_result = DialogBox(hinst,MAKEINTRESOURCE(IDD_DIALOG_SENDMAILDLAG),parent,(DLGPROC)CSendMailDlgProc);
	if(dlg.m_result == -1)
		return FALSE;
	return TRUE;
}


BOOL CSendMailDlg::InitialDlg(CSendMailDlg &dlg, HWND hDlg)
{
	TCHAR		lpszSubTitle[30];
	TCHAR		headertitle[30];
	// Specify that the dialog box should stretch full screen
	SHINITDLGINFO shidi;
	ZeroMemory(&shidi, sizeof(shidi));
    shidi.dwMask = SHIDIM_FLAGS;
    shidi.dwFlags = SHIDIF_SIZEDLGFULLSCREEN;
    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_SENDMAILBOX;
    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_SENDMAILBOX,lpszSubTitle,ARRAYSIZE(lpszSubTitle));
	if (lpszSubTitle)
		SetWindowText(hDlg,lpszSubTitle);

	

	RECT rc;
	GetClientRect(hDlg,&rc);
    dlg.m_view = CreateWindow(WC_LISTVIEW, NULL,
            WS_CHILD | WS_VISIBLE | LVS_REPORT  | LVS_OWNERDATA |LVS_OWNERDRAWFIXED | WS_BORDER,
            rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
            hDlg, (HMENU)IDC_LIST_MAILBOXLISTVIEW, g_hInst,NULL);

	ListView_SetExtendedListViewStyle(dlg.m_view,
            ListView_GetExtendedListViewStyle(dlg.m_view) | LVS_EX_FULLROWSELECT);

//添加列
	dlg.m_columwidth[0] = (rc.right-rc.left)*3/5;

	LV_COLUMN lvColumn;
	lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_WIDTH |LVCF_TEXT;
    lvColumn.fmt = LVCFMT_LEFT;
    lvColumn.cx = dlg.m_columwidth[0];
	LoadString(g_hInst,IDS_STRING_TOADDRESS,headertitle,30);
	lvColumn.pszText = headertitle;
	if(-1 == ListView_InsertColumn(dlg.m_view,0, &lvColumn))
    {
           return FALSE;
    }

	dlg.m_columwidth[1] = (rc.right - rc.left)*3/5;
	lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_WIDTH |LVCF_TEXT;
    lvColumn.fmt = LVCFMT_LEFT;
    lvColumn.cx = dlg.m_columwidth[1];
	LoadString(g_hInst,IDS_STRING_MAILSUBJECT,headertitle,30);
	lvColumn.pszText = headertitle;
	if(-1 == ListView_InsertColumn(dlg.m_view,1, &lvColumn))
    {
           return FALSE;
    }

	dlg.m_columwidth[2] = (rc.right - rc.left)*2/5+4;
	lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_WIDTH |LVCF_TEXT;
    lvColumn.fmt = LVCFMT_LEFT;
    lvColumn.cx = dlg.m_columwidth[2];
	LoadString(g_hInst,IDS_STRING_SENDTIME,headertitle,30);
	lvColumn.pszText = headertitle;
	if(-1 == ListView_InsertColumn(dlg.m_view,2, &lvColumn))
    {
           return FALSE;
    }

	dlg.m_columwidth[3] = (rc.right - rc.left)/4+5;
	lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_WIDTH |LVCF_TEXT;
    lvColumn.fmt = LVCFMT_LEFT;
    lvColumn.cx = dlg.m_columwidth[3];
	LoadString(g_hInst,IDS_STRING_MAILSIZE,headertitle,30);
	lvColumn.pszText = headertitle;
	if(-1 == ListView_InsertColumn(dlg.m_view,3, &lvColumn))
    {
           return FALSE;
    }


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


//open db
	if(g_sendmaildb.OpenDataBase(ID_TIME,g_username) == FALSE)
	{
		if(g_sendmaildb.CreateDataBase(g_username) == FALSE)
		{
			return FALSE;
		}
		g_sendmaildb.OpenDataBase(ID_TIME,g_username);
	}
	ListView_SetItemCount(dlg.m_view, g_sendmaildb.GetNumDisplay(g_username,0,NULL));

	return TRUE;
}

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

LRESULT CSendMailDlg::OnListViewNotify(CSendMailDlg &dlg, HWND hDlg, LPARAM lParam)
{
	NMHDR* pnmh = (NMHDR*) lParam;
    LRESULT lResult = 0;

    switch(pnmh->code)
    {
        case LVN_GETDISPINFO:
			break;
        case LVN_ITEMACTIVATE:
            break;
        case LVN_ODFINDITEM:
            break;
    }

    return(lResult);
}

BOOL CSendMailDlg::DrawItem(CSendMailDlg &dlg, HWND hDlg, LPARAM lParam)
{
	CSMailImf	mail;
	LPDRAWITEMSTRUCT lpdis;
	lpdis = (LPDRAWITEMSTRUCT)lParam;
	HDC		hdc;
	int index;	
	DWORD linelen;
	if(lpdis->CtlType != ODT_LISTVIEW)
		return TRUE;

	LPCTSTR lpszText = (LPCTSTR) lpdis->itemData;
	index = lpdis->itemID;
	g_sendmaildb.SeekToPos(index,mail,&dlg.m_curcep,1);
	g_sendmaildb.ReadRecord(mail);
	hdc = lpdis->hDC;
		
//draw the back ground
	COLORREF crOldTextColor = GetTextColor(hdc);
	COLORREF crOldBkColor = GetBkColor(hdc);
	HBRUSH hbrBkColor = CreateSolidBrush (crOldBkColor);
	HBRUSH hbrSEL = CreateSolidBrush (GetSysColor(COLOR_HIGHLIGHT));		  			 
	if ((lpdis->itemAction | ODA_SELECT) && (lpdis->itemState & ODS_SELECTED))
	{
		SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
		FillRect(hdc, &lpdis->rcItem,hbrSEL);
	}
	else
		FillRect(hdc, &lpdis->rcItem,hbrBkColor);
	DeleteObject (hbrSEL);
	DeleteObject (hbrBkColor);

	if(mail.m_sendflag == MAIL_SENDED)
	{
		HDC hdcTemp = CreateCompatibleDC(hdc);	
		SelectObject(hdcTemp, g_mailsendmap);
		BITMAP bm;
		GetObject(g_mailsendmap, sizeof(BITMAP), &bm);
		BOOL res = BitBlt(hdc,lpdis->rcItem.left+2,(lpdis->rcItem.top+5), bm.bmWidth, bm.bmHeight, hdcTemp, 0, 0, SRCCOPY);
		DeleteDC(hdcTemp);
	}
	else
	{
		HDC hdcTemp = CreateCompatibleDC(hdc);	
		SelectObject(hdcTemp, g_mailnotsendmap);
		BITMAP bm;
		GetObject(g_mailnotsendmap, sizeof(BITMAP), &bm);
		BOOL res = TransparentImage(hdc,lpdis->rcItem.left+2,(lpdis->rcItem.top+5), bm.bmWidth, bm.bmHeight, hdcTemp,0,0,bm.bmWidth, bm.bmHeight,RGB(255,255,255));
		DeleteDC(hdcTemp);
	}

	RECT	textrc;
	TCHAR	buffer[80];
	TCHAR   text[80];

//draw address
	textrc.bottom = lpdis->rcItem.bottom;
	textrc.top = lpdis->rcItem.top;
	textrc.right = lpdis->rcItem.left + dlg.m_columwidth[0];
	textrc.left = lpdis->rcItem.left+20;
	lstrcpy(buffer,mail.m_address);
	if(mail.m_numaddress > 1)
		lstrcat(buffer,L"\n...");
	linelen = 13;
	if(lstrlen(buffer) > linelen)
	{
		wcsncpy(text,buffer,linelen);
		text[linelen] = TCHAR('\n');
		lstrcpy(text+linelen+1,buffer+linelen);
	}
	else
		lstrcpy(text,buffer);
	DrawText(hdc,text,-1,&textrc,DT_WORDBREAK);

//draw sub
	textrc.left = lpdis->rcItem.left + dlg.m_columwidth[0]+6;
	textrc.right = lpdis->rcItem.left + dlg.m_columwidth[0] + dlg.m_columwidth[1];
	linelen = 16;
	if(lstrlen(mail.m_mailsubject) > linelen)
	{
		wcsncpy(text,mail.m_mailsubject,linelen);
		text[linelen] = TCHAR('\n');
		lstrcpy(text+linelen+1,mail.m_mailsubject+linelen);
	}
	else
		lstrcpy(text,mail.m_mailsubject);
	DrawText(hdc,text,-1,&textrc,DT_WORDBREAK);

// Reset the background color and the text color back to their
// original values.

// draw time
	SYSTEMTIME systime;
	FileTimeToSystemTime(&mail.m_time,&systime);
	if(mail.m_sendflag == !MAIL_NOTSEND)
	{
		wsprintf(buffer,L"%04d.%02d.%02d\n%02d : %02d ",systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute);
	}
	else
	{
		wsprintf(buffer,L"----.--.-- ",systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute);
	}
	textrc.left = lpdis->rcItem.left + dlg.m_columwidth[0] + dlg.m_columwidth[1]+6;
	textrc.right = lpdis->rcItem.left + dlg.m_columwidth[0] + dlg.m_columwidth[1] + dlg.m_columwidth[2];
	DrawText(hdc,buffer,-1,&textrc,DT_WORDBREAK);

//draw size;
	textrc.left = lpdis->rcItem.left + dlg.m_columwidth[0] + dlg.m_columwidth[1]+ dlg.m_columwidth[2]+6;
	textrc.right = lpdis->rcItem.left + dlg.m_columwidth[0] + dlg.m_columwidth[1] + dlg.m_columwidth[2]+ dlg.m_columwidth[3];
	if(mail.m_size < 1024)
	{
		wsprintf(buffer,L"%d B",mail.m_size);
	}
	else
	{
		wsprintf(buffer,L"%.2f KB",mail.m_size / 1024.0);
	}
	DrawText(hdc,buffer,-1,&textrc,DT_WORDBREAK);
	SetTextColor(hdc, crOldTextColor);
	SetBkColor(hdc, crOldBkColor);
	ReleaseDC (dlg.m_view, hdc);
	return TRUE;
}

BOOL CSendMailDlg::DeleteMail(CSendMailDlg &dlg, HWND hDlg, CSMailImf &mail)
{
	BOOL res = DeleteFile(mail.m_file);
	res = g_sendmaildb.DeleteRecord(mail);
	return TRUE;
}

BOOL CSendMailDlg::ClearMailBox(CSendMailDlg &dlg, HWND hDlg)
{
	BOOL res1 = g_sendmaildb.ClearRecord(g_username);
	CSendMailManager m;
	BOOL res2 = m.ClearMailFile(g_username);
	return res1&&res2;
}

⌨️ 快捷键说明

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