首先,大体上构造出ITextHost类的继承关系,如下:
class CTxtWinHost : public ITextHost
{
CRichEditUI *m_re; //RichEdit编辑框控件
ITextServices*pserv;
};
ITextServices* CTxtWinHost::GetTextServices(void) { return pserv; }
BOOL CTxtWinHost::Init(CRichEditUI *re) //创建一个RichEdit控件,然后Init TXTWinHost类
{
IUnknown *pUnk;
HRESULT hr;
m_re = re;
// Create Text Services component
if(FAILED(CreateTextServices(NULL, this, &pUnk)))
return FALSE;
hr = pUnk->QueryInterface(IID_ITextServices,(void **)&pserv);
pUnk->Release();
if(FAILED(hr))
return FALSE;
return TRUE;
}
然后,要想得到TxNotify中的EN_CHANGE消息,首先要添加控件的属性:
得到控件原有的属性:
LRESULT lResult;
CTxtWinHost::GetTextServices()->TxSendMessage(EM_GETEVENTMASK, 0, 0, &lResult);
//声明部分:上面的函数不是静态函数,不可以这样使用,只是简略表现出其中的意思和所属关系,下同
添加新的属性并设置回去:
lResult = lResult | ENM_LINK; //添加控件的超链接属性(点击超链接时发出)
lResult = lResult | ENM_CHANGE; //添加控件的文本变化消息属性(编辑框内文本发送变化时发出)
CTxtWinHost::GetTextServices()->TxSendMessage(EM_SETEVENTMASK, 0, lResult, &lResult);
这样设置以后,做出相应操作时即可捕捉到相应的消息。
本文介绍了如何在ITextHost的派生类CTxtWinHost中,通过Init方法创建并初始化Text Services组件。为了捕获EN_LINK(超链接点击)和EN_CHANGE(文本变化)消息,首先获取RichEdit控件的现有事件掩码,然后添加所需的消息属性,最后将更新的掩码设置回去。通过这种方式,可以实现对富文本编辑框中超链接和文本变化事件的监听。

1517

被折叠的 条评论
为什么被折叠?



