imfriendlistcontainer.cpp
来自「国内著名嵌入式培训机构内部资料,内含一些实例代码,包括技术专题书籍」· C++ 代码 · 共 252 行
CPP
252 行
/*
============================================================================
Author : hou maoqing
Version : 1.0
Copyright : Copyright (c) Hou maoqing 2008
Mail : houmqing@163.com
============================================================================
*/
#include "ImFriendListContainer.h"
#include <akniconarray.h> // CAknIcon
#include <aknlists.h> // CAknSingleStyleListBox
#include <barsread.h> // TResource Reader
#include <e32def.h> // STATIC_CAST
#include <eikclbd.h> // CColumnListBoxData
#include <ImClientIcon.mbg>
#include <ImClientExam.rsg>
// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CImFriendListContainer::ConstructL(const TRect& aRect)
// EPOC two phased constructor
// ---------------------------------------------------------
//
void CImFriendListContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
CreateListL();
LoadListIconsL();
LoadListItemsL();
// Set the windows size
SetRect(aRect);
ActivateL();
}
// Destructor
CImFriendListContainer::~CImFriendListContainer()
{
delete iMainItemsListBox;
}
// ---------------------------------------------------------
// CImFriendListContainer::SizeChanged()
// Called by framework when the view size is changed
// ---------------------------------------------------------
//
void CImFriendListContainer::SizeChanged()
{
TRect rect=Rect();
iMainItemsListBox->SetExtent (rect.iTl, rect.Size());
}
// ---------------------------------------------------------
// CImFriendListContainer::CountComponentControls() const
// ---------------------------------------------------------
//
TInt CImFriendListContainer::CountComponentControls() const
{
return 1; // return nbr of controls inside this container
}
// ---------------------------------------------------------
// CImFriendListContainer::ComponentControl(TInt aIndex) const
// ---------------------------------------------------------
//
CCoeControl* CImFriendListContainer::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iMainItemsListBox;
default:
return NULL;
}
}
// ---------------------------------------------------------
// CImFriendListContainer::Draw(const TRect& aRect) const
// ---------------------------------------------------------
//
void CImFriendListContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
// example code...
gc.SetPenStyle( CGraphicsContext::ENullPen );
gc.SetBrushColor( KRgbGray );
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.DrawRect( aRect );
}
// ---------------------------------------------------------
// CImFriendListContainer::HandleControlEventL(
// CCoeControl* aControl,TCoeEvent aEventType)
// ---------------------------------------------------------
//
void CImFriendListContainer::HandleControlEventL(
CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
{
}
TKeyResponse CImFriendListContainer::OfferKeyEventL(
const TKeyEvent& aKeyEvent, TEventCode aType )
{
if (iMainItemsListBox)
return iMainItemsListBox->OfferKeyEventL (aKeyEvent, aType);
else
return EKeyWasNotConsumed;
}
void CImFriendListContainer::CreateListL()
{
// 创建列表实例
iMainItemsListBox = new (ELeave) CAknSingleGraphicStyleListBox;
iMainItemsListBox->SetContainerWindowL(*this);
// 从资源构造列表
TResourceReader reader;
CEikonEnv::Static()->CreateResourceReaderLC(reader, R_LISTBOX_CHAT_RECORD);
iMainItemsListBox->ConstructFromResourceL(reader);
CleanupStack::PopAndDestroy(); // reader
// 给列表创建滚动条
iMainItemsListBox->CreateScrollBarFrameL();
iMainItemsListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
}
void CImFriendListContainer::LoadListIconsL()
{
// Get the name of the file containing the icons
TFileName fnIconFileName;
fnIconFileName.Append(_L("\\resource\\apps\\ImClientIcon.mbm"));
// Create an array of icons, reading them from the file
CArrayPtr<CGulIcon>* icons = new(ELeave) CAknIconArray(2);
CleanupStack::PushL(icons);
icons->AppendL(iEikonEnv->CreateIconL(fnIconFileName, EMbmImclienticonOffline, EMbmImclienticonOffline_mask));
icons->AppendL(iEikonEnv->CreateIconL(fnIconFileName, EMbmImclienticonOnline, EMbmImclienticonOnline_mask));
CleanupStack::Pop(icons);
iMainItemsListBox->ItemDrawer()->ColumnData()->SetIconArray(icons); // passing ownership of icons
}
void CImFriendListContainer::LoadListItemsL()
{
CTextListBoxModel* model = iMainItemsListBox->Model(); // not taking ownership
model->SetOwnershipType (ELbmOwnsItemArray);
CDesCArray* mainItemsArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
//装入列表项
/*TBuf<32> bufItem;
bufItem.Append(_L("0\tFirst Item"));
mainItemsArray->AppendL (bufItem);
bufItem.Zero();
bufItem.Append(_L("1\tSecond Item"));
mainItemsArray->AppendL (bufItem);*/
}
void CImFriendListContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent)
{
// if the Select Key has been pressed
if ((aListBoxEvent == MEikListBoxObserver::EEventEnterKeyPressed) ||
(aListBoxEvent == MEikListBoxObserver::EEventItemClicked))
{
}
}
void CImFriendListContainer::AddFriendItemL(const TDesC& desAcc,int bStatus)
{
if(bStatus>1)
return;
if (iMainItemsListBox)
{
CTextListBoxModel* model = iMainItemsListBox->Model();
CDesCArray* itemArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
TInt nCurItem = iMainItemsListBox->CurrentItemIndex();
TBuf<32> bufItem;
bufItem.AppendFormat(_L("%d\t%S"),bStatus,&desAcc);
itemArray->AppendL (bufItem);
iMainItemsListBox->HandleItemAdditionL();
}
}
void CImFriendListContainer::ModifyFriendItemL(int nIndex,const TDesC& desAcc,int bStatus)
{
if(bStatus>1)
return;
if (iMainItemsListBox)
{
CTextListBoxModel* model = iMainItemsListBox->Model();
CDesCArray* itemArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
itemArray->Delete(nIndex);
TBuf<32> bufItem;
bufItem.AppendFormat(_L("%d\t%S"),bStatus,&desAcc);
itemArray->InsertL(nIndex,bufItem);
iMainItemsListBox->HandleItemAdditionL();
}
}
int CImFriendListContainer::GetSelectedFriendIndex()
{
TInt nCurItem=-1;
if (iMainItemsListBox)
{
nCurItem = iMainItemsListBox->CurrentItemIndex();
}
return nCurItem;
}
int CImFriendListContainer::DeleteSelectedL()
{
TInt nCurItem=-1;
if (iMainItemsListBox)
{
CTextListBoxModel* model = iMainItemsListBox->Model();
if (model->NumberOfItems() > 0)
{
CDesCArray* itemArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
nCurItem = iMainItemsListBox->CurrentItemIndex();
itemArray->Delete(nCurItem);
AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
iMainItemsListBox,nCurItem,ETrue);
}
}
return nCurItem;
}
// End of File
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?