Iwoyd, способ зависит от задачи, можно это делать статически, можно динамически. Независимо от среды разработки:
1) статический способ - если элементов не много намечается, то положить их на форму в редакторе и скрыть. Показывать и перемещать в нужное место по мере надобности (в обработчике нужной кнопки, скажем)
2) динамический способ:
иметь в программе массив указателей на объект
//VC++
//если, скажем, больше 100 элементов не предвидится. (Если предвидится -
//это задача уже относится к работе с динамическим массивом.
//Можно vector использовать, например, или ещё что нибудь)
enum{e_elemsMaxCount=100};
CStatic* m_Array[e_elemsMaxCount];
...
//инициализация массива - все указатели == 0
//0 покажет, что объект не создан
::memset(m_Array,0,sizeof(m_Array));
...
//где то понадобился новый объект
//ищем в массиве m_Array не занятый указатель
CStatic** ppS= ...;//например, ppS=&m_Array[13];
if(ppS!=0 && (*ppS) == 0)
{
(*ppS)=new CStatic();
(*ppS)->Create(...);
(*ppS)->MoveWindow(...);
}
//в деструкторе чистим память
for(int i=0; i<e_elemsMaxCount; i++)
{
if(m_Array[i])
{
m_Array[i].DestroyWindow();
delete m_Array[i];
m_Array[i]=0;
}
}
вот как-то так