none
windowless richedit 无法输入中文 RRS feed

  • 问题

  • 环境:WIN10

    RICHEDIT版本:5.50.99.2012

    准备工作:

    我使用了一个directui库,除了主窗口时带句柄之外,其他所有的控件都是windowless的。

    在主窗口上创建了两个windowless richedit,第一个richedit设置使用TSF:

    DWORD dw = SSendMessage(EM_GETEDITSTYLE);
    dw |= SES_USECTF;    //使用TSF
    SSendMessage(EM_SETEDITSTYLE, dw, dw);

    第二个richedi没有设置使用TSF。

    此时两个richedit均可正常使用,可以正常接收用户输入,设置字体格式之类的操作也都是OK的。


    重现步骤:

    1、当第一个richedit(设置了SES_USECTF)获得焦点,并且把输入法设为WIN10自带的微软拼音,richedit可以正常输入。

    2、此时把焦点从第一个richedit切换到第二个richedit(没有设置SES_USECTF),第二个richedit就只能输入中文了,切换输入法也不生效,无法再输入中文。

    3、这时只有把焦点切换到别的应用程序,再把焦点切回第二个richedit才能重新输入中文。

    4、如果两个richedit均设置了SES_USECTF,则不存在上述问题。

    问题:

    由于我自定义的一个控件(不是richedit)也要获得输入法输入,但由于第一个richedit设置了SES_USECTF,并且当焦点从第一个richedit切换到我自定义的控件时,输入法只能输入英文,这就导致了我自定义的控件无法获得正确的输入。

    请问我要怎样才能让我自定义的控件在任何情况下都能接受输入法的输入呢?

    还请各位大神解答。


    2016年11月21日 8:59

全部回复

  • Hi 我是蓝先生,

    感谢在MSDN论坛发帖。

    >>由于我自定义的一个控件(不是richedit)也要获得输入法输入,但由于第一个richedit设置了SES_USECTF,并且当焦点从第一个richedit切换到我自定义的控件时,输入法只能输入英文,这就导致了我自定义的控件无法获得正确的输入。

    请问我要怎样才能让我自定义的控件在任何情况下都能接受输入法的输入呢?

    对于这个情况,我建议你在CRichDrawText构造函数中,我们通过调用CreateTextServices函数创建一个无窗口的RichEdit控件,我们必须向其传递一个ITextHost接口的实现。要实际设置格式化的文本,CRichDrawText提供了两种方法。 SetText用给定的Unicode字符串替换无窗口控件中的所有文本,而Range为无窗口控件中的一系列文本返回一个ITextRange COM接口指针。

    这里有几篇示例,你可以参考使用。

    http://www.codeproject.com/Articles/15906/Using-Windowless-RichEdit-Controls

    http://www.codeproject.com/Articles/372559/DirectUI

    https://msdn.microsoft.com/en-us/library/windows/desktop/bb787609(v=vs.85).aspx

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年11月22日 8:29