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;
 }
}
вот как-то так 
