Если я понимаю ваш вопрос, вы можете создать класс, представляющий коробку, например:
class Box {
public:
void Move(int newx, int newy) {
x = newx;
y = newy;
}
void Resize(int newx, int newy) {
w = newx;
h = newy;
}
int getX() { return x; }
int getY() { return y; }
int getW() { return w; }
int getH() { return h; }
private:
int x, y, w, h;
};
Затем вы можете иметь глобальный вектор для хранения всех коробок:
#include <vector>
vector<Box> box;
Затем вы можете добавить поле, подобное этому:
Box newbox;
newbox.Move(40,50);
newbox.Resize(10,10);
box.push_back(newbox);
И переместить существующее, как это:
box[3].Move(70,20);
Извините, я не могу ответить на ваш вопрос полностью,но я надеюсь, что у вас есть представление о том, как выполнить ваш проект.
РЕДАКТИРОВАТЬ: Чтобы получить древовидную структуру, вы можете добавить эти переменные в класс Box:
private:
Box* parent;
vector<Box*> child;
Это позволит вам отслеживать древовидную структуру.Затем, сделав что-то вроде:
myBox->getChild(0)->getChild(1)
, получим второго потомка первого потомка myBox.Я надеюсь, что это имеет смысл для вас.