создать свой GUI легко : Эльфостроение : Форум |
den_po: |
09.08.09, 11:28 |
внимание! для нормальной компиляции выложенного тут кода требуется патч для 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. Код: class CMyDisp:public CDispObjT<CMyDisp> { public: static char* getName(); void onDraw(int a,int b,int c); void onKey(int key,int,int repeat,int type); }; ... char* CMyDisp::getName() { return "MyDisp"; } void CMyDisp::onKey(int key,int,int repeat,int type) { // обрабатываем нажатия клавиш } 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 итд). да и добавить методов в уже готовые классы не помешает. есть вопросы, предложения? не стесняйтесь, пишите |
mmcorp: |
08.10.09, 14:52 |
den_po, а можешь сделать что нибудь подобное с гви? |
den_po: |
08.10.09, 14:59 |
MoneyMasteR, там есть класс для GC. по его подобию несложно и для GVI сделать. Добавлено 8.10.09 15:00 а вообще да, планировал. но сначала надо разобраться с а2, нужно, чтоб одинаково работало везде. |
den_po: |
13.03.10, 21:19 |
выложил на свн classlib и два примера, использующие эту библиотеку: крестики-нолики (tictactoe) и virtualmethods. |
URL этой темы: https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=4210 © 2005-2018 supertrubka.org |