Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Пример работы с ChoiceList API - S60 Touch UI

From Wiki
Jump to: navigation, search
Article Metadata

Пример кода
Исходный файл: Media:ChoiceList.zip

Совместимость
Платформа(ы):
S60 5th Edition

Статья
Автор: A.A.M. (28 Jan 2009)
Последнее редактирование: hamishwillee (23 Nov 2011)


Статья базируется на материалах англоязычной части Wiki, все они перечислены в разделе ссылки.

Contents

Обзор

ChoiceList API - это новый UI компонент для выбора элементов из вертикального списка. В данной статье мы рассмотрим пример работы с этим API.

ChoiceList API

  • ChoiceList API это новый компонен пользовательского интерфейса, доступен начиная с S60 5-го издания
  • При создании ChoiceList'a можно указать его тип: "с выделенным по-умолчанию значением" или "без возможности выделения"
  • В качестве элементов ChoiceList'a могут использоваться кнопки
  • Присутствует возможность заполнения ChoiceList'a элементами массива
  • ChoiceList API предоставляет различные функции для манипулирования элементами, расположенными в ChoiceList'е

ChoiceList.png

Реализация компонента ChoiceList

ChoiceListAppView.h

  • Унаследуем класс от MCoeControlObserver и реализуем его виртуальную функцию HandleControlEventL() для получения и обработки событий от ChoiceList'a.
  • Объявляем объект CAknChoiceList членом класса и используем его для того, чтобы назначить наблюдателя (observer), который будет обрабатывать события от ChoiceList'a.
...
...
#include <aknchoicelist.h>
 
// CLASS DECLARATION
class CChoiceListAppView : public CCoeControl, public MCoeControlObserver
{
.....
.....
//From MCoeControlObserver
void HandleControlEventL(CCoeControl *aControl,TCoeEvent aEventType);
 
//Вспомогательные функции приложения
void CreateChoiceListL();
 
//From CCoeControl
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
.....
private:
CAknChoiceList* iChoiceList;
....
};

ChoiceListAppView.cpp

  • Вызываем функцию создания ChoiceList'a в ConstructL()
// -----------------------------------------------------------------------------
// CChoiceListAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CChoiceListAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
 
CreateChoiceListL();
....
....
 
// Устанавливаем размеры окна
SetRect(aRect);
 
// Активизируем окно
ActivateL();
}


  • Заполняем список элементами массива
  • Устанавливаем класс CChoiceListAppView в качестве наблюдателя и обработчика событий от ChoiceList'a , реализуем функцию HandleControlEventL()
void CChoiceListAppView::CreateChoiceListL()
{
CDesCArray* itemArray = new (ELeave) CDesCArrayFlat(5);
CleanupStack::PushL(itemArray);
itemArray->AppendL(_L("First"));
itemArray->AppendL(_L("Second"));
itemArray->AppendL(_L("Third"));
 
iChoiceList = CAknChoiceList::NewL(this, itemArray);
CleanupStack::Pop(itemArray);
iChoiceList->SetContainerWindowL(*this);
iChoiceList->SetObserver(this);
iChoiceList->SetRect(TRect ( TPoint(100,200), TSize(120,10) ) );
}
  • Реализуем функцию HandleControlEventL для обработки событий от ChoiceList'a
void CChoiceListAppView::HandleControlEventL(CCoeControl *aControl,TCoeEvent aEventType)
{
if(iChoiceList == aControl)
{
switch(aEventType)
{
case EEventStateChanged:
{
TInt index = iChoiceList->SelectedIndex();
_LIT(KMenuItem,"%d is selected");
TBuf<20> buf;
buf.Format(KMenuItem(), index+1);
CAknInformationNote* info = new (ELeave) CAknInformationNote;
info->ExecuteLD(buf);
}
break;
}
}
}
  • Возвращаем число компонентов, содержащихся в контейнере, у нас он один - iChoiceList
TInt CChoiceListAppView::CountComponentControls() const
{
return 1; // возвращаем число компонентов в контейнере
}
 
CCoeControl* CChoiceListAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iChoiceList;
default:
return NULL;
}
}


  • Не забудьте удалить iChoiceList в деструкторе класса.
 
// -----------------------------------------------------------------------------
// CChoiceListAppView::~CChoiceListAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CChoiceListAppView::~CChoiceListAppView()
{
....
....
if(iChoiceList)
{
delete iChoiceList;
iChoiceList = NULL;
}
}

Полезные функции

CAknChoiceList

  • SelectedIndex()
  • AddItemL()
  • RemoveItem()
  • HideChoiceList()
  • InsertItemL()

MCoeControlObserver

  • HandleControlEventL()

Ключевые моменты

Заголовочные файлы

  • #include <aknchoicelist.h>

Классы

  • CAknChoiceList
  • MCoeControlObserver

Libraries

  • eikcoctl.lib

Демонстрационное приложение

Связанные ссылки



При подготовке статьи использованы следующие материалы:

Источники дополнительной информации

This page was last modified on 23 November 2011, at 04:18.
194 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×