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

📄 smslistview.cpp

📁 一个比较完整的有关移动开发的例子 vc++6.0下编译通过
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CSMSListView from CAknView
*  Part of  : SMSDraft
*  Copyright (c) 2003 Nokia. All rights reserved.
* ============================================================================
*/

// INCLUDE FILES
#include <aknviewappui.h>
#include <avkon.hrh>
#include <akntitle.h>
#include <aknmessagequerydialog.h>
#include <akncontext.h>
#include <msvids.h>
#include <stringloader.h>
#include <eikmenup.h>

#include <FairyLand.rsg>
#include <FairyLand.mbg>
#include "FairyLand.hrh"
#include "FairyLandAppUi.h"
#include "SMSListView.h"
#include "SMSListContainer.h" 


// ================= MEMBER FUNCTIONS =======================

//CSMSListView* CSMSListView::NewL(MSMSNewObserver* apSMSNewOberver)
CSMSListView* CSMSListView::NewL(MSMSObserver* aObserver)
{
	//CSMSListView* self = NewLC(apSMSNewOberver);
	CSMSListView* self = NewLC(aObserver);
	CleanupStack::Pop(self);
	return self;
}

//CSMSListView* CSMSListView::NewLC(MSMSNewObserver* apSMSNewOberver)
CSMSListView* CSMSListView::NewLC(MSMSObserver* aObserver)
{
	//CSMSListView* self = new (ELeave) CSMSListView(apSMSNewOberver);
	CSMSListView* self = new (ELeave) CSMSListView(aObserver);
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
}

// C++ default constructor can NOT contain any code, that
// might leave.
//
//CSMSListView::CSMSListView(MSMSNewObserver* apSMSNewOberver)
CSMSListView::CSMSListView(MSMSObserver* aObserver)
{
	m_Observer=aObserver;
	m_pMtmsEngine = NULL;
	m_nBoxNum = 0;
	m_nListMenuFlag=1;
	/*m_pSMSNewOberver = apSMSNewOberver*/;
}

// EPOC default constructor can leave.
void CSMSListView::ConstructL()
{
	m_pMtmsEngine = CMtmsEngine::NewL(*this);
	m_Observer->SendEngine(m_pMtmsEngine);
    BaseConstructL(R_SMSLIST_VIEW);
}

// Destructor
CSMSListView::~CSMSListView()
{
	if (NULL != m_pMtmsEngine)
	{
		delete m_pMtmsEngine;
		m_pMtmsEngine = NULL;
	}
}

// ---------------------------------------------------------
// TUid CSMSListView::Id()
// Returns Id of the view.
// ---------------------------------------------------------
TUid CSMSListView::Id() const
{
    return KViewId13;
}

// ---------------------------------------------------------
// CSMSListView::HandleCommandL(TInt aCommand)
// Handles commands
// ---------------------------------------------------------
void CSMSListView::HandleCommandL(TInt aCommand)
{   
	switch(aCommand)
	{
	case EFairyLandCmdOpen:
		{
			if (m_nListMenuFlag==0)
			{
				m_Observer->SendSelectedIndex(iContainer->GetCurrentIndex());
				AppUi()->ActivateLocalViewL(TUid::Uid(14),TUid::Uid(13),_L8("inbox"));//收件箱打开为只读
			}
			else
			{
				m_Observer->SendSelectedIndex(iContainer->GetCurrentIndex());
				AppUi()->ActivateLocalViewL(TUid::Uid(14));
			}
		}
		break;
	case EFairyLandCmdWrite:
		{
			m_Observer->SendSelectedIndex(-1);//-1表示新建信息
			AppUi()->ActivateLocalViewL(TUid::Uid(14));
		}
		break;
	case EFairyLandReply:
		{
			m_Observer->SendSelectedIndex(iContainer->GetCurrentIndex());
			AppUi()->ActivateLocalViewL(TUid::Uid(14),TUid::Uid(13),_L8("reply"));	//。表示回复		
		}
		break;
	case EFairyLandDel:
		{
			TBuf<32> sTmpTitle;//define a descriptor for read resource of title
			CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_IM_DELETE_QUERY);
			if (iContainer->MessageBoxByYesNO(sTmpTitle))
			{
				m_pMtmsEngine->DeleteMessageL(iContainer->GetCurrentIndex());
				iContainer->SetEmptyListBox();
				ShowDraftBoxL();
			}
		}
		break;
	case EFairyLandDetail:
		{
			ShowDetailDialog();
		}
		break;
	case EFairyLandMoveToInBox:
		{
			m_pMtmsEngine->MoveToFolderL(iContainer->GetCurrentIndex(),KMsvGlobalInBoxIndexEntryId);
			iContainer->SetEmptyListBox();
			ShowDraftBoxL();
		}
		break;
	case EFairyLandMoveToDraftBox:
		{
			m_pMtmsEngine->MoveToFolderL(iContainer->GetCurrentIndex(),KMsvDraftEntryId);
			iContainer->SetEmptyListBox();
			ShowDraftBoxL();
		}
		break;
	case EFairyLandMoveToSentBox:
		{
			m_pMtmsEngine->MoveToFolderL(iContainer->GetCurrentIndex(),KMsvGlobalOutBoxIndexEntryId);
			iContainer->SetEmptyListBox();
			ShowDraftBoxL();
		}
		break;
	case EFairyLandCmdHelp:
		{
			//switch to "HelpView", at one time, transfer this view's TUID for return back thie view
			// 		//AppUi()->ActivateLocalViewL(TUid::Uid(7), this->Id(), _L8("help"));
		}
		break;
	case EFairyLandBack:
		{
			AppUi()->ActivateLocalViewL(TUid::Uid(12));		
		}
		break;
	default:
		{
			AppUi()->HandleCommandL(aCommand);
			break;
		}
	}
}

// ---------------------------------------------------------
// CSMSListView::HandleClientRectChange()
// Handles client rect change.
// ---------------------------------------------------------
void CSMSListView::HandleClientRectChange()
{
    if (iContainer)
	{
        iContainer->SetRect(ClientRect());
	}
}

// ---------------------------------------------------------
// CSMSListView::DoActivateL(...)
// Creates the Container class object.
// ---------------------------------------------------------
void CSMSListView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,
							   TUid aCustomMessageId,
							   const TDesC8& aCustomMessage)
{
	//	TBufC8* buf=&aCustomMessage;
	iContainer = new (ELeave) CSMSListContainer;
	iContainer->SetMopParent(this);
	
	TRect rc;
	rc.SetRect(ClientRect().iTl, TSize(176, 144));
	
	iContainer->ConstructL(rc);
	AppUi()->AddToStackL(*this, iContainer);
	
	//set the icon and title of the status pane 
	
	//set path of *.mbm
	TBuf<KMaxPath> pathMbm;
#ifdef __WINS__
	pathMbm.Copy(_L("z:\\system\\apps\\fairyland\\fairyland.mbm"));
#else
	CFairyLandAppUi* pApp = (CFairyLandAppUi*)CEikonEnv::Static()->AppUi();
	pApp->GetAppPath(pathMbm);
	pathMbm.Append(_L("fairyland.mbm"));
#endif
	
	//get the pointer of status pane 
	CEikStatusPane* statusPane = StatusPane();
	
	//set icon
	//load icon from *.mbm
	//	CAknContextPane* contextPane = (CAknContextPane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidContext));
	//	CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL(pathMbm, EMbmMyhelloIcon_4);
	//	CFbsBitmap* bitmapMask = iEikonEnv->CreateBitmapL(pathMbm, EMbmMyhelloMask_4);
	
	//contextPane->SetPicture(bitmap);
	//	contextPane->SetPicture(bitmap, bitmapMask);
	
	//set title
	
	//load chinese words
	TBuf<32> sTmpTitle;		//define a descriptor for read resource of title
	TBuf8<2> Temp;
	Temp.Copy(_L("1"));//收件箱
	if (aCustomMessage.Compare(Temp)==0)
	{
		m_nBoxNum=1;
		m_nListMenuFlag=0;
		CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_IN_BOX);
	}
	else
	{
		Temp.Copy(_L("2"));//草稿箱
		if (aCustomMessage.Compare(Temp)==0)
		{
			m_nBoxNum=2;
			m_nListMenuFlag=1;
			CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_DRAFT_BOX);
		}
		else
		{
			Temp.Copy(_L("3"));//发件箱
			if (aCustomMessage.Compare(Temp)==0)
			{
				m_nBoxNum=3;
				m_nListMenuFlag=3;
				CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_SENT_BOX);
			}
		}
	}
	
	//	CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_DRAFT_BOX);
	//get the pointer of titlepane
	CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
	//set chinese title
	titlePane->SetTextL(sTmpTitle);
	
	ShowDraftBoxL();
}

// ---------------------------------------------------------
// CSMSListView::DoDeactivate()
// Deletes the Container class object.
// ---------------------------------------------------------
void CSMSListView::DoDeactivate()
{
    if (NULL != iContainer)
	{
		AppUi()->RemoveFromStack(iContainer);
		delete iContainer;
		iContainer = NULL;
	}
}


void CSMSListView::HandleMessageSentL(TInt aError)
{
}

void CSMSListView::ShowDraftBoxL()
{
	CDesCArrayFlat* arrayRead = new (ELeave) CDesCArrayFlat(10);
	CDesCArrayFlat* arrayAddr = new (ELeave) CDesCArrayFlat(10);
	CDesCArrayFlat* arrayMsgBody = new (ELeave) CDesCArrayFlat(10);
	if (m_nBoxNum==1)
	{
		m_pMtmsEngine->GetFolderSMSMessageInformation(KMsvGlobalInBoxIndexEntryId,arrayRead,arrayAddr,arrayMsgBody);
	}
	else if (m_nBoxNum==2)
	{
		m_pMtmsEngine->GetFolderSMSMessageInformation(KMsvDraftEntryId,arrayRead,arrayAddr,arrayMsgBody);
	}
	else if (m_nBoxNum==3)
	{
		m_pMtmsEngine->GetFolderSMSMessageInformation(KMsvSentEntryId,arrayRead,arrayAddr,arrayMsgBody);
	}
	TInt nLen = 0;
	TInt nNumber = 0;
	TBuf<2> szNumber;
	nLen = arrayRead->Count();	
	
	if (nLen > 0)
	{
		TInt i = 0;
		for (i = 0; i < nLen; i++)
		{
			szNumber.Copy(arrayRead->MdcaPoint(i));
			szNumber.Num(nNumber);
			iContainer->AddSingleItemL(nNumber,arrayAddr->MdcaPoint(i),arrayMsgBody->MdcaPoint(i));//Indexes into a descriptor array.i is The position of the descriptor element within the array
		}
	}
	else
	{
		m_nListMenuFlag=2;
	}
	arrayMsgBody->Reset();
	delete arrayMsgBody;
	arrayAddr->Reset();
	delete arrayAddr;
	arrayRead->Reset();
	delete arrayRead;
}



void CSMSListView::ShowDetailDialog()
{
	_LIT(KRetuen,"\n");
	TInt nIndex = 0;
	nIndex = iContainer->GetCurrentIndex();
	TBuf<1024> szDetail;
	
	CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog();
	dlg->PrepareLC(R_MESSAGE_QUERY);
	
	HBufC* pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_HEADING);
	dlg->QueryHeading()->SetTextL(pTemp->Des());
	CleanupStack::PopAndDestroy(pTemp);
	
	pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_SENDER);
	szDetail.Append(pTemp->Des());
	CleanupStack::PopAndDestroy(pTemp);
	TBuf<16> szSender;
	m_pMtmsEngine->GetAddress(nIndex, szSender);
	szDetail.Append(szSender);
	szDetail.Append(KRetuen);
	
	pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_THEME);
	szDetail.Append(pTemp->Des());
	CleanupStack::PopAndDestroy(pTemp);
	TBuf<72> szContent;
	m_pMtmsEngine->GetContent(nIndex, szContent);
	szDetail.Append(szContent);
	szDetail.Append(KRetuen);
	
	pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_DATE);
	szDetail.Append(pTemp->Des());
	CleanupStack::PopAndDestroy(pTemp);
	TBuf<16> szDate;
	m_pMtmsEngine->GetDate(nIndex,szDate);
	szDetail.Append(szDate);
	
	pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_TIME);
	szDetail.Append(pTemp->Des());
	CleanupStack::PopAndDestroy(pTemp);
	TBuf<16> szTime;
	m_pMtmsEngine->GetTime(nIndex,szTime);
	szDetail.Append(szTime);
	
	pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_TYPE);
	szDetail.Append(pTemp->Des());
	CleanupStack::PopAndDestroy(pTemp);
	TBuf<16> szType;
	m_pMtmsEngine->GetType(nIndex,szType);
	szDetail.Append(szType);
	
	dlg->SetMessageTextL(szDetail);
	
	dlg->RunLD();  
}


//菜单动态效果
void CSMSListView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
{
	if(aResourceId == R_MH_SMSLIST_MENU)
	{
		//标志位:相当于显示或不显示菜单栏的开关
		switch(m_nListMenuFlag)
		{
		case 1://草稿箱
			{
				aMenuPane->SetItemDimmed(EFairyLandCmdWrite, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandCmdOpen, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandDel, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandDetail, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandMoveSMS, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
				break;
			}
		case 0://收件箱
			{
				aMenuPane->SetItemDimmed(EFairyLandCmdWrite, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandReply, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandCmdOpen, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandDel, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandDetail, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandMoveSMS, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
				break;
			}
		case 2://无信息时
			{
				aMenuPane->SetItemDimmed(EFairyLandCmdWrite, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandCmdOpen, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandDel, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandDetail, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandMoveSMS, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
				break;
			}
			
		case 3://发件箱
			{
				aMenuPane->SetItemDimmed(EFairyLandCmdWrite, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandCmdOpen, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandDel, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandDetail, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandMoveSMS, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
				break;
			}
		default:
			{
				break;
			}
		}
	}
	else if (aResourceId == R_MH_SMSLIST_SUB_MENU)
	{
		switch(m_nListMenuFlag)
		{
		case 0://收件箱
			{
				aMenuPane->SetItemDimmed(EFairyLandMoveToDraftBox, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandMoveToSentBox, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandMoveToInBox, ETrue);
				break;
			}
		case 1://草稿箱
			{
				aMenuPane->SetItemDimmed(EFairyLandMoveToDraftBox, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandMoveToSentBox, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandMoveToInBox, EFalse);
				break;
			}
		case 3://发件箱
			{
				aMenuPane->SetItemDimmed(EFairyLandMoveToDraftBox, EFalse);
				aMenuPane->SetItemDimmed(EFairyLandMoveToSentBox, ETrue);
				aMenuPane->SetItemDimmed(EFairyLandMoveToInBox, EFalse);
				break;
			}
		default:
			{
				break;
			}
		}
	}
	else 
		return;
	
}
// End of File

⌨️ 快捷键说明

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