ITextHost::TxNotify 中的 EN_LINK、EN_CHANGE 消息捕捉

本文介绍了如何在ITextHost的派生类CTxtWinHost中,通过Init方法创建并初始化Text Services组件。为了捕获EN_LINK(超链接点击)和EN_CHANGE(文本变化)消息,首先获取RichEdit控件的现有事件掩码,然后添加所需的消息属性,最后将更新的掩码设置回去。通过这种方式,可以实现对富文本编辑框中超链接和文本变化事件的监听。

首先,大体上构造出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);


这样设置以后,做出相应操作时即可捕捉到相应的消息。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值