VC RichEdit插入表格(RTF形式)
Posted sjwics
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC RichEdit插入表格(RTF形式)相关的知识,希望对你有一定的参考价值。
我们知道RichEdit中可以打开并显示RTF文档,要实现在RichEdit中插入表格可以使用OLE方式外,还可以使用RTF 方式。关于RTF格式规范可在微软下载中心下载到,例如1.7版本下载地址:http://www.microsoft.com/download/en/details.aspx?id=22699,详细介绍了关于RTF的规范。另外,网上有《RTF文件格式规范 v1.7》全文翻译的中文版。
开始菜单→附件→写字板,输入"Hello World",如下图所示:
然后保存成"test.rtf",用记事本打开此文件,内容为:
这些就是RTF的基本形式。下面测试显示:
1.打开VS2008,建立一个基于CRichEditView的多文档视图Unicode工程,名称取为:CTest_Richedit;
2.在OnInitialUpdate初始化函数,添加以下代码:
3.运行如下图所示:
对于表格,表现为多个表行的序列。一个表行是一个被分割成单元格的连续段落序列。表行从控制字 rowd开始, ow结束。包含在一个表行中的每个段落必须指定intbl控制字或者从前一段落继承。一个单元内可能有多个段落;单元由单元格标志(cell控制字)结束,行由行标志( ow控制字)结束。表行也可以被定位。此时, 表行的每个段落必须具有相同的定位控制字。 表的属性可以从前一行继承;因此,连续的表行可以通过单一的<tbldef>来定义。
下面测试最基本显示表格的RTF内容,对此表格未进行任何设置,将第6行换成下面语句:
运行如下图所示:
输入文字,如下图所示:
1.关于RTF(富文本格式)的使用 http://blog.sina.com.cn/s/blog_5d2a73550100bcth.html
2.An example editor with table and image support http://www.codeproject.com/KB/docview/Table___Image_editor.aspx
开始菜单→附件→写字板,输入"Hello World",如下图所示:
然后保存成"test.rtf",用记事本打开此文件,内容为:
1 2 3 4 |
{
tf1ansiansicpg936deff0deflang1033deflangfe2052{fonttbl{f0fnilfcharset134 ‘cb‘ce‘cc‘e5;}} {*generator Msftedit 5.41.21.2509;}viewkind4uc1pardsa200sl276slmult1lang2052f0fs22 Hello Worldpar } |
1.打开VS2008,建立一个基于CRichEditView的多文档视图Unicode工程,名称取为:CTest_Richedit;
2.在OnInitialUpdate初始化函数,添加以下代码:
01 02 03 04 05 06 07 08 09 10 11 |
void CTest_RicheditView::OnInitialUpdate() { CRichEditView::OnInitialUpdate(); SetMargins(CRect(720, 720, 720, 720)); CStringA rtfStr = "{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \‘cb\‘ce\‘cc\‘e5;}}{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang2052\f0\fs22 Hello World\par}"; SETTEXTEX st; st.codepage = 1200; st.flags = ST_SELECTION | ST_KEEPUNDO; SendMessage(EM_SETTEXTEX, (WPARAM)&st, (LPARAM)(LPCSTR)rtfStr); } |
对于表格,表现为多个表行的序列。一个表行是一个被分割成单元格的连续段落序列。表行从控制字 rowd开始, ow结束。包含在一个表行中的每个段落必须指定intbl控制字或者从前一段落继承。一个单元内可能有多个段落;单元由单元格标志(cell控制字)结束,行由行标志( ow控制字)结束。表行也可以被定位。此时, 表行的每个段落必须具有相同的定位控制字。 表的属性可以从前一行继承;因此,连续的表行可以通过单一的<tbldef>来定义。
下面测试最基本显示表格的RTF内容,对此表格未进行任何设置,将第6行换成下面语句:
1 | CStringA rtfStr = "{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \‘cb\‘ce\‘cc\‘e5;}}{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\trowd\cellx2000\cellx4000\intbl\cell\cell\row\trowd\cellx2000\cellx4000\intbl\cell\cell\row\par}"; |
输入文字,如下图所示:
对于表格的各种设置,包括:外框宽度、边距等等,请参考RTF规范文档进行设置。
注意:对于默认的RichEdit20W只支持简单的表,而且在单元格内回车不换行,而RichEdit50W(即Version4.1)可以支持多级表,并且单元格内回车换行。以上的文章内容是基于RichEdit50W的,关于切换到RichEdit50W的介绍,请看《VC2008下CRichEditView加载RichEdit4.1版本》。
参考文章:1.关于RTF(富文本格式)的使用 http://blog.sina.com.cn/s/blog_5d2a73550100bcth.html
2.An example editor with table and image support http://www.codeproject.com/KB/docview/Table___Image_editor.aspx
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
以上是关于VC RichEdit插入表格(RTF形式)的主要内容,如果未能解决你的问题,请参考以下文章
CFE_LINK 是不是存储在 RTF RichEdit 3.0 中?