本人属半路出家,自学vc++有两年之久。遇到一个问题有三个多月了,遍尝各种方法均无果。我将此问题详述如下:我想做一个包有richedit的ocx,现在想在ocx中实现几个方法。当外界调用这些方法时,可以达到如下目的:在richedit中的当前光标位置插入自定义行数和列数的表格;删除表格中选定的单元格;合并表格中选定的相关单元格。总之,类似于word中的实现表格功能的方式,但是是完全是用代码实现(借用现有的表格类源码),而不是用ole等方式。我现在手里有一个表格类的源代码,也是vc的,这个表格类继承于Cwnd类,其中就有几个方法实现了自定义行数和列数表格的绘制、单元格的删除、合并等。
-------------------------------------------------------------------------------------------------------------遇到很多问题,比如当插入表格,那文字的位置等该如何处理?比如richedit中第一至第三行有文字,当我在第一行的开头插入光标,并想在此处插入表格,那原来的文字是否要移位,此时该如何处理??删除表格也是,表格后面的文字是否要向前移位??总之诸如此类的问题很多,没有法子弄清楚。希望csdn各路高手走过路过,驻足看看。我能最后碰碰运气。

解决方案 »

  1.   

    楼主不妨查查codeproject上有没有相关源码。 
      

  2.   

    我已经不止一次看到这个问题了
    你说不想通过ole实现是什么意思
    重写richedit实现表格功能?
      

  3.   

    这个可非常麻烦
    反正我是没做过
    而且也不想尝试
    你是不是在研究DirectUI
      

  4.   


    我是想做个包有richedit的ocx,richedit具有一独特的功能
      

  5.   

    这个相当于要实现word的表格功能了
    何必这么麻烦呢?直接插入一个word控件不更好吗?
      

  6.   


    还需要一些word所没有的功能。所以不能直接插入一个word控件
      

  7.   

    是个体力活分段处理rtf编码。
    所有操作都生成rtf,编码整合后再输入到richedit中。
    将rtf中表格段与你的表格关联,当你操作表格时,只需要改变本段落内容,然后再将这段rtf整合回去。"比如当插入表格,那文字的位置等该如何处理"
    这个肯定要向后移,你是插入嘛。当然具体怎么处理,就看你的需求了。
      

  8.   

    每次修改表格后,重新生成一个表格的rtf,这个最好在你的表格类中实现。
      

  9.   

    楼主就是想让richedit拥有一个所见即所得的表格编辑功能吧?方法就是这样的,richedit做为视图,以rtf为文档,操作rtf流就可以了,在文档与视图间加个rtf解析的类,不需要再增加其他的表格类,难道楼主要两个视?rtf解析类中实现制表功能,做四个接口,生成表格,输出表给为rtf字符串,输入rtf字符串并解析为表格,第四个接口是对表格的操作。richedit中定位表格段,以及表格中单元格的位置,操作单元格前,先从流中截取表格段,输入到解析器中,然后对表格操作,例如,要合并单元格时,首先定位表格段的rtf,截取到解析类中,再定位单元格的位置,列,行,最后传入操作。难点就在对rtf格式的操作上了。其他没什么复杂的吧?楼主去微软下份rtf文档格式看看。输出文档时你也可以转为html或xml,如果不使用rtf做为文档的话,那么工程将更为浩大,需要自己写一个rich。
      

  10.   

    《RTF文件格式规范 v1.7》(全文翻译版本)!
    http://www.cnpopsoft.com/article.asp?id=18可以结贴了
      

  11.   

    你要是想实现表格数据的删除,移动这些的话,不如自己写一下代码来完成这些。我倒是这样做过。不过没用链表什么的,最好的办法是用链表的方式实现这样不容易出错。而且代码的可维护质量也比较高。我是用vector写的,自己构建了一种数据存/取结构。
      

  12.   


    我试过了用rtf编码的方式来实现表格的插入等,但是有一个很大的问题:这些表格的行高和列宽是事先设定的,无法像word那样在界面里手动进行自由调整(并非用代码,而是纯粹手动)。而且表格的单元格的删除、合并、拆分等还没有试过。
      

  13.   

    感觉上面的回帖都没有搞清楚楼主的意思,
    楼主是想在rich eidt里面放一个表格控件(从CWnd派生的控件),然后想让这个控件像word那样可以编辑(增删行列等),还得让这个表格控件嵌入在edit周围的文字里。我觉得思路就有问题,edit本身就可以显示word那样的表格
    例如从excel复制一个三行三列的表格,各单元格内容如下
    a1 b1 c1
    a2 b2 c2
    a3 b3 c3将excel这个三行三列复制,然后粘贴到rich edit里,然后可以看到TextRtf的值实际上是:
    {\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}{\f1\fnil\fcharset0 MS Sans Serif;}}
    {\colortbl ;\red0\green0\blue0;}
    \viewkind4\uc1\trowd\trgaph30\trleft-30\cellx1050\cellx4199\cellx5279\pard\intbl\cf1\lang2052\f0\fs24 a1\cell b1\cell c1\cell\row
    \intbl a2\cell b2\cell c2\cell\row
    \intbl a3\cell b3\cell c3\cell\row
    \pard\cf0\f1\fs17 
    \par }
    这些东西。建议楼主还是从rtf的文件格式入手。26楼已经给出了rtf的文件格式,可以结贴了。
      

  14.   


    你还是想要所见即所得的表格编辑功能啊,继承CRichEditCtrl,在里面实现鼠标拖动调整表格大小,不是什么难事。在WM_MOUSEMOVE里画调整表格的虚线,改变鼠标指针。根本是不需要在CRichEditCtrl里放一个Grid控件的。
      

  15.   

    高手,经你和33楼的仙人指路,我有点转弯了。
    继承CRichEditCtrl,在里面实现鼠标拖动调整表格大小,不是什么难事。在WM_MOUSEMOVE里画调整表格的虚线,改变鼠标指针。 这个实在不知道如何入手?这个要是实现了,我就算彻底信服了。就可以结贴了。高手能否给点思路,最会能贴上具体代码。我是第一菜鸟。一个在黑暗中摸索的菜鸟。
    要是这个问题解决了,你是我心中的第一高手。万分感谢!
      

  16.   

    在WM_MOUSEMOVE里画调整表格的虚线,改变鼠标指针。 这个实在不知道如何入手?
      

  17.   

    那我还是结贴吧,因我对这种做法没有想过,只是感觉可行,具体没有概念。xblan  80分  ,laocui172 20分同意不同意??