внимание! для нормальной компиляции выложенного тут кода требуется патч для IAR из темы MOV PC,Rx
тут уже есть примеры использования некоторых стандартных gui. а вот примеров создания gui с абсолютно своим поведением нет. примеры можно найти на svn (BcfgEdit/EventControl/Gono4ki/...), но способ, которым они там создаются, заставляет описывать кучу мелочей, отвлекающих от написания контрола. да и лично мне в коде этих эльфов разбираться очень сложно. для себя я сделал простую библиотеку классов. надеюсь, кому-то она облегчит работу. для начала несколько слов о взаимосвязи объектов. BOOK имеет GUI, GUI имеет DISP_OBJ, а DISP_OBJ это непосредственно то, что мы видим, и с чем взаимодействуем (на самом деле DISP_OBJ имеет WINDOW, но нам это не нужно). итак, чтобы прицепить контрол к книге, нужно создать GUI и DISP_OBJ. при использовании данной библиотеки достаточно описать класс, описывающий DISP_OBJ.
void CMyDisp::onDraw(int a,int b,int c) { // рисуем }
CMyDisp наследуется от шаблонного класса CDispObjT. при наследовании от этого шаблона обязательно нужно определить метод getName. остальные методы переопределять только по необходимости (список самих методов смотрите в описании классов в файле CL.H)
создание, использование и удаление GUI на основе нашего класса проще простого: Код:
CGuiBase* gui = new CGuiT<CMyDisp>(book, 0);
gui->Show(); gui->SetStyle(1); gui->Free();
в примере ещё используется CBook, но там всё просто, в класс CMyBook завёрнут функционал эльфа HelloWorld с свн. вообще главная задача эльфа - показать работу с GUI. эльф рисует на экране квадратик, при нажатии на левый софт gui эльфа прячется (из букмана можно его вернуть), а при нажатии "назад" удаляется совсем.
собираюсь ещё добавить классов, чтоб быстро и легко переопределять поведение стандартных контролов (listmenu, inputstring итд). да и добавить методов в уже готовые классы не помешает. есть вопросы, предложения? не стесняйтесь, пишите
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.