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

📄 phonelistcoct.cpp

📁 Windows Mobile SP/PPC手机上操作联系人
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Contact.cpp: implementation of the CPhoneCoct class.
//
//////////////////////////////////////////////////////////////////////

#include "PhoneListCoct.h"

#include <mapix.h>
#include <mapiutil.h>
#include <mapidefs.h>
#include <mapicode.h>
#include <mapitags.h>
#include <cemapi.h>
#include <simmgr.h>
#include <pimstore.h>


#pragma warning(disable: 4006)

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
COutLookBase::COutLookBase()
{
	m_pDispatch = NULL;
}

COutLookBase::~COutLookBase()
{
}



//-------------------------------------------------------------------------------------
// FUNCTION	: 
// PURPOSE	: 
// PARAM	: 
// RETURN	: 
//-------------------------------------------------------------------------------------
int COutLookBase::GetRecordNum()
{
	int iCount;
	
	m_pItems->get_Count(&iCount);

	return iCount;
}


BOOL COutLookBase::OpenItem(int iNo)
{
	if(m_pItems == NULL)
		return FALSE;
	if(m_pDispatch)
	{
		m_pDispatch->Release();
		m_pDispatch = NULL;
	}

	// Get data from contact
	m_pItems->Item(iNo, &m_pDispatch);
	//HRESULT ret = m_pItems->Remove(iNo);
	if(!m_pDispatch)
		return FALSE;

	return TRUE;
}

BOOL COutLookBase::RemoveItem(int iNo)
{
	if(m_pItems == NULL)
		return FALSE;
	if(m_pDispatch)
	{
		m_pDispatch->Release();
		m_pDispatch = NULL;
	}

	// Get data from contact
	//m_pItems->Item(iNo, &m_pDispatch);
	HRESULT ret = m_pItems->Remove(iNo);
//	if(!m_pDispatch)
//		return FALSE;
	return TRUE;
}

BOOL COutLookBase::AddItem(int iNo)
{
	if(m_pItems == NULL)
		return FALSE;
	if(m_pDispatch)
	{
		m_pDispatch->Release();
		m_pDispatch = NULL;
	}

	// Get data from contact
	//m_pItems->Item(iNo, &m_pDispatch);
	HRESULT ret = m_pItems->Remove(iNo);
	IPOutlookApp *pOutLookApp = NULL;
	ret = m_pItems->get_Application(&pOutLookApp);
	//IPOutlookItem;
	IDispatch*    pDispatch;
	//IPOutlookApp_CreateItem(pOutLookApp , 1 , &pDispatch);
	pOutLookApp->CreateItem(1 , &pDispatch);
//	pDispatch->lpVtbl->
	//(This)->lpVtbl -> CreateItem(This,olItem,ppPOutlookItem)
	//pOutLookApp->CreateItem()
//	if(!m_pDispatch)
//		return FALSE;
	return TRUE;
}



BOOL COutLookBase::OpenItemByOid(CEOID oid)
{
	if(m_pApp == NULL)
		return FALSE;
	if(m_pDispatch)
	{
		m_pDispatch->Release();
		m_pDispatch = NULL;
	}
	// Get data from contact
	m_pApp->GetItemFromOid(oid , &m_pDispatch);
	if(!m_pDispatch)
		return FALSE;
	return TRUE;
}

BOOL COutLookBase::CloseItem()
{
	if(m_pDispatch)
	{
		m_pDispatch->Release();
		m_pDispatch = NULL;
	}

	return TRUE;
}

//-------------------------------------------------------------------------------------
// FUNCTION	: 
// PURPOSE	: 
// PARAM	: 
// RETURN	: 
//-------------------------------------------------------------------------------------
BOOL COutLookBase::Initialize(int olFolder)
{
	if(m_bInitialize) 
		return FALSE;
	
		// Initialize COM object 
	if(FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED)))
		return FALSE;

	// Get instance
	if(FAILED(CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER,
							   IID_IPOutlookApp, (LPVOID *)&m_pApp)))
		return FALSE;

	// Logon contact AP
	if(FAILED(m_pApp->Logon(NULL))) return FALSE;

	m_pApp->GetDefaultFolder(olFolder, &m_pFolder);
	m_pFolder->get_Items(&m_pItems);	

	m_bInitialize = TRUE;

	return TRUE;
}


//-------------------------------------------------------------------------------------
// FUNCTION	: 
// PURPOSE	: 
// PARAM	: 
// RETURN	: 
//-------------------------------------------------------------------------------------
void COutLookBase::Uninitialize()
{
	if(m_pDispatch)
	{		
		m_pDispatch->Release();
		m_pDispatch = NULL;
	}

	m_pItems->Release();
	m_pFolder->Release();

	m_pApp->Logoff();
	m_pApp->Release();

	CoUninitialize();

	m_bInitialize = FALSE;
}


BOOL COutLookBase::LogonContactAP(int olFolder)
{
	
	// Initialize COM object 
	if(FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED)))
		return FALSE;

	// Get instance
	if(FAILED(CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER,
							   IID_IPOutlookApp, (LPVOID *)&m_pApp)))
		return FALSE;
	// Logon contact AP
	if(FAILED(m_pApp->Logon(NULL))) return FALSE;

	m_pApp->GetDefaultFolder(olFolder, &m_pFolder);

	m_pFolder->get_Items(&m_pItems);	
	return TRUE;
}

void COutLookBase::OutLogonContactAP()
{
	if(m_pDispatch){		
		m_pDispatch->Release();
		m_pDispatch = NULL;
	}

	m_pItems->Release();
	m_pFolder->Release();	

	m_pApp->Logoff();
	m_pApp->Release();

	CoUninitialize();
	
}

BOOL IsChString(TCHAR* szPhrase, int iCount)
{	
	for(int i=0; i<iCount; i++)
	{
		if(szPhrase[i]<0x4e00 || szPhrase[i]>0x9fa5)
		{
			return FALSE;
		}
	}

	return TRUE;
}
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPhoneCoct::CPhoneCoct()
{
	m_pDispatch = NULL;
	
	m_bInitialize = FALSE;
}

CPhoneCoct::~CPhoneCoct()
{

}

LONG CPhoneCoct::GetItemOid(int iItemNo)
{
	LONG	m_OID = 0;
	m_pItems->Item(iItemNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
	if(m_pDispatch/*m_pContact*/)
	{
		((IContact*)m_pDispatch)->get_Oid(&m_OID);
		m_pDispatch/*m_pContact*/->Release();
		m_pDispatch/*m_pContact*/=NULL;		
	}
	return m_OID;
}

//-------------------------------------------------------------------------------------
// FUNCTION	: 
// PURPOSE	: 
// PARAM	: 
// RETURN	: 
//-------------------------------------------------------------------------------------
HRESULT CPhoneCoct::GetNameField(TCHAR format, TCHAR* lpData)
{
	HRESULT hResult = 0;
	HLOCAL	hMem=LocalAlloc(LPTR, MAX_PATH*sizeof(TCHAR));			
	BSTR	lpMem=(BSTR)hMem;

	switch(format)
	{
	case FIRST_NAME:
		 hResult = ((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&lpMem);
		 break;

	case MIDDLE_NAME:
		 hResult = ((IContact*)m_pDispatch)/*m_pContact*/->get_MiddleName(&lpMem);
		 break;

	case LAST_NAME:
		 hResult = ((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&lpMem);
		 break;
	}

	_tcscpy(lpData, lpMem);
	LocalFree(hMem);

	return hResult;
}




BOOL CPhoneCoct::GetNomalFormatName(int iNo, TCHAR* lpName)
{	
	m_pItems->Item(iNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
	
	if(m_pDispatch/*m_pContact*/)
	{
		BSTR bstrFirstName,bstrLastName;	

		((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&bstrFirstName);
		((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&bstrLastName);
		BOOL bHasLastName = FALSE;
		BOOL bHasFirstName = FALSE;
		BOOL bChineseWord = FALSE;
		//if(SysStringByteLen(bstrLastName) > 0)
		if(SysStringLen(bstrFirstName) > 0 && SysStringLen(bstrLastName) > 0)
		{
			//_tcscpy(lpName, bstrLastName);
			//_tcscat(lpName, bstrFirstName);
			_tcscpy(lpName, bstrFirstName);
			_tcscat(lpName, L" ");
			_tcscat(lpName, bstrLastName);
		}
		else if(SysStringLen(bstrFirstName) > 0 )
		{
			_tcscpy(lpName, bstrFirstName);
		}
		else if(SysStringLen(bstrLastName) > 0)
		{
			_tcscpy(lpName, bstrLastName);
		}

		SysFreeString(bstrLastName);
		SysFreeString(bstrFirstName);
		
		// Free contact
		m_pDispatch/*m_pContact*/->Release();
		m_pDispatch/*m_pContact*/=NULL;		
	}
	
	if(_tcslen(lpName) == 0)
		return FALSE;

	return TRUE;
}


//-------------------------------------------------------------------------------------
// FUNCTION	: GetName
// PURPOSE	: Get Name data
// PARAM	: 
// RETURN	: 
// NOTICE	: Min index is 1.
//-------------------------------------------------------------------------------------
BOOL CPhoneCoct::GetFormatName(int iNo, TCHAR* lpName)
{	
	
	// Get data from contact
	//TCHAR lpName[32];

	m_pItems->Item(iNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
	
	if(m_pDispatch/*m_pContact*/)
	{
		BSTR bstrFirstName,bstrLastName;	

		((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&bstrFirstName);
		((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&bstrLastName);



		//if(SysStringByteLen(bstrLastName) > 0)
		if(SysStringLen(bstrLastName) > 0)
		{		 
			//if(IsChString((TCHAR*)bstrLastName,SysStringByteLen(bstrLastName) / 2))
			if(IsChString((TCHAR*)bstrLastName,SysStringLen(bstrLastName)))
			{
	
				_tcscpy(lpName, bstrLastName); 
			}else
			{


				TCHAR szTemp[MAX_PATH];
				TCHAR szResult[MAX_PATH];
				_tcscpy(szTemp, bstrLastName);

				int i,nCount,iPos = 0;
				//nCount = SysStringByteLen(bstrLastName) / 2;
				nCount = SysStringLen(bstrLastName);
				//ZeroMemory(szResult,2*nCount+2);
				ZeroMemory(szResult , MAX_PATH*sizeof(TCHAR));
				
				//ZeroMemory(szTemp,nCount);

				for (i = 0 ;i < nCount;i++)
				{
					
					//if(szTemp[i] >= 0x4e00 || szTemp[i] <= 0x9fa5 )
					if(szTemp[i] >= 0x4e00 && szTemp[i] <= 0x9fa5 )
					{
						szResult[iPos++] = szTemp[i];
						//szTemp[iPos++] = szTemp[i];
					}						
				}
				if(iPos > 0)
				{//说明有中文字
						if(_tcslen(lpName) == 0)
							//_tcscpy(lpName, szTemp); 
							_tcscpy(lpName, szResult);
							
						else
							//_tcscat(lpName, szTemp); 
							_tcscat(lpName, szResult);
				}
			}
		}

		//if(SysStringByteLen(bstrFirstName) > 0)
		if(SysStringLen(bstrFirstName) > 0)
		{
			//if(IsChString((TCHAR*)bstrFirstName,SysStringByteLen(bstrFirstName) / 2))
			if(IsChString((TCHAR*)bstrFirstName,SysStringLen(bstrFirstName)))
			{
				if(_tcslen(lpName) == 0)
					_tcscpy(lpName, bstrFirstName); 
				else
					_tcscat(lpName, bstrFirstName); 
			}
			else
			{
				//里面有非中文的字
				//我把非中文的字filfult掉
				TCHAR szTemp[MAX_PATH];
				TCHAR szResult[MAX_PATH];
				_tcscpy(szTemp, bstrFirstName); 
				int i,nCount,iPos = 0;
				//nCount = SysStringByteLen(bstrFirstName) / 2;
				nCount = SysStringLen(bstrFirstName);
				//ZeroMemory(szTemp,nCount);
				//ZeroMemory(szResult,2*nCount+2);
				ZeroMemory(szResult , MAX_PATH*sizeof(TCHAR));

				for (i = 0 ;i < nCount;i++)
				{
					//if(szTemp[i] >= 0x4e00 || szTemp[i] <= 0x9fa5 )
					if(szTemp[i] >= 0x4e00 && szTemp[i] <= 0x9fa5 )
					{
						szResult[iPos++] = szTemp[i];
						//szTemp[iPos++] = szTemp[i];
					}						
				}
				if(iPos > 0)
				{//说明有中文字
						if(_tcslen(lpName) == 0)
							//_tcscpy(lpName, szTemp); 
							_tcscpy(lpName, szResult);
						else
							//_tcscat(lpName, szTemp); 
							_tcscat(lpName, szResult);
				}
				
			}
		}
		
		

		SysFreeString(bstrLastName);
		SysFreeString(bstrFirstName);
		
		// Free contact
		m_pDispatch/*m_pContact*/->Release();
		m_pDispatch/*m_pContact*/=NULL;		
	}
	
	if(_tcslen(lpName) == 0)
		return FALSE;

	return TRUE;
}

BOOL CPhoneCoct::GetFormatName(CEOID m_Oid, TCHAR* lpName)
{
	// Get data from contact
	//m_pItems->Item(iNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
	m_pApp->GetItemFromOid(m_Oid , &m_pDispatch);

	if(m_pDispatch/*m_pContact*/)
	{
		BSTR bstrFirstName,bstrLastName;	

		((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&bstrFirstName);
		((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&bstrLastName);

		//外国人姓在后,名在前
		//中国人姓在前,名在后	

		//if(SysStringByteLen(bstrLastName) > 0)
		if(SysStringLen(bstrLastName) > 0)
		{		 
			//if(IsChString((TCHAR*)bstrLastName,SysStringByteLen(bstrLastName) / 2))
			if(IsChString((TCHAR*)bstrLastName,SysStringLen(bstrLastName)))
			{
				
				if(_tcslen(lpName) == 0)
					_tcscpy(lpName, bstrLastName); 
				else
					_tcscat(lpName, bstrLastName); 
			}else
			{
				//里面有非中文的字
				//我把非中文的字filfult掉

				TCHAR szTemp[MAX_PATH];
				TCHAR szResult[MAX_PATH];
				_tcscpy(szTemp, bstrLastName);

				int i,nCount,iPos = 0;
				//nCount = SysStringByteLen(bstrLastName) / 2;
				nCount = SysStringLen(bstrLastName);
				//ZeroMemory(szResult,2*nCount+2);
				ZeroMemory(szResult , MAX_PATH*sizeof(TCHAR));
				
				//ZeroMemory(szTemp,nCount);

				for (i = 0 ;i < nCount;i++)
				{
					
					//if(szTemp[i] >= 0x4e00 || szTemp[i] <= 0x9fa5 )
					if(szTemp[i] >= 0x4e00 && szTemp[i] <= 0x9fa5 )
					{
						szResult[iPos++] = szTemp[i];
						//szTemp[iPos++] = szTemp[i];
					}						
				}

⌨️ 快捷键说明

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