⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lion-tut-c33.htm

📁 内有一些代码
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<P align=left><FONT face=Tahoma size=-1>在使用Edit控件时设置文本和背景颜色可能有点问题,但是在RichEdit控件中已经修正了这个问题.要设置RichEdit的背景色,你要发送 <FONT color=#006666><B>EM_SETBKGNDCOLOR</B></FONT> 消息给RichEdit控件.这个消息具有以下语法.</FONT></P>
<P align=left><FONT face=Tahoma size=-1><FONT color=#990033><B>wParam</B></FONT> 
== 颜色选项. 如果是0说明Windows使用 <FONT color=#990033><B>lParam</B></FONT> 中的颜色值作为背景色.如果该参数不为0,Windows使用系统背景色.因为我们要发送该消息来改变背景色,所以我们必须令wParam为0.<BR><FONT color=#990033><B>lParam</B></FONT> == 指定要设置的颜色的 <FONT 
color=#003366><B>COLORREF</B></FONT> 结构,仅当 wParam 为 0 时才有效.</FONT></P>
<P align=left><FONT face=Tahoma size=-1>譬如, 如果我要设置背景为纯蓝色,我需要写入以下代码:</FONT></P><PRE align="left"><FONT face=Tahoma>		<FONT color=#330066><B>invoke SendMessage,hwndRichEdit,EM_SETBKGNDCOLOR,0,0FF0000h</B></FONT></FONT><FONT face=Tahoma></FONT></PRE>
<P align=left><FONT face=Tahoma size=-1>要设置文本颜色,RichEdit控件提供了另外的新消息,<FONT 
color=#660066><B>EM_SETCHARFORMAT</B></FONT>来做这个工作. 这个消息控制控件中一段选定的文本或者全部正文的格式.
这个消息的语法如下:</FONT></P>
<P align=left><FONT face=Tahoma size=-1><FONT color=#0000ff><B>wParam</B></FONT> 
== 格式选项: </FONT></P>
<TABLE align=center border=1 cellPadding=3>
  <TBODY>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SCF_ALL</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>本次操作影响控件中全部文本.</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SCF_SELECTION</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>本次操作仅影响选定的文本</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SCF_WORD or 
      SCF_SELECTION</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>本次操作仅影响所选定的那个单词. 如果选定是空的话,仅将插入点(光标)设置到指定字的位置. <B>SCF_WORD</B> 标志必须跟 <B>SCF_SELECTION</B> 一起使用.</FONT></TD></TR></TBODY></TABLE>
<P align=left><FONT face=Tahoma size=-1><FONT color=#0000ff><B>lParam</B></FONT> 
== <FONT color=#990099><B>CHARFORMAT</B></FONT> 或者 <FONT color=#990099><B>CHARFORMAT2</B></FONT> 结构的指针,说明要使用的正文格式. <FONT color=#990099><B>CHARFORMAT2</B></FONT> 只在 Richedit 2.0 和更高版本才提供.这个不是说在RichEdit 2.0以后你一定要使用 <FONT color=#990099><B>CHARFORMAT2</B></FONT> . 如果你不需要使用到 <FONT color=#990099><B>CHARFORMAT2</B></FONT> 中新加的功能, 你仍然可以使用<FONT color=#990099><B>CHARFORMAT</B></FONT> .</FONT></P>
<BLOCKQUOTE>
  <BLOCKQUOTE><PRE align="left"><FONT face=Tahoma><B><FONT color=#006666>CHARFORMATA STRUCT 
	cbSize DWORD ? 
	dwMask DWORD ? 
	dwEffects DWORD    ? 
	yHeight DWORD ? 
	yOffset DWORD ? 
	crTextColor COLORREF ? 
	bCharSet BYTE ? 
	bPitchAndFamily    BYTE ? 
	szFaceName BYTE LF_FACESIZE dup(?) 
	_wPad2 WORD ? 
CHARFORMATA ENDS </FONT></B></FONT></PRE></BLOCKQUOTE></BLOCKQUOTE>
<TABLE align=center border=1 cellPadding=3>
  <TBODY>
  <TR bgColor=#ccffcc>
    <TH noWrap><B><FONT face="MS Sans Serif" size=-1>Field Name</FONT></B></TH>
    <TH noWrap><FONT face="MS Sans Serif" size=-1>Description</FONT></TH></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>cbSize</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>该结构的大小. RichEdit控件使用该域来判断该结构的版本是 <FONT color=#003366><B>CHARFORMAT</B></FONT> 还是 <FONT color=#000066><B>CHARFORMAT2</B></FONT></FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>dwMask</FONT></B></TD>
    <TD>
      <P><FONT face="MS Sans Serif" size=-1>位标记, 用来指定下面的那些成员是有效的.</FONT></P>
      <TABLE align=center border=1 cellPadding=3>
        <TBODY>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFM_BOLD</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>dwEffects</B></FONT>  成语中的 <FONT color=#000066><B>CFE_BOLD</B></FONT> 值是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFM_CHARSET</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>bCharSet</B></FONT> 成员是有效的。</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFM_COLOR</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>crTextColor</B></FONT> 成员跟 <FONT 
            color=#000066><B>dwEffects</B></FONT>中的 <FONT 
            color=#000066><B>CFE_AUTOCOLOR</B></FONT> 值是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFM_FACE</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>szFaceName</B></FONT> 成员是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFM_ITALIC</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>dwEffects</B></FONT> 成员中的 <FONT 
            color=#000066><B>CFE_ITALIC</B></FONT> 值是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFM_OFFSET</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>yOffset </B></FONT> 成员是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" 
size=-1>CFM_PROTECTED</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>dwEffects</B></FONT> 成员中的 <FONT color=#000066><B> 
            CFE_PROTECTED</B></FONT> 值是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFM_SIZE</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>yHeight</B></FONT> 成员是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" 
size=-1>CFM_STRIKEOUT</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>dwEffects</B></FONT> 成员中的 <FONT 
            color=#000066><B>CFE_STRIKEOUT</B></FONT> 值是有效的.</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" 
size=-1>CFM_UNDERLINE</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1><FONT 
            color=#000066><B>dwEffects</B></FONT> 成员中的 <FONT 
            color=#000066><B>CFE_UNDERLINE</B></FONT> 值是有效的.</FONT></TD></TR></TBODY></TABLE></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>dwEffects</FONT></B></TD>
    <TD>
      <P><FONT face="MS Sans Serif" size=-1>字符效果. 可以是以下值的组合</FONT></P>
      <TABLE align=center border=1 cellPadding=3>
        <TBODY>
        <TR>
          <TD><B><FONT face="MS Sans Serif" 
size=-1>CFE_AUTOCOLOR</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1>使用系统正文颜色</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFE_BOLD</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1>粗体字符</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" size=-1>CFE_ITALIC</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1>斜体字符</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" 
size=-1>CFE_STRIKEOUT</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1>字符带删除线</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" 
size=-1>CFE_UNDERLINE</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1>字符带下划线</FONT></TD></TR>
        <TR>
          <TD><B><FONT face="MS Sans Serif" 
size=-1>CFE_PROTECTED</FONT></B></TD>
          <TD><FONT face="MS Sans Serif" size=-1>字符是受保护的; 企图改变字体会产生一个<FONT 
            color=#000066><B>EN_PROTECTED</B></FONT> 通知消息. 
            </FONT></TD></TR></TBODY></TABLE></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>yHeight</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>字符高度, 单位是 twips ( 1/1440 英寸 或者 1/20 的打印机的打印点). </FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>yOffset</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>字符偏移,单位是 twips, 从基线算起.如果该成员是正值,字符是下标,如果负值,字符是下标.
</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>crTextColor </FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>正文颜色. 如果指定了 CFE_AUTOCOLOR 字符效果,这个值会被忽略.</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>bCharSet</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>字符集</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>bPitchAndFamily</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>Font family and pitch. 
</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>szFaceName </FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>字体名字,是一个空字符结尾的字符数组.</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face=Tahoma size=-1>_wPad2</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>填充</FONT></TD></TR></TBODY></TABLE>
<P><FONT face=Tahoma size=-1>通过检查这个结构,你会发现我们可以改变正文效果(粗体,斜体,删除线,下划线),正文颜色
(<FONT color=#006666><B>crTextColor</B></FONT>) 和字体外观/大小/字符集. 值得注意的是 <FONT color=#666600><B>CFE_RPOTECTED</B></FONT> 标志. 具有该标志的正文会被标志上受保护标志,意味着当用户试图改变它时, <FONT color=#666600><B>EN_PROTECTED</B></FONT> 这个通知消息会被发送到父窗口.同时你可以允许该更改是是否可以进行.</FONT></P>
<P><FONT face=Tahoma size=-1><B><FONT color=#006666>CHARFORMAT2</FONT></B> 增加更多的正文风格,象字体权值,间距,正文背景色,字距调整等等.如果你不需要这些额外的功能,只要使用 <FONT 
color=#006666><B>CHARFORMAT</B></FONT>即可. </FONT></P>
<P><FONT face=Tahoma size=-1>要设置正文格式,你必须考虑你想要该格式应用到的正文的范围.RichEdit控件引入了字符正文范围的概念.RichEdit 分派给每个字符一个从0开始数字值:控件中的第一个字符具有数字ID值为0,第二个为1...等等。要说明一个正文范围,你必须提供给RichEdit控件两个数值:范围的第一个和最后一个字符的ID值。要跟 <FONT color=#000066><B>EM_SETCHARFORMAT</B></FONT> 一起应用字符格式,你有最多3种选择: </FONT></P>
<OL>
  <LI><FONT face=Tahoma size=-1>应用于控件中的所有正文。 (<FONT 
  color=#006666><B>SCF_ALL</B></FONT>)</FONT> 
  <LI><FONT face=Tahoma size=-1>应用于当前选定的正文。 (<FONT 
  color=#006666><B>SCF_SELECTION</B></FONT>)</FONT> 
  <LI><FONT face=Tahoma size=-1>应用于当前选定的一个单词。
  (<FONT color=#006666><B>SCF_WORD</B></FONT> 或者 <FONT 
  color=#006666><B>SCF_SELECTION</B></FONT>)</FONT> </LI></OL>
<P><FONT face=Tahoma size=-1>第一、二种情况是直观的,最后一个选择需要一点解释。如果当前选择只覆盖了词中的一个或多个字符但是不是整个词,指定 <FONT color=#006666><B>SCF_WORD</B></FONT>+<FONT 
color=#006666><B>SCF_SELECTION</B></FONT> 标志将正文格式应用于整个单词。即使没有当前选定,只有插入点(光标)位于单词中,第三种情况下仍然会将正文格式应用到整个单词中。</FONT></P>
<P><FONT face=Tahoma size=-1>要使用 <FONT 
color=#006666><B>EM_SETCHARFORMAT</B></FONT>, 你需要填充 <FONT color=#006666><B>CHARFORMAT</B></FONT> (或者 <FONT color=#006666><B>CHARFORMAT2</B></FONT>) 结构的结果成员。譬如,如果我们要设置正文颜色,需要如下一样填充 <FONT color=#006666><B>CHARFORMAT</B></FONT> 结构:</FONT></P><PRE><FONT face=Tahoma><B><FONT color=#000066>.data?
	cf CHARFORMAT &lt;&gt;
....
.code
	mov cf.cbSize,sizeof cf
	mov cf.dwMask,CFM_COLOR
	mov cf.crTextColor,0FF0000h
	invoke SendMessage,hwndRichEdit,EM_SETCHARFORMAT,SCF_ALL,addr cf</FONT></B></FONT></PRE>
<P><FONT face=Tahoma size=-1>以上的代码片段设置RichEdit控件的正文颜色为纯蓝色。注意当 <FONT color=#006666><B>EM_SETCHARFORMAT</B></FONT> 发生时,如果控件中没有正文,在这个消息之后键入的正文将会使用消息 <FONT color=#006666><B> EM_SETCHARFORMAT</B></FONT> 中指定的正文格式。<BR></FONT></P>
<H3><FONT color=#000099 face="Times New Roman, Times, serif">设置正文/保存正文</FONT></H3>
<P><FONT face=Tahoma size=-1>对于那些经常使用Edit控件的人来说,你们肯定对使用 <FONT color=#006666><B>WM_GETTEXT</B></FONT>/<FONT color=#006666><B>WM_SETTEXT</B></FONT> 来设置/保存 控制中的正文的方法很熟悉。这个方法对RichEdit仍然适用,但是如果文件很大的话这个方法不再是最有效的。Edit控件限制了正文长度,可以输入最多64K的正文。但是RichEdit控件可以接受比这个限制大的多的正文数据。要分配一个很大的内存块(譬如大约 10MB ) 来接受来自来自<FONT color=#006666><B>WM_GETTEXT</B></FONT> 消息的正文是一件很麻烦的事. Richedit 控件为此提供了一个新的方法,就是 正文流(Text Streaming)。</FONT></P>
<P><FONT face=Tahoma size=-1>要设置RichEdit文本,你只需给RichEdit简单的提供一个回调函数的地址,当一切准备好时,RichEdit 会调用回调函数,并将正文缓冲区的地址传递给它。回调函数会将要发送给RichEdit的数据填入缓冲区或者将缓冲区的数据读出,然后等待下一次调用自到操作完成。 范例程序是流入(设置正文)和流出(取出正文)两者的例子。你将会发现这个方法更加有效:这个缓冲区是RichEdit控件自己提供的,因此数据被分成了几个大块。这个操作包括两条消息: <FONT color=#006666><B> EM_STREAMIN</B></FONT> 和 <FONT color=#006666><B>EM_STREAMOUT</B></FONT>。</FONT></P>
<P><FONT face=Tahoma size=-1><FONT color=#006666><B>EM_STREAMIN 
</B></FONT> 和 <FONT color=#006666><B>EM_STREAMOUT</B></FONT> 两者使用同一个语法:</FONT></P>
<P><FONT face=Tahoma size=-1><FONT color=#0000ff><B>wParam</B></FONT> == 
格式选项.</FONT></P>
<TABLE align=center border=1 cellPadding=3>
  <TBODY>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SF_RTF</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>数据是RTF格式。</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SF_TEXT</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>数据是简单正文格式。</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SFF_PLAINRTF</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>只有那些对所有语系都共有的关键词才流入。</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SFF_SELECTION</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>如果指定这个标志,流操作的目标就是当前选定的正文。如果你将正文流入,当前正文就会被替换,如果是流出,则只有那些当前选定的正文才流出。如果没有指定这个标志,操作就会影响到控件中的所有正文。</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>SF_UNICODE</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>(RichEdit 2.0 或更高版本才提供)指定的是 Unicode 正文。</FONT></TD></TR></TBODY></TABLE>
<P><FONT face=Tahoma size=-1><FONT color=#0000ff><B>lParam</B></FONT> == 指向一个 <FONT color=#006666><B>EDITSTREAM</B></FONT> 结构,该结构定义如下:</FONT><FONT face=Tahoma size=-1></FONT></P><PRE><FONT face=Tahoma> <FONT color=#006666><B>EDITSTREAM STRUCT 
	dwCookie DWORD    ? 
	dwError DWORD ? 
	pfnCallback DWORD ? 
EDITSTREAM ENDS</B></FONT></FONT><FONT face=Tahoma size=-1></FONT></PRE>
<TABLE align=center border=1 cellPadding=3>
  <TBODY>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>dwCookie</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>应用程序定义的数值,将会被传递给由 <FONT 
      color=#000066><B>pfnCallback</B></FONT> 成员说明的回调函数。通常地我们传递一些重要的参数值给回调函数,譬如流入/流出 处理中使用到的文件句柄。</FONT></TD></TR>
  <TR bgColor=#ffffcc>
    <TD><B><FONT face="MS Sans Serif" size=-1>dwError</FONT></B></TD>
    <TD><FONT face="MS Sans Serif" size=-1>指示流入(读)或流出(写)操作的结果。0说明没有错误。非0值可以是 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -