当前位置:C++技术网 > 资讯 > 完美记事项目:8 CRichEditCtrl类的一般、剪贴板、OLE操作

完美记事项目:8 CRichEditCtrl类的一般、剪贴板、OLE操作

更新时间:2015-06-26 14:12:01浏览次数:1+次

CRichEditCtrl类部分成员函数说明

一般操作

GetModify  确定在最后一次保存后CRichEditCtrl对象的内容是否已经被改变了 
SetModify  为CRichEditCtrl对象设置或清除修改标志 
FindText   在CRichEditCtrl对象中定位文本 
GetRect    为CRichEditCtrl对象获取格式化矩形 
SetRect    为CRichEditCtrl对象设置格式化矩形 
GetCharPos     确定CRichEditCtrl对象中的一个给定字符的位置 
SetOptions     为CRichEditCtrl对象设置选项 
SetReadOnly    为CRichEditCtrl对象设置只读选项 
GetTextLength  获取CRichEditCtrl对象中的文本的长度 
GetLimitText   获取一个用户可以输入CRichEditCtrl对象的文本数量的限制 
LimitText      限制一个用户可以输入CRichEditCtrl对象的文本数量 
GetEventMask   获取CRichEditCtrl对象的事件掩码 
SetEventMask   设置CRichEditCtrl对象的事件掩码 
RequestResize  强迫CRichEditCtrl对象发送请求改变大小的通知 
SetBackgroundColor 设置CRichEditCtrl对象中的背景颜色 
SetTargetDevice 设置CRichEditCtrl对象的目标输出设备 
FormatRange     为目标输出设备格式化一个文本范围 
DisplayBand     显示CRichEditCtrl对象的一部分内容 

剪贴板操作

Copy  将当前选项拷贝到剪贴板上 
Cut   将存取选择剪下到剪贴板上 
Paste 剪贴板上的内容插入到此带格式编辑控件中 
PasteSpecial 将剪贴板上的内容按指定的数据格式插入到此带格式编辑控件中 
CanPaste     确定剪贴板上的内容是否可以粘贴到此带格式编辑控件中 

说明
    你可以使用WM_COPY或者WM_CUT消息来拷贝或者剪切当前选中内容。同样的,你可以使用WM_PASTE消息将这些剪贴板内容粘贴到一个Rich Edit控件中。控件将粘贴它所识别的第一个可用格式,这大概是最具描述性的格式。
    你可以使用EM_PASTESPECIAL消息来粘贴指定的剪贴板格式。这个消息对具有“特殊粘贴”命令的应用程序很有用,该命令可以让用户选择剪贴板格式。你可以使用EM_CANPASTE消息来决定控件是否识别某种指定的格式。
    你也可以使用EM_CANPASTE消息来决定Rich Edit控件是否识别所有可用的剪贴板格式。该消息在处理WM_INITMENUPOPUP消息时很有用。应用程序可以启用或者屏蔽“粘贴”命令,取决于控件是否可以粘贴任一个可用类型。
Rich Edit控件注册两种剪贴板格式:“富文本格式(RTF)”和一种叫做“RichEdit 文本与对象”的格式。应用程序可以使用RegisterClipboardFormat函数来注册这些格式,其取值为CF_RTF与CF_RETEXTOBJ。


OLE操作 

GetIRichEditOle 为此带格式编辑控件获取一个指向IrichEdit Ole接口的指针 
SetOLECallback  为此带格式编辑控件设置IrichEditOleCallback COM对象 

说明
    有时候,我们需要在一个容器中插入各种不同的对象,比如,聊天对话框里可以插入各种静态和动态的图片,甚至还可以插入flash文件,这些都是通过OLE技术来实现的.
    RichEdit要嵌入ole objects必须要继承 IRichEditOleCallback 接口,这个接口让richEdit能够增加RichEdit对Ole的嵌入支持。
 
    首先在RichEdit的OnCreate中调用SetOLECallback函数,这样就设置了IRichEditOleCallback的接口实现者。 

//设置OLECallBack接口,让richEdit能够插入显示ole控件   
BOOL bSuccess=SetOLECallback(this); 
 

    在OnCreate中,还要记得注册 ole剪贴板格式,这个格式是我们自己定的,在处理复制和粘贴的时候,需要用到它。

//注册自己的ole 剪贴板格式   
#define STR_OWN_OLE_CLIPBOARD_FORMAT _T("STR_OWN_OLE_CLIPBOARD_FORMAT") m_uOwnOleClipboardFormat = RegisterClipboardFormat(STR_OWN_OLE_CLIPBOARD_FORMAT); 

这个接口的几个必须实现的接口函数:
(1) GetNewStorage()它为一个来自剪贴板粘贴的对象提供新的存储。
(2) QueryInsertObject() 它处理来自ole object的插入请求,如果同意插入,就返回S_OK,否则返回E_NOTIMPL在这个里面可以判断是否是自己需要的类型,如果不是,就可以拒绝插入。
(3) DeleteObject ()它处理删除ole  obj的请求,直接返回E_NOTIMPL即可。
(4) GetClipboardData()在这个地方处理复制或拖拽创建一个DataSource对象,将自己处理过的数据,存入ole 剪贴板,最好获得DataSource对象的 IDataObject接口,将它赋值给lpchrg参数
(5) QueryAcceptData()当有粘贴操作或者拖放操作的时候,询问是否应该接受这些操作。可以在这里处理粘贴和拖放,然后解析来自ole 剪贴板的数据,然后把他输出到richedit中。这些ole 剪贴板中的数据,是在GetClipboardData中写入的。
(6) GetContextMenu()这个函数处理右键菜单。