wordwrap 2的最佳消息框大小

时间:2013-06-15 20:47:00

标签: c user-interface

具有固定大小的字符和应该将整个单词包装到下一行的文本,计算最接近正方形的拟合居中正方形的最佳算法将占用最少的空间并且看起来对用户有用吗? / p>

屏幕定义为此

#define max_width 1024
#define max_height 768
#define char_width 10
#define char_height 16

用字符计算生成的包装文本大小的函数

void calculate_wrapped_text_size( const char *text, int box_width_in_px, int &width_in_chars, &height_in_chars )
{
 ...
}

所以输入为 Line1 text longtext longertext anytext \n Line2< ......>它将计算适合给定宽度的包装文本

void find_optimal_size( const char *text, int &optimal_width_in_px, int &optimal_height_in_px )
{
 ...
}

是否有任何标准方法可以计算出宽度和高度最佳的尺寸,以便最适合用户使用?我想找到找到最小区域框的路径,然后迭代到两边最小差异的大小?

1 个答案:

答案 0 :(得分:0)

你想到的“最小区域框”肯定只是一条线 - 这不是你想要的。

首先,检查是否需要自己编写换行算法,因为大多数GUI工具包无论是本机还是跨平台(都可以)为您执行此操作。

如果你需要这样做,你可以这样做:计算你想要允许的最大行宽。基于显示窗口的宽度或基于该窗口中其他窗口小部件的布局。

然后对于每一行:写入直到一个单词达到最大宽度,该单词是第一个需要下一行的单词。

您需要考虑的细节:首先,您的字母是否都具有相同的宽度(这将使字宽计算更加容易)以及您认为哪些字符是字边界(空格,制表符,“ - “。)

有一些需要考虑的角落案例,例如:如果窗口太窄而某个特定单词不适合即使它是该行的第一个单词,该怎么办:上面的算法会不断添加越来越多的行;你必须在算法中添加一个特殊情况,如果它是行的第一个单词,那么单词可能不是自动换行的,而是必须进行字符包装,即只需将尽可能多的字符写入行中即可。留在下一行。