Как я делаю GUI?

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
7
задан Markus Safar 7 February 2016 в 18:07
поделиться

5 ответов

Этот вопрос очень похож на один, я собирался отправить, только мой - для Sony программирование PSP.

Я играл с чем-то некоторое время, я консультировался с некоторыми книгами и VTMs, и до сих пор это - общее представление о простые ui системы.

class uiElement()
{
    ...
    virtual void Update() = 0;
    virtual void Draw() = 0;
    ...
}

class uiButton() public : uiElement
{
    ...
    virtual void Update();
    virtual void Draw();
    ...
}

class uiTextbox() public : uiElement
{
    ...
    virtual void Update();
    virtual void Draw();
    ...
}

... // Other ui Elements

class uiWindow()
{
    ...
    void Update();
    void Draw();

    void AddElement(uiElement *Element);
    void RemoveElement(uiElement *Element);

    std::list <uiElement*> Elements;

    ...
}

void uiWindow::Update()
{
    ...
    for (list <uiElement*>::iterator it = Elements.begin(); it != Elements.end(); it++ )
        it->Update();
    ...
}

void uiWindow::Draw()
{
    ...
    for (list <uiElement*>::iterator it = Elements.begin(); it != Elements.end(); it++ )
        it->Draw();
    ...
}

princple должен создать окно и attact ui Элементы к нему, и назвать ничью и методы обновления от соответствующих основных функций.

У меня нет ничего еще работающего, как у меня есть проблемы с кодом для прорисовки. С различными API на ПК и PSP, я смотрю на некоторый код обертки для OpenGL и psp gu.

Надеюсь, это поможет.

thing2k

3
ответ дан 7 December 2019 в 10:11
поделиться

Одна полезная стратегия иметь в виду могла бы быть составным шаблоном. На низком уровне это могло бы позволить Вам рассматривать все объекты GUI (и наборы объектов) более легко когда-то созданный. Но я понятия не имею, что вовлечено в дизайн платформы GUI, таким образом, одно место для нахождения общего вдохновения находится в исходном коде существующего проекта. WxWidgets является межплатформенной платформой GUI с доступным источником. Удача с Вашим проектом!

0
ответ дан 7 December 2019 в 10:11
поделиться

Для любого, кому интересно, вот мой открытый исходный код, BSD-лицензированный инструментарий GUI для DS:

http://www.sourceforge.net/projects/woopsi

ответ thing2k довольно хорош, но я серьезно рекомендовал бы иметь код для содержания дочерних элементов UI в основе uiElement класс. Это - шаблон, за которым я следовал в Woopsi.

Если Вы не будете поддерживать это в базовом классе, то Вы столкнетесь с основными проблемами, когда Вы попытаетесь реализовать что-либо более сложное, чем текстовое поле и кнопка. Например:

  • Панели вкладок могут быть смоделированы, поскольку несколько кнопок группировались в родителя-одиночку элемент UI, который осуществляет взаимную исключительность выбора;
  • Группы переключателей (так же);
  • Полосы прокрутки могут быть представлены как элемент ползунка/поля и/вниз кнопки;
  • Прокрутка списков может быть представлена как контейнер и несколько элементов опции UI.

Кроме того, стоит помнить, что DS имеет ЦП на 66 МГц и 4 МБ RAM, которая используется и чтобы сохранить Вашу программу и выполнить ее (DS ROMs загружаются в RAM, прежде чем они будут выполнены). Необходимо действительно рассматривать его как встроенную систему, что означает, что STL отсутствует. Я удалил STL из Woopsi и сумел сохранить 0.5 МБ. Не много по настольным стандартам, но это является 1/8-м из общей доступной памяти D, использованной спамом STL.

Я детализировал весь процесс записи UI на моем блоге:

http://ant.simianzombie.com/blog

Это включает описания этих двух алгоритмов, которые я придумал для перерисовки экрана, который является самой хитрой частью создания GUI (каждый просто разделяет прямоугольники и помнит видимые регионы; другие деревья BSP использования, который намного более эффективен и легче понять), подсказки для оптимизации, и т.д.

3
ответ дан 7 December 2019 в 10:11
поделиться

Я думаю, смотря на способ, которым другие инструментарии GUI сделали это, было бы превосходное место для запуска. Для примеров C++ я слышу много хороших вещей о QT. Я не использовал его лично все же. И конечно WxWidgets как Nick упомянул.

0
ответ дан 7 December 2019 в 10:11
поделиться

Я записал очень простой GUI точно так же, как Вы делаете предложение. У меня есть он работающий на Windows, Linux и Macintosh. Это должно портировать относительно легко на любую систему как PSP или DS также.

Это - открытый исходный код, LGPL и здесь:

http://code.google.com/p/kgui/

0
ответ дан 7 December 2019 в 10:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: