создать свой 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 итд). да и добавить методов в уже готовые классы не помешает.
есть вопросы, предложения? не стесняйтесь, пишите

Прикрепленный к сообщению файл:

cldemo.zip cldemo.zip (9.58 kb; 156 hits) Скачать файл

 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