
可以使用CreateWindow创建Richedit组件,也可以使用对话框模板资源在创建对话框时自动创建richedit.
在使用richedit组件之前,您需要使用LoadLibrary(“ RichEd20.dll”),因为richedit保存为单独的dll. 如果未提前调用此功能,则可能不会显示该组件. Richedit有多种版本. RICHED20.DLL代表2.0和3.0 dll,而RICHED32.DLL代表1.0版本. 通常,2.0版可以使用大多数功能.
对话框资源模板:
DLG_MAINDIALOGEX6,5,265,285
STYLEDS_3DLOOK | DS_CENTER | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_GROUP | WS_MAXIMIZEBOX | WS_POPUP | WS_THICKFRAME | WS_SYSMENU | WS_TABSTOP
EXSTYLEWS_EX_WINDOWEDGE
CAPTION“记事本”
MENUIDR_MENU1
CLASS“ DLG_MAIN”
FONT12,“ Tahoma”,400,0,0
{
CONTROL“”,IDC_RICHEDIT1,RICHEDIT_CLASS,WS_VSCROLL | NOTWS_BORDER | NOTWS_TABSTOP | ES_MULTILINE | ES_NOHIDESEL | ES_WANTRETURN,0,33,265,230,WS_EX_CLIENTEDGE
}
CONTROL部分是richedit组件的一些属性设置,IDC_RICHEDIT1是组件资源ID标识符,
RICHEDIT_CLASS是richedit组件的窗口类名称. 后者是组件的样式.
2种常见样式:
ES_MULTILINE多行文本模式
ES_WANTRETURN输入键直接更改数字. 默认值为CTRL + Enter.

ES_NOHIDESEL防止RichEdit控件在失去焦点时隐藏所选区域的高光. 通常,在查找字符时,我们希望richedit选择找到的字符.
Richedit有很多新闻. 该msdn有详细的介绍. 这是一些常用的文本编辑.
SendMessage(hwndrich,EM_SETEVENTMASK,0,ENM_SELCHANGE | ENM_MOUSEEVENTS | ENM_CHANGE | ENM_KEYEVENTS | ENM_SCROLL | ENM_DROPFILES)
EM_SETEVENTMASK用于设置richedit以响应那些事件消息. 通过指定参数,它是richedit响应事件,并将消息发送到父窗口进行处理.
ENM_SELCHANGE选择更改
ENM_MOUSEEVENTS鼠标的移动和点击
ENM_KEYEVENTS键盘事件
GETTEXTLENGTHEXlengthstrust = {GTL_NUMCHARS,1200};
SendMessage(hwndrich,EM_GETTEXTLENGTHEX,(WPARAM)和lengthstrust,(LPARAM)0);
EM_GETTEXTLENGTHEX消息,用于获取richedit组件中文本的长度. 消息附带的参数WPARAM是GETTEXTLENGTHEX结构类型,用于确定如何计算编辑器文本的长度.
typedefstruct_gettextlengthex {
DWORDflags;
UINTcodepage;
} GETTEXTLENGTHEX;
Flags的值用于标记应如何计算长度. 例如,GTL_NUMCHARS表示返回的字符数.
代码页通常具有两个值: ANSI代码页CP_ACP,Unicode1200
该方法返回计算出的长度值
SendMessage(hwndrich,EM_REPLACESEL,0,(LPARAM)TEXT(“ \ t”)));

该消息用于替换当前选择的文本. LPARAM是字符指针.
SendMessage(hwndrich,EM_UNDO,0,0);
撤消当前操作
SendMessage(hwndrich,EM_REDO,0,0);
恢复上一次撤消
SendMessage(hwndrich,WM_COPY,0,0);
SendMessage(hwndrich,WM_CUT,0,0);
SendMessage(hwndrich,WM_PASTE,0,0);
用于剪切,复制和粘贴. 这是编辑组件的消息. 还可以使用Richedit.
SendMessage(hwndrich,EM_GETSEL,(WPARAM)和lindex,0);
获取当前选定的起始字符和结束字符的位置,并使用两个DWORD指针进行接收.
SendMessage(hwndrich,EM_EXGETSEL,0,(LPARAM)和CHARRANGE);
此消息还会获取当前选择的字符位置,但是它使用CHARRANGE结构来保存选择范围.
typedefstruct_charrange {
LONGcpMin;
LONGcpMax;
} CHARRANGE;
结构成员分别指示开始位置和结束位置.

SendMessage(hwndrich,EM_GETSELTEXT,0,(LPARAM)缓冲区);
获取当前选择的字符文本. 缓冲区是用于接收所选文本的字符缓冲区的数组.
SendMessage(hwndrich,EM_REPLACESEL,0,(LPARAM)缓冲区);
替换当前选择的文本. 缓冲区存储用于替换选择的字符串.
SendMessage(hwndrich,EM_FINDTEXTEX,(wParam)标志,(LPARAM)和FINDTEXTEX);
在当前richedit中查找文本. flags参数指定搜索条件. LPARAM参数是FINDTEXTEX
包含信息搜索结果.
typedefstruct_findtextex {
CHARRANGEchrg; CHARRANGECHRG; //搜索范围
LPCTSTRlpstrText; LPCTSTRlpstrText; //要查找的字符串
CHARRANGEchrgText; CHARRANGEchrgText; //找到字符串后的选择范围.
} FINDTEXTEX;} FINDTEXTEX;
SendMessage(hwndrich,EM_EXSETSEL,0,(LPARAM)CHARRANGE);
设置Richedit组件选择文本riched32.dll是什么,CHARRANGE指定选择范围,选择部分将突出显示.
需要设置ES_NOHIDESEL,否则该组件失去焦点时将不会突出显示.
CHARFORMATcformat;
SendMessage(hwndrich,EM_GETCHARFORMAT,SCF_SELECTION,(LPARAM)和cformat);
获取当前所选文本的字符格式属性. wParam参数指定选择范围. 它具有两个值: SCF_SELECTION当前选择的字符格式和SCF_DEFAULT默认字符格式.

LPARAM参数是指向CHARFORMAT结构的指针,该结构用于存储接收到的字符属性.
SendMessage(hwndrichriched32.dll是什么,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)和cformat);
用于设置当前选择的文本字符属性. 参数与上面相同,但是需要设置的字符属性存储在CHARFORMAT结构中,主要包括颜色,字体大小,字体名称等.
EDITSTREAMstream;
SendMessage(hwndrich,EM_STREAMOUT,SF_TEXT,(LPARAM)和流);
该消息指定richedit使用流来输出组件的内容. wParam指定输出格式,
有常见格式,例如SF_RTF,SF_TEXT,SF_RTFNOOBJS.
EDITSTREAM结构用于控制输出和输入.
typedefstruct_editstream {
DWORD_PTRdwCookie; //通常是用于流式读写的文件句柄
DWORDdwError; //表示流的读写结果,0表示没有错误
EDITSTREAMCALLBACKpfnCallback; //流读写回调函数,用于控制读写
}编辑流;
EDITSTREAMCALLBACK函数原型:
DWORDCALLBACKSaveStreamCallback(DWORDdwCookie,LPBYTEpbBuff,LONGcb,LONG * pcb)
dwCookie是EDITSTREAM的成员,pbBuff是读写缓冲区LONGcb,它指示要读取和写入的数据的长度. * pcb代表实际的读取和写入长度. * pcb通常不大于cb.
SendMessage(hwndrich,EM_STREAMIN,SF_TEXT,(LPARAM)和流);
指定richedit使用流将内容读取到组件显示中. 参数与上面相同.
PARAFORMATparaformat;
SendMessage(hwndrich,EM_SETPARAFORMAT,0,(LPARAM)和格式);
设置段落文本的格式. 如果选择了多行,请设置多行格式. LPARAM参数是一个PARAFORMAT指针,用于保存格式化的段落信息.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159545-1.html
你真的是不要脸
早安@TFBOYS-易烊千玺