📄 05o020.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>
<body>
<div align="justify">
<table border="0" width="100%" class="font" height="57">
<tr>
<td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">VC知识库(五)</font>
</td>
<td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">www.vckbase.com</font>
</td>
</tr>
<tr>
<td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
<small>
<big>如何设置RTF Control中的内容</big>
</small>
</td>
</tr>
<tr>
<td width="100%" height="17" class="info" align="center" colspan="2">
<small>闻怡洋 wyy_cq@188.net http://www.hchelp.com</small>
</td>
</tr>
<tr>
<td width="100%" height="22" class="font" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="5" class="font" colspan="2">
<small>
<p>
RTF控件为我们开发提供了很大的方便并减轻了我们开发的工作量,但是它并没有提供一种类似于SetWindowText的简便方法让我们存取内容。一般的方法可以是插入文本再进行格式化,或是利用回调函数进行设置,针对这一原因本文讲述一种利用CString变量存取RTF Contrl中的文本内容的方法,虽然这也是建立在回调函数之上的却可以使其具有重用性。
</p>
<p>1、定义回调函数<br>
<pre>
</small><font size="3">static DWORD CALLBACK EditStreamCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb,
LONG *pcb)
{
CString *pstr = (CString *)dwCookie;
if( pstr->GetLength() < cb )
{
*pcb = pstr->GetLength();
memcpy(pbBuff, (LPCSTR)*pstr, *pcb );
pstr->Empty();
}
else
{
*pcb = cb;
memcpy(pbBuff, (LPCSTR)*pstr, *pcb );
*pstr = pstr->Right( pstr->GetLength() - cb );
}
return 0;
}
</font></pre>
<small>
<br>
参数dwCokkie为用户定义数据,我们利用他传入一个CString的指针,pbBuff为RTF用于保存数据的缓冲,cb为RTF要求的数据量,pcb为用户提供的数据量(返回值),如果该数值如果小于cb表示写数据结束,RTF将停止调用回调函数。请注意该函数将被RTF调用一次或多次。函数说明中的CALLBACK一定要加上。
<p>
2、定义新类<br>
<br>
</small>
<font size="3">CNewRTF::SetRTFText(....)<br>
{<br>
CString rtfPrefix, rtfPostfix;<br>
rtfPrefix = "{\\rtf1\\ansi\\deff0\\deftab720{\\fonttbl{\\f0\\froman "<br>
"Times New Roman;}}\n{\\colortbl\\red0\\green0\\blue0;}\n"<br>
"\\deflang1033\\pard\\tx360\\tx720\\tx1080\\tx1440\\tx1800"<br>
"\\tx2160\\tx2520\\tx2880\\tx3240\\tx3600\\tx3960\\tx4320"<br>
"\\tx4680\\tx5040\\tx5400\\tx5760\\tx6120"<br>
"\\tx6480\\plain\\f3\\fs20 ";<br>
rtfPostfix = "\n\\par }";<br>
<br>
<br>
//DEMO String 你可用自己的参数替代<br>
CString rtfString = rtfPrefix + "\\b Bold\\b0" + rtfPostfix;<br>
<br>
EDITSTREAM es = {(DWORD)&rtfString, 0, EditStreamCallBack};<br>
<br>
StreamIn(SF_RTF | SFF_SELECTION, es);<br>
}</font>
<small>
<br>
<p>关于读RTF的方法也可类似实现。</p>
</small>
<p>
</td>
</tr>
<tr>
<td width="100%" height="12" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="6" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="8" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="17" class="font" colspan="2"></td>
</tr>
</table>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -