Все для Sony Ericsson, патчи, эльфы, моддинг, прошивка
  
Логин: Пароль: Запомнить: Привет гость! Зарегистрируйся или авторизируйся для получения доп. возможностей!
Разделы
PDA версия сайта
TrackIDentify
Новости
Статьи
Файлы
Патчи
Патчи A2
Патчи db2020
Эльфы
Исходники эльфов
Wiki
Форум
Опросы
Обратная связь
Развернуть/Свернуть
 
Развернуть/Свернуть

Урок: создаём GUI, часть 2 : Эльфостроение : Эльфы : Форум : Для Sony Ericsson патчи эльфы моддинг прошивка
/  Список форумов
   /  Эльфы
      /  Эльфостроение
   /  Урок: создаём GUI, часть 2
На печать 
Правила 


arban


Elfmaker


Регистрация: 2.3.08
Сообщений: 802
Репутация: 3111





 
  #1 [23.02.09, 17:10] Урок: создаём GUI, часть 2   

 
Урок: создаём GUI, часть 2

Вы уже прочитали первый урок? Если нет то тогда и не стоит начинать этот. Во второй части мы научимся создавать список элементов (далее лист, list). Наш эльф будет выводить список дней, и при нажатии на день выводить тип этого дня (будний или выходной).

1. Открываем наш проект. В папке с ним создаём файлы list.c и list.h, затем включим list.c в наш проект (как это сделать вы уже должны знать). Теперь впишем еще один заголовочный файл в каждый файл *.c, в начале должен быть следующий код:

Код:

#include "..\\include\Lib_Clara.h"
#include "..\\include\Dir.h"
#include "gui.h"
#include "list.h"


2. Откроем в иаре list.c и впишем в него код:

Код: 

LIST *list=0;
int Items_Counter=0;

wchar_t * 

names[]={L"Понедельник",L"Вторник",L"Среда",L"Четверг",L"Пятница",L"Суббота",L"Воскресение"}

;
wchar_t * type[]={L"Будний день",L"Выходной"};

void ItemsAdd()
{  
  int i;
  for(i=0;i<7;i++)
  {
  ITEM *item=new ITEM;
  memset(item,0,sizeof(ITEM)); 
  item->name=names[i];
  if(i<5)item->mess=type[0];
  else item->mess=type[1];
  Items_Counter++;
  ListElement_Add(list, item);
  }
};

void CreateList()
{
  list=List_New();
  ItemsAdd();
}

void DestroyList()
{  
  if (list)
  {
    while (list->FirstFree)
    {
      ITEM* it=(ITEM*)ListElement_Remove(list,0);
      if (it)delete(it);
    }
    List_Free(list);
    list=0;
  }
}



Теперь распишу что да как:

Создаем лист (LIST *list=0;), создаем переменную хранящую количество пунктов в меню, создаем 2 массива, содержащие названия и тип пунктов(names и type).

Функция:

Код: 

void ItemsAdd()
{  
  int i;
  for(i=0;i<6;i++)
  {
  ITEM *item=new ITEM;
  memset(item,0,sizeof(ITEM)); 
  item->name=names[i];
  if(i<5)item->mess=type[0];
  else item->mess=type[1];
  Items_Counter++;
  ListElement_Add(list, item);
  }
};


добавляет элементы в наш список. Циклом for мы постепенно увеличиваем переменную i, создаем переменную типа ITEM (о нем мы поговорим позже), задаем ему память memset(item,0,sizeof(ITEM))), присваиваем указателю на имя название дня соответствующего текущему значению i (item->name=names[i];), простым условием if-else определяем тип дня (if(i<5)item->mess=type[0]; else item->mess=type[1];), прибавляем переменной, содержащей кол-во элементов единицу и наконец добавляем листу новый элемент (ListElement_Add(list, item);).

Функция:

Код:

void CreateList()
{
  list=List_New();
  ItemsAdd();
}


создаёт сам список и "запускает" функцию ItemsAdd().

Функция:

Код: 

void DestroyList()
{  
  if (list)
  {
    while (list->FirstFree)
    {
      ITEM* it=(ITEM*)ListElement_Remove(list,0);
      if (it)delete(it);
    }
    List_Free(list);
    list=0;
  }
}


уничтожает лист. Проверяем лист на наличие, очищаем элементы(ListElement_Remove(list,0);), удаляем (List_Free(list);) и присваиваем ему нулевое значение.

3. Теперь нужно в list.h вписать структуру ITEM и необходимые нам внешние переменные и

функции:

Код: 

typedef struct
{
wchar_t*name;
wchar_t*mess;
}ITEM;

extern int Items_Counter;
extern LIST *list;
extern void CreateList();
extern void DestroyList();



Тип wchar_t обозначает строку в кодировке Unicode. Осталось переделать модуль gui.c и немного дополнить main.c.

4. Открываем main.c и заменяем функцию main:

Код: 

int main (void)
{
  CreateHWBook();  
  CreateList();
  GuiCreateGuiList(0, (BOOK *)myBook);
  return(0);
}


Как видите, прибавилась всего-лишь одна строка - создание листа. Теперь поменяем функцию

onCloseHWBook:

Код: 

void onCloseHWBook(BOOK * book)
{
  if (book)
  {    
    DestroyList();
    SUBPROC(elf_exit);
  }
}


Тут тоже добавили одну строчку - уничтожение листа.

5. Открываем gui.c. Меняем функцию GuiOnEnterPressed:

Код:

void GuiOnEnterPressed(BOOK *bk, void *lt)
{     
  int item=ListMenu_GetSelectedItem(myBook->gui);
  ITEM *it=(ITEM *)ListElement_GetByIndex(list, item);
  MessageBox(0x6fFFFFFF,Str2ID(it->mess,0,SID_ANY_LEN),0, 1 ,5000,0);  
}


Тут, думаю расписывать не надо, и так все предельно понятно, а если нет то задавайте вопросы.
Теперь поменяем GuiOnLBMessage:

Код: 

int GuiOnLBMessage(GUI_MESSAGE * msg)
{
  int item;  
  switch(msg->msg)
  {    
  case 1:
    item=GUIonMessage_GetCreatedItemIndex(msg);    
    ITEM *it=(ITEM *)ListElement_GetByIndex(list, item);   
    SetMenuItemText0(msg,Str2ID(it->name,0,SID_ANY_LEN));
  }
  return(1);
};


Расписывать как и выше не буду. Теперь осталось поменять кол-во пунктов в меню, оно, как вы помните храниться в переменной Items_Counter, тоесть ищем SetNumOfMenuItem(myBook->gui,2); и заменяем на SetNumOfMenuItem(myBook->gui,Items_Counter);.

Готово! Компилируем и смотрим результат.

(c)arban




LG Optimus
My SVN | Elflib Wiki | Elf SVN
Спасибо сказали: jonico, timos_06, Xamid, Vitall, michlantecuhtli, MoneyMasteR, Снежок, Ilmir5555, Melodic_Death, toha257, Metaler

arban


Elfmaker


Регистрация: 2.3.08
Сообщений: 802
Репутация: 3111





 
  #2 [23.02.09, 20:23] Re: Урок: создаём GUI, часть 2   

 
Небольшое дополнение. Немного переделал функцию DestroyList




LG Optimus
My SVN | Elflib Wiki | Elf SVN
Спасибо сказали: scorpion1616


Похожие темы
 ТемаОтветыАвторПросмотрыОбновление
  Урок: разбираем списки, часть 12arban635630.09.10, 21:31
  Урок: создаём GUI, часть 16arban1305201.08.10, 22:32
  Урок 1. Создаём вибру10ZEN1319119.06.10, 17:36
  Урок 2. создаём окно12ZEN1480117.06.10, 14:51
  лишняя часть3=paha=473417.03.09, 18:51

  • Поиск
  • Права
Вы не можете начинать темы.
Вы не можете редактировать свои сообщения.
Вы не можете создавать опросы.
Вы не можете вкладывать файлы в сообщения.
Вы не можете отвечать на сообщения.
Вы не можете удалять свои сообщения.
Вы не можете голосовать.

Главная Новости Статьи Файлы Патчи Форум Опросы PDA
- Генерация страницы: 0.13 секунд | 10 Запросов | HTML: 34.19 КБ -