Для всех, кто заинтересован, вот мой открытый исходный код, лицензированный BSD инструментарий GUI для DS:
http://www.sourceforge.net/projects/woopsi
Ответ thing2k довольно хороший, но я бы настоятельно рекомендовал иметь код, содержащий дочерние элементы пользовательского интерфейса в базовом классе uiElement. Это образец, которому я следовал в Woopsi.
Если вы не поддерживаете это в базовом классе, вы столкнетесь с серьезными проблемами при попытке реализовать что-то более сложное, чем текстовое поле и кнопка. Например:
- Панели вкладок можно смоделировать как несколько кнопок, сгруппированных в один родительский элемент пользовательского интерфейса, который обеспечивает взаимную исключительность выбора;
- Группы радиокнопок (то же самое);
- Полосы прокрутки можно представить в виде элемента ползунка / желоба и кнопок вверх / вниз;
- Прокрутка списков может быть представлена в виде контейнера и нескольких элементов пользовательского интерфейса.
Кроме того, стоит помнить, что DS имеет 66 МГц ЦП и 4 МБ ОЗУ, которые используются как для хранения вашей программы, так и для ее выполнения (ПЗУ DS загружаются в ОЗУ перед запуском). Вы должны действительно рассматривать это как встроенную систему, что означает, что STL отсутствует. Я удалил STL из Woopsi и сумел сэкономить 0.5MB. По настольным стандартам не так много, но это 1/8 от общей доступной памяти DS, используемой STL-мусором.
Я подробно описал весь процесс написания пользовательского интерфейса в своем блоге:
http://ant.simianzombie.com/blog
Он включает описание двух алгоритмов, которые я придумал для перерисовки экрана, что является самой сложной частью создания графического интерфейса пользователя (один просто разбивает прямоугольники и запоминает видимые области; другой использует деревья BSP, что гораздо эффективнее и легче понять), советы по оптимизации и т. д.