大家帮看下这个关系如何实现

大家帮看下这个关系怎么实现?

 
要建立这样一种对应关系:

程序状态——按钮类型——按钮位置

程序状态:由几个enum类型变量的值决定
按钮类型:指的是要显示哪几个按钮
按钮位置:指显示的位置

因为状态不同,按钮类型也会不一样,位置也会不一样。我怎么用程序表示这种关系?应该用到什么数据结构?大家给点建议。不论方法好坏,解决问题即可。


------解决方案--------------------
如果可以的话建议针对每一种程序状态各建一个窗口布局
如果需要实现动态布局,另有如下建议
enum State { E_INIT, E_START, E_RUN, E_DESTORY };
struct ButtonPos{int index, top, left;}; // 如果按钮不在数组中,把index改成其它方式引用按钮
vector <ButtonPos> vecButtons; // 一种布局中可能包括任意数目的按钮
map < State,vector <ButtonPos> > mapLayout;// 程序状态与按钮布局间建立映射关系
------解决方案--------------------
如果你的意思是程序有上千种状态,那么就不要用枚举类型来定义程序状态了,
给这上千种程序状态按个编号吧,并且把map < State,vector <ButtonPos> > mapLayout;改成:
vector < vector <ButtonPos> > vvLayout; //如此便可避免写上条if判断语句

比如你现在要取编号为10的程序布局:
vector <ButtonPos> curLay=vvLayout[10]; //直接用编号当下标进行索引
for (vector <ButtonPos> ::iterator it=curLay.begin(); it!=curLay.end(); ++it)
{
//遍历当前布局下所有按钮的位置信息 it-> index ... it-> top ... it-> left ...
}