关于按钮控件上的文本的设计有关问题

关于按钮控件上的文本的设计问题。
这个帖子主要想问一下我下面的两种设计思路,哪一种更高效,更好。

先看一下目标效果:


这是一张256×512的文本的纹理图片


我的主要目是如何高效的定位某一个文本的纹理坐标.


【第1种设计方案】
用2维RECT类型数组来保存所有纹理坐标
C/C++ code

struct stTextRect
{
    stTextRect()
    {
        for (int i=0; i<35; i++)
        {
            for (int j=0; j<4; j++)
            {
                TextMatrix[i][j].top    = i*13;
                TextMatrix[i][j].bottom    = i*13+12;
            }
        }
        for (int i=0; i<35; i++)
        {
            TextMatrix[i][0].left    = 0;
            TextMatrix[i][0].right    = 17;

            TextMatrix[i][1].left    = 20;
            TextMatrix[i][1].right    = 53;

            TextMatrix[i][2].left    = 60;
            TextMatrix[i][2].right    = 109;

            TextMatrix[i][3].left    = 115;
            TextMatrix[i][3].right    = 180;
        }
    }

    RECT TextMatrix[35][4];    // 存储文本的RECT
};



【第2种设计方案】
用map容器来存储纹理坐标.
C/C++ code

struct stTextRect
{
    map<POINT, RECT> TextRectMap;    // POINT:矩阵索引  RECT:纹理坐标
};



用哪种方式更好一点?
另外,我的这个设计思路可行么? 会很复杂么?

------解决方案--------------------
一个RECT数组就行了吧,用数组下标索引,最简单。

POINT和RECT在map里是啥关系?
------解决方案--------------------
应该使用map<wstring,RECT>吧,wstring是文本的内容,RECT是对应的区域,根据文本找到区域。
或者用unordered_map<wstring,RECT>,这是hash表,效率比map高一点。
------解决方案--------------------
探讨
引用:应该使用map <wstring,RECT>吧,wstring是文本的内容,RECT是对应的区域,根据文本找到区域。或者用unordered_map <wstring,RECT>,这是hash表,效率比map高一点。


因为这个纹理坐标是有规律的,可以用固定的数值计算出来的,不用一个一个输入,用2维数组很好表达很处理。

如果用map <wstring,RECT>的话,那我的那种文本的位置规律将起不到什么作用。

我再想想。。

------解决方案--------------------
探讨
引用:
如果不需要根据字符串的内容动态查询的话,就不需要记录每一个字符串保存在什么地方了,直接在源代码中指定每个按钮对应的RECT就行了。
如果需要根据字符串内容查询的话,显然应该用字符串作为查询的索引值。

主要是考虑到这个纹理图片以后将会逐步的添加更多的文本,这样的话,如果是用行列来描述纹理坐标,将很方便,不要自己去计算。

不过确实需要用字符串来做索引,来查询他的纹理坐标。至于这个纹理坐标怎么定下来。
我想,应该可以这样:就是RECT不从ini文件里读取,而是自动计算,计算的公式,就是根据图中的行列规律。行和列的值可以通过map本身的元素索引计算出。
只要向map中添加数据的顺序和图中的行列位置保持一致就可以了。

总之呢,纹理不用手工计算。只要PS的时候,按照这个规则设计就行。呵呵,把工作量转移到了美工身上。