Вы уже прочитали первый урок? Если нет то тогда и не стоит начинать этот. Во второй части мы научимся создавать список элементов (далее лист, list). Наш эльф будет выводить список дней, и при нажатии на день выводить тип этого дня (будний или выходной).
1. Открываем наш проект. В папке с ним создаём файлы list.c и list.h, затем включим list.c в наш проект (как это сделать вы уже должны знать). Теперь впишем еще один заголовочный файл в каждый файл *.c, в начале должен быть следующий код:
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).
добавляет элементы в наш список. Циклом 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);).
создаёт сам список и "запускает" функцию 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 и необходимые нам внешние переменные и
Тут, думаю расписывать не надо, и так все предельно понятно, а если нет то задавайте вопросы. Теперь поменяем 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);.
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.