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

📄 contactsmanager.cpp

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

#include "stdafx.h"
#include "ContactsManager.h"

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

CContactsManager g_contactmanager;

CContactsManager::CContactsManager()
{
	m_hdb = NULL;
}

CContactsManager::~CContactsManager()
{

}



BOOL CContactsManager::MountVolumeAndCreate(LPWSTR lpszVol)
{
	if(lpszVol == NULL)
	{
		CREATE_SYSTEMGUID (&m_ceguid);
	}
	else
	{
		if(CeMountDBVol (&m_ceguid,lpszVol,OPEN_ALWAYS) == FALSE)
			return FALSE;
	}
	
	if(DataBaseExist())	
		return TRUE;
	CEDBASEINFO dbinfo;
	dbinfo.dwFlags = CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC;
	lstrcpy(dbinfo.szDbaseName,CONTACT_DATABASE_NAME);
	dbinfo.dwDbaseType = CONTACT_DATABASE_TYPE;
	dbinfo.wNumSortOrder = CONTACT_NUM_SORT;
	dbinfo.rgSortSpecs[0].propid = ID_MAILADDRESS;
	dbinfo.rgSortSpecs[0].dwFlags = 0;
	dbinfo.rgSortSpecs[1].propid = ID_NAME;
	dbinfo.rgSortSpecs[1].dwFlags = 0;
	dbinfo.rgSortSpecs[2].propid = ID_GROUP;
	dbinfo.rgSortSpecs[2].dwFlags = 0;

	if(CeCreateDatabaseEx(&m_ceguid,&dbinfo) == NULL)
	{
		DWORD error = GetLastError();
		if(error == ERROR_DUP_NAME)
			return TRUE;
		return FALSE;
	}
	return TRUE;
}

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

BOOL CContactsManager::DataBaseExist()
{
	HANDLE hDBList;
	CEOID oidDB;
	CEOIDINFO dbinfo;
	hDBList = CeFindFirstDatabaseEx(&m_ceguid,CONTACT_DATABASE_TYPE);
	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,CONTACT_DATABASE_NAME) == 0)
					return TRUE;
			}
			oidDB = CeFindNextDatabaseEx(hDBList,&m_ceguid);
		}
		CloseHandle (hDBList);
	}
	return FALSE;
}

BOOL CContactsManager::EditContact(CContacts &contacts)
{
	CEPROPVAL pro[4];

	pro[0].propid = ID_MAILADDRESS;
	pro[0].wFlags = 0;
	pro[0].val.lpwstr = contacts.m_mailaddress;

	pro[1].propid = ID_NAME;
	pro[1].wFlags = 0;
	pro[1].val.lpwstr = contacts.m_name;

	pro[2].propid = ID_GROUP;
	pro[2].wFlags = 0;
	pro[2].val.lVal = contacts.m_group;

	pro[3].propid = ID_DES;
	pro[3].wFlags = 0;
	pro[3].val.lpwstr = contacts.m_des;

	if(CeWriteRecordProps(m_hdb,contacts.m_oidRecord,4,pro) == 0)
		return FALSE;

	return TRUE;
}

BOOL CContactsManager::OpenDataBase(CEPROPID proid)
{
	CEOID id = 0;

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

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

	return TRUE;
}

BOOL CContactsManager::ReadContactRecord(CContacts &contact)
{
	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 (&contact, 0 , sizeof (CContacts));  // Zero return struct
	contact.m_oidRecord = oid;
    pRecord = (PCEPROPVAL)pBuff;              // Point to CEPROPVAL
                                              // array.
    for (i = 0; i < wProps; i++) 
	{
        switch (pRecord->propid) 
		{
			case ID_MAILADDRESS:
				lstrcpy (contact.m_mailaddress, pRecord->val.lpwstr);
				break;
			case ID_NAME:
				lstrcpy (contact.m_name, pRecord->val.lpwstr);
				break;
			case ID_GROUP:
				contact.m_group = pRecord->val.lVal;
				break;
			case ID_DES:
				lstrcpy (contact.m_des, pRecord->val.lpwstr);
				break;
        }
        pRecord++;
    }
    LocalFree (pBuff);
    return TRUE;
}



int CContactsManager::GetNumRecord()
{
	HANDLE hDBList;
	CEOID oidDB;
	CEOIDINFO dbinfo;
	hDBList = CeFindFirstDatabaseEx (&m_ceguid,CONTACT_DATABASE_TYPE);
	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,CONTACT_DATABASE_NAME) == 0)
					return dbinfo.infDatabase.wNumRecords;
			}
			oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
		}
		CloseHandle (hDBList);
	}
	return -1;
}

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

int CContactsManager::GetNumDisplay(CEPROPVAL* proval,int num)
{
	if(proval == NULL||num <= 0||proval->propid == 0)
		return GetNumRecord();
	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 CContactsManager::DeleteRecord(CContacts &contact)
{
	return CeDeleteRecord(m_hdb,contact.m_oidRecord);
}

⌨️ 快捷键说明

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