Делаю GUI для своей игрушки.
Хотелось бы иметь сие компактное и легко расширяемое.
Структура, если коротко, такая:
есть набор N диалогов и каждый диалог имеет некоторое количество кнопок,
для каждого диалога количество кнопок разное.
// Диалог описывается двумя(на самом деле их чуть больше) массивами:
GLfloat array1[] = {...}; // геометрия кнопок
int array2[] = {...}; // свойства кнопок
//Массив со всей инфой о диалоге:
void * array3[] = {&array1, &array2};
(Для полного счастья должен быть ещё один массив array4[],
который содержал бы ссылки на массивы с диалогами.
Номер элемента в массиве array4 соответствовал бы текущему диалогу на экране.)
//Есть некая функция, рисующая любой диалог на экране, в которую я передаю массив array3:
void func(void * array)
{
//Здесь нужно использовать данные массивов array1 и array2
//У нас есть их адреса array[0] и аrray[1]
//Как теперь нужно работать с array?
//Как извлечь всю инфу о массивах array1 и array2 ???
}
//Где-то в программе вызов:
...
func(&array3);
...
Кто что подскажет???
Примечание:
Вадим, ответ твой интересный. Попробую обязательно.
А что всё-таки с массивами?
Примечание:
Спаб за добавку!
Примечание:
С отрисовкой проблем у меня нет.
Есть маленькая компактная процедурка(OpenGL), которая отлично отрисовывает диалог на экране.
Примечание:
В текущем моменте я передаю две ссылки в функцию &array1, &array2 отрисовки диалога.
А нужно, чтобы эта передача шла через массив array3.
Примечание:
Млин, не хотелось бы скатываться на ассемблер.
Вадим, надеюсь, что в твоём методе со структурами подводных камней не будет.
Примечание:
1>.\Sourses\acm_GUI\Frame.cpp(168) : error C2664: 'Button_draw' : cannot convert parameter 1 from 'button' to 'button *'
Эта ошибка на Button_draw(dlg->buttons[i]);
Примечание:
Простое решение на асме:
void GUIDialogDraw(void * array3[])
{ GLfloat * x ;
int * p ;
void * d1;
void * d2;
d1 = array3[0];
d2 = array3[1];
_asm
{
MOV EAX, d1
MOV x, EAX
MOV EAX, d2
MOV p, EAX
}
// Далее работаем с x и p, как с псевдонимами массивов array1 и array2
...
}
Примечание:
Но как сделать без асма?
Примечание:
Майоров Павел, во спасибо!
Кажется, в прошлый раз, я забывал при приведении типов ставить звёздочку))).
Во действительно, как можно на мелочи сесть в лужу))).
Вадим, у тя лучший концепт!
Отмечу вас в кредитах)))!
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.