我在工作中遇到一个任务,要求手工编写一个类似editbox的控件,要求在用户操纵左右方向键和backspace键时,做出类似editbox的反应。其实需要实现的逻辑是比较清楚的。但是,在遇到输出字符串是中英文混排时,问题就出现了。
程序中有两个变量:str指向字符串第一个字符,pstr指向当前editbox中显示的第一个字符,cursorpos是光标相对所在位置,charnumber是一个editbox最多能显示多少个字符。判断pstr是否移动的依据是str+cursorpos-pstr>charnumber但是,当出现下面的情况时,我不能分析出如何处理了.
____________
o今天是周一|
------------
显示字符串的第一个符号是英文,光标在“一”之后,这时点击右方向键。若让pstr=pstr+1;cursorpos=cursorpos+2;可以正常显示,但我的判断条件str+cursorpos-pstr>charnumber就失效了,因为这是真正一行显示的字符数比charnumber多一若让pstr和cursorpos都加2,则pstr指向中文字符的一半,出现乱码。
请问这应该怎么解决呢?或者大家有什么更好的实现方法?