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

📄 csendmaildb.cpp

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

#include "stdafx.h"
#include "CSendMailDB.h"

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

CSendMailDB g_sendmaildb;
CSendMailDB::CSendMailDB()
{

}

CSendMailDB::~CSendMailDB()
{

}

BOOL CSendMailDB::MountVolum(LPWSTR vname)
{
	if(vname == NULL)
	{
		CREATE_SYSTEMGUID (&m_ceguid);
	}
	else
	{
		if(CeMountDBVol (&m_ceguid,vname,OPEN_ALWAYS) == FALSE)
			return FALSE;
	}
	return TRUE;
}



BOOL CSendMailDB::CreateDataBase(LPWSTR dbname)
{
	CEDBASEINFO dbinfo;
	dbinfo.dwFlags = CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC;
	lstrcpy(dbinfo.szDbaseName,dbname);
	dbinfo.dwDbaseType = SENDMAIL_BOX_DBTYPE;
	dbinfo.wNumSortOrder = SENDMAIL_SORT_ORDER;
	dbinfo.rgSortSpecs[0].propid = ID_TIME;
	dbinfo.rgSortSpecs[0].dwFlags = 0;
	dbinfo.rgSortSpecs[1].propid = ID_SIZE;
	dbinfo.rgSortSpecs[1].dwFlags = 0;
	dbinfo.rgSortSpecs[2].propid = ID_ADDRESS;
	dbinfo.rgSortSpecs[2].dwFlags = 0;
	dbinfo.rgSortSpecs[3].propid = ID_SENDFLAG;
	dbinfo.rgSortSpecs[3].dwFlags = 0;
	if(CeCreateDatabaseEx(&m_ceguid,&dbinfo) == NULL)
	{
		DWORD error = GetLastError();
		if(error == ERROR_DUP_NAME)
			return TRUE;
		return FALSE;
	}
	return TRUE;
}

BOOL CSendMailDB::UnmmountVolume()
{
	CloseHandle (m_hdb);
	BOOL res = CeUnmountDBVol(&m_ceguid);
	int id = GetLastError();
	return res;
}

BOOL CSendMailDB::ReadRecord(CSMailImf& record)
{
	WORD wProps;
    CEOID oid;
    PCEPROPVAL pRecord;
    PBYTE pBuff;
    DWORD dwRecSize;
    int i;

    // Read all properties for the record.  
    pBuff = 0;   // Let the function allocate the buffer.
    oid = CeReadRecordProps(m_hdb, CEDB_ALLOWREALLOC, &wProps, NULL,
                             &(LPBYTE)pBuff, &dwRecSize);
    // Failure on read.
    if (oid == 0) 
        return FALSE;

	
    // Copy the data from the record to the structure.  The order
    // of the array is not defined.
    memset (&record, 0 , sizeof (record));  // Zero return struct
	record.m_oidRecord = oid;
    pRecord = (PCEPROPVAL)pBuff;              // Point to CEPROPVAL
                                              // array.
    for (i = 0; i < wProps; i++) 
	{
        switch (pRecord->propid) 
		{
			case ID_SUB:
				lstrcpy (record.m_mailsubject, pRecord->val.lpwstr);
				break;
			case ID_FILE:
				lstrcpy (record.m_file, pRecord->val.lpwstr);
				break;
			case ID_ADDRESS:
				lstrcpy (record.m_address, pRecord->val.lpwstr);
				break;
			case ID_SENDFLAG:
				record.m_sendflag = pRecord->val.iVal;
				break;
			case ID_NUMADDRESS:
				record.m_numaddress = pRecord->val.iVal;
			case ID_TIME:
				record.m_time = pRecord->val.filetime;
				break;
			case ID_SIZE:
				record.m_size =  pRecord->val.lVal;
				break;
        }
        pRecord++;
    }
    LocalFree (pBuff);
    return TRUE;
}

BOOL CSendMailDB::EditRecord(CSMailImf &record)
{
	CEPROPVAL pro[7];

	pro[0].propid = ID_SUB;
	pro[0].wFlags = 0;
	pro[0].val.lpwstr = record.m_mailsubject;

	pro[1].propid = ID_FILE;
	pro[1].wFlags = 0;
	pro[1].val.lpwstr = record.m_file;

	pro[2].propid = ID_ADDRESS;
	pro[2].wFlags = 0;
	pro[2].val.lpwstr = record.m_address;

	pro[3].propid = ID_SENDFLAG;
	pro[3].wFlags = 0;
	pro[3].val.iVal = record.m_sendflag;


	pro[4].propid = ID_NUMADDRESS;
	pro[4].wFlags = 0;
	pro[4].val.iVal = record.m_numaddress;

	pro[5].propid = ID_TIME;
	pro[5].wFlags = 0;
	pro[5].val.filetime = record.m_time;

	pro[6].propid = ID_SIZE;
	pro[6].wFlags = 0;
	pro[6].val.lVal = record.m_size;

	if(CeWriteRecordProps(m_hdb,record.m_oidRecord,7,pro) == 0)
		return FALSE;
	return TRUE;
}

BOOL CSendMailDB::DeleteRecord(CSMailImf &record)
{
	return CeDeleteRecord(m_hdb,record.m_oidRecord);
}

BOOL CSendMailDB::OpenDataBase(CEPROPID proid,LPWSTR dbname)
{
	CEOID id = 0;

	CloseHandle (m_hdb);
	m_hdb = CeOpenDatabaseEx(&m_ceguid,&id,dbname,proid,0,NULL);

	if(m_hdb == INVALID_HANDLE_VALUE )
	{
		DWORD dw = GetLastError();
		return FALSE;
	}

	return TRUE;
}

BOOL CSendMailDB::GetNumRecord(LPWSTR dbname)
{
	HANDLE hDBList;
	CEOID oidDB;
	CEOIDINFO dbinfo;
	hDBList = CeFindFirstDatabaseEx (&m_ceguid,SENDMAIL_BOX_DBTYPE	);
	if (hDBList != INVALID_HANDLE_VALUE) 
	{
		oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
		while (oidDB) 
		{			
			CeOidGetInfoEx(&m_ceguid,oidDB,&dbinfo);
			if(dbinfo.wObjType == OBJTYPE_DATABASE)
			{
				if(lstrcmp(dbinfo.infDatabase.szDbaseName,dbname) == 0)
					return dbinfo.infDatabase.wNumRecords;
			}
			oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
		}
		CloseHandle (hDBList);
	}
	return -1;
}

BOOL CSendMailDB::SeekToPos(int index, CSMailImf &mail, CEPROPVAL *proval, int num)
{
	if(proval == NULL || num <= 0||proval->propid == 0)
	{
		 mail.m_oidRecord = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_BEGINNING,index,0,NULL); 
		 if(mail.m_oidRecord == 0)
			return FALSE;
		 return TRUE;
	}
	
	int x = 1;
	mail.m_oidRecord = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)(proval),1,NULL);
	if(mail.m_oidRecord == 0)
	{
		return FALSE;
	}
	if(index == 0)
		return TRUE;
	mail.m_oidRecord = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_CURRENT,index,0,NULL);
	if(mail.m_oidRecord == 0)
		return FALSE;
	return TRUE;
}

int CSendMailDB::GetNumDisplay(LPWSTR dbname,CEPROPVAL *proval, int num)
{
	if(proval == NULL||num <= 0||proval->propid == 0)
		return GetNumRecord(dbname);
	CeSeekDatabaseEx(m_hdb,CEDB_SEEK_BEGINNING,0,0,NULL);
	int res = 0;
	if(CeSeekDatabaseEx(m_hdb,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)(proval),1,NULL) != 0)
		res = 1;
	else 
	{
		return 0;
	}
	while(CeSeekDatabaseEx(m_hdb,CEDB_SEEK_VALUENEXTEQUAL,(DWORD)(proval),1,NULL) != 0)
		res++;
	return res;
}

BOOL CSendMailDB::DeleteSMailDB(LPWSTR username)
{
	HANDLE hDBList;
	CEOID oidDB;
	CEOIDINFO dbinfo;
	hDBList = CeFindFirstDatabaseEx (&m_ceguid,SENDMAIL_BOX_DBTYPE	);
	if (hDBList != INVALID_HANDLE_VALUE) 
	{
		oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
		while (oidDB) 
		{			
			CeOidGetInfoEx(&m_ceguid,oidDB,&dbinfo);
			if(dbinfo.wObjType == OBJTYPE_DATABASE)
			{
				if(lstrcmp(dbinfo.infDatabase.szDbaseName,username) == 0)
				{
					return CeDeleteDatabaseEx(&m_ceguid,oidDB);
				}
			}
			oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
		}
		CloseHandle (hDBList);
	}
	return FALSE;
}

BOOL CSendMailDB::ClearRecord(LPWSTR username)
{
	CEOID id;
	while(id = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_BEGINNING,0,NULL,NULL))
	{
		CeDeleteRecord(m_hdb,id);
	}
	return TRUE;
}

BOOL CSendMailDB::DeleteRecord(CSMailImf *precord)
{
	return CeDeleteRecord(m_hdb,precord->m_oidRecord);
}

⌨️ 快捷键说明

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