庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>安全技术>软件破解>反汇编>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

RichEdit 控件基础知识

 作者:本站收集   日期:2005-5-26
字号选择〖 〗/ 双击滚屏 单击停止   
理论

A richedit control can be thought of as a souped-up edit control. 它提供了普通简单Edit控件所缺少的很多令人合意的功能,譬如可以使用多种字体和字体大小,多级Undo/Redo,文本搜索,内嵌OLE对象,编辑的拖放支持等等。由于RichEdit控件有这么多功能,因此它独存于一个单独的DLL文件。这个意味着如果你要使用RichEdit控件,就不能象使用其他普通控件那样只调用InitCommonControls 函数。你必须先使用 LoadLibrary 来载入RichEdit DLL文件。

这里有个问题,就是至今为止RichEdit控件共有3个版本,版本1,2和3。下面的表格显示了每个版本的相应的DLL文件名。

DLL Name RichEdit version Richedit Class Name
Riched32.dll 1.0 RICHEDIT
RichEd20.dll 2.0 RICHEDIT20A
RichEd20.dll 3.0 RICHEDIT20A

你会注意到版本2和3都使用了相同的DLL文件名,而且它们也使用了相同的类名!这样在你想要明确的使用RichEdit 3.0的功能的时候就会产生问题. 到目前为止,我还找到一个正式的方法来区分版本2.0和3.0.不过,有个解决方法工作良好,我会在后面演示给你看.

.data
   RichEditDLL db "RichEd20.dll",0
.....
.data?
hRichEditDLL dd ?
.code
invoke LoadLibrary,addr RichEditDLL
mov hRichEditDLL,eax
......
invoke FreeLibrary,hRichEditDLL

当Richedit DLL文件被载入时,它会注册 RichEdit 窗口类,因此需要在你创建Richedit控件之前必须先要载入DLL.Richedit控件的类名是不同的。现在你可能会有一个问题要提:我怎么样才能够知道我要使用哪个版本的Richedit控件?如果你不需要使用那些特别的功能,使用最新的版本也不定是最适宜的.下面的表格列出了每个RichEdit版本提供的功能.

功能 版本 1.0 版本 2.0 版本 3.0
选择条
x
x
x
Unicode 编辑
x
x
字符段落格式
x
x
x
文本搜索
向前搜索
向前/向后搜索
向前/向后搜索
内嵌OLE
x
x
x
拖放编辑
x
x
x
Undo/Redo
单级
多级
多级
自动 URL 识别
x
x
加速键支持
x
x
非窗口操作
x
x
分行符
CRLF
CR
CR (可以模拟1.0版本)
Zoom
x
Paragraph numbering
x
simple table
x
normal and heading styles
x
underline coloring
x
hidden text
x
font binding
x

上面的表格不是全面的:我只是列出了那些重要的功能.

创建RchEdit 控件

载入DLL文件后,你可以调用CreateWindowEx 来创建RichEdit控件,创建控件时你可以使用Edit控件风格和普通窗口风格,但是ES_LOWERCASE, ES_UPPERCASE 和 ES_OEMCONVERT 风格除外.

.const
	RichEditID equ 300
.data
	RichEditDLL db "RichEd20.dll",0
RichEditClass db "RichEdit20A",0 ... .data?
hRichEditDLL dd ? hwndRichEdit dd ? .code ..... invoke LoadLibrary,addr RichEditDLL mov hRichEditDLL,eax
invoke CreateWindowEx,0,addr RichEditClass
,WS_VISIBLE or ES_MULTILINE or WS_CHILD or WS_VSCROLL or WS_HSCROLL, \ CW_USEDEFAULT,CW_USEDEFAULT
,CW_USEDEFAULT,CW_USEDEFAULT,hWnd,RichEditID,hInstance,0 mov hwndRichEdit,eax

设置缺省的文本和背景颜色

在使用Edit控件时设置文本和背景颜色可能有点问题,但是在RichEdit控件中已经修正了这个问题.要设置RichEdit的背景色,你要发送 EM_SETBKGNDCOLOR 消息给RichEdit控件.这个消息具有以下语法.

wParam == 颜色选项. 如果是0说明Windows使用 lParam 中的颜色值作为背景色.如果该参数不为0,Windows使用系统背景色.因为我们要发送该消息来改变背景色,所以我们必须令wParam为0.
lParam == 指定要设置的颜色的 COLORREF 结构,仅当 wParam 为 0 时才有效.

譬如, 如果我要设置背景为纯蓝色,我需要写入以下代码:

		invoke SendMessage,hwndRichEdit,EM_SETBKGNDCOLOR,0,0FF0000h

要设置文本颜色,RichEdit控件提供了另外的新消息,EM_SETCHARFORMAT来做这个工作. 这个消息控制控件中一段选定的文本或者全部正文的格式. 这个消息的语法如下:

wParam == 格式选项:

SCF_ALL 本次操作影响控件中全部文本.
SCF_SELECTION 本次操作仅影响选定的文本
SCF_WORD or SCF_SELECTION 本次操作仅影响所选定的那个单词. 如果选定是空的话,仅将插入点(光标)设置到指定字的位置. SCF_WORD 标志必须跟 SCF_SELECTION 一起使用.

lParam == CHARFORMAT 或者 CHARFORMAT2 结构的指针,说明要使用的正文格式. CHARFORMAT2 只在 Richedit 2.0 和更高版本才提供.这个不是说在RichEdit 2.0以后你一定要使用 CHARFORMAT2 . 如果你不需要使用到 CHARFORMAT2 中新加的功能, 你仍然可以使用CHARFORMAT .

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 
Field Name Description
cbSize 该结构的大小. RichEdit控件使用该域来判断该结构的版本是 CHARFORMAT 还是 CHARFORMAT2
dwMask

位标记, 用来指定下面的那些成员是有效的.

CFM_BOLD dwEffects 成语中的 CFE_BOLD 值是有效的.
CFM_CHARSET bCharSet 成员是有效的。
CFM_COLOR crTextColor 成员跟 dwEffects中的 CFE_AUTOCOLOR 值是有效的.
CFM_FACE <FONT face="MS Sans Ser

上一篇:ODBC 一个例子    下一篇:RichEdit 控件:更多的正文操作  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-5-26
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿