由于做嵌入式开发,PC上简单的RichEdit控件这么简单的功能只能自己实现。
临到做时才发现做一些基础控件实在很痛苦。
初步设想字符串的排布分为:段,行,字符的概念。
程序可以同时加载若干段。
段:表示一个以\r\n为结束的字符串
行:若干行表示一段
字符:若干字符表示为一行。但真正做的时候,由于要有滚动条,并支持自动换行的概念,发现座标的确定用行来是最直观的,但应对不同宽度的屏,只有段的概念才能使相同的段在不同的屏上表示时,概念是一致的。感觉好累

解决方案 »

  1.   

    确实有点麻烦。
    目前我用的是等宽字符的概念,即每个字符的宽度都相等,两个字符宽度等于一个汉字长度。这样设计的想法是看notepad或是其它的如ultraedit编辑器都是这样,并且这样对于点击屏幕定位到具体的行列中概念上容易理解,易于实现。
    初步设想段的概念,段中分配空间,存储具体字符串,包含一个行的结构,每次段的内容有所变动或是显示页面宽度有所变动时,重新计算段中行的集合,pbegin表示计算后指向段中字符的位置,len表示本行的长度。
    struct EditLine{
      TCHAR* pbegin;
      int len;
    };
    struct EditSect{
      TCHAR* pszChar;
      int nLength;
      vector<EditLine> lines;
    };
    经过这样的设计,能够实现点击定位,不过由于所有概念都是建立在段的基础之上的,总是通过段来寻找行,概念上很不直观,在写的过程中比较痛苦。另外,由于实际情况是字符并非是等宽的,造成的结果是为了实现等宽的效果,必须一个一个的画出来,效率上很不好,并且字符间距很不自然。
    寻求方法,是不是有某个函数,设置好后所有的字符大不都是等宽的了?
      

  2.   

    建议使用rxRichEdit,都能解决上述问题。