码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于CefSharp开发浏览器(十)CefSharp.Wpf中文输入法偏移处理


    合集 - WebBrowser(11)
    1.基于CefSharp开发浏览器(一)项目搭建2020-11-022.基于CefSharp开发浏览器(二)自定义浏览器窗体2020-11-043.基于CefSharp开发浏览器(三)浏览器头部优化2020-11-054.基于CefSharp开发浏览器(四)浏览器文件下载2020-11-075.基于CefSharp开发浏览器(五)浏览器菜单2020-12-046.基于CefSharp开发浏览器(六)浏览器网页缩放2020-12-077.基于CefSharp开发浏览器(七)浏览器收藏夹菜单2021-01-128.基于CefSharp开发浏览器(八)浏览器收藏夹栏2021-03-029.基于CefSharp开发浏览器(九)浏览器历史记录弹窗面板2021-03-11
    10.基于CefSharp开发浏览器(十)CefSharp.Wpf中文输入法偏移处理01-25
    11.基于CefSharp开发浏览器(十一)增添F11、F12功能01-25
    收起

    一、前言

    两年多来未曾更新博客,最近一位朋友向我咨询中文输入法问题。具体而言,他在使用CefSharp WPF版本时遇到了一个问题,即输入法突然出现在屏幕的左上角。在这里记录下处理这个问题的过程,希望能够帮助到其他遇到类似问题的开发者。让我们一起来探讨如何解决能更好的处理CefSharp WPF版本中的中文输入法显示问题。

    二、WpfImeKeyboardHandler

    在https://github.com/cefsharp/cefsharp 上查看了关于CefSharp的Issues,搜索IME(Input Method Editor 输入法编辑器),可以看到一些 Chinese IME相关的问题

     点击第一个链接找到了一个源码关于cefsharp fix chinese IMES的提交记录

    仅展示关键代码,使用方式如下:

    复制代码
        public class CustomWebBrowser : ChromiumWebBrowser
        {
            public CustomWebBrowser()
            {
                this.WpfKeyboardHandler = new WpfImeKeyboardHandler(this);
            } 
        }

    复制代码

    虽然官方提供了关于WpfImeKeyboardHandler的处理方法,但在我的测试中,效果并不理想,仍然存在输入法位置偏移的情况。可能是我使用的方式不对,也有可能是官方并未覆盖某些特定情境。

    如果有哪位朋友通过上述方式成功解决了中文输入法问题,不妨留言分享一下,这将对我和其他遇到相似问题的开发者都是极大的帮助。

    三、CefSharp.Wpf.HwndHost

    在浏览 CefSharp 仓库时,我注意到了 CefSharp.Wpf.HwndHost,并且红框中的说明引起了我的关注,特别是关于 IME支持的部分。

    IME 支持可能是为了解决输入法相关的问题。

    下载CefSharp.Wpf.HwndHost 仓库,运行如下:

    效果来看基于HwndHost解决了输入法框偏移的问题。

    与此同时使用HwndHost也会带来一些问题,如:

    • 需要遵守“空域规则”,即 WPF 和 Win32 的内容必须总是使用它们自己的不同窗口区域,不能重叠或遮挡。
    • 需要处理一些复杂的细节,如键盘焦点、鼠标捕获、消息泵等。
    • 可能会影响 WPF 的布局和渲染,因为 Win32 窗口不是 WPF 的可视化对象,不能使用 WPF 的属性和事件。

     官方的Readme如下:

    翻译如下:

      为那些想要本机基于Win32的实现(用于IME支持和更好的性能)的人设计的替代CefSharp.Wpf.ChromiumWebBrowser。

      该控件使用HwndHost来托管本机CefBrowser实例。

      与任何HwndHost为基础的控制标准空域问题适用。

    • https://docs.microsoft.com/en-us/dotnet/desktop/wpf/advanced/wpf-and-win32-interoperation
    • https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/technology-regions-overview

    四、使用WindowsFormsHost承载CefSharp.WinForms

    下载https://github.com/cefsharp/cefsharp 仓库,测试了CefSharp.WinForms

    运行结果来看CefSharp.WinForms可以更好的支持中文输入法。

     

    当然WPF通过WindowsFormsHost来承载Winform窗体同样也会带来以下问题:

    • WindowsFormsHost同样需要遵守“空域规则”
    • 需要处理一些复杂的细节,如键盘焦点、鼠标捕获、消息泵等。
    • 可能会影响 WPF 的布局和渲染,不能使用 WPF 的属性和事件。

    五、结尾

    考虑到CefSharp.WinForms和CefSharp.WPF的接口大部分相似,我们在项目中选择使用WindowsFormsHost来承载CefSharp.WinForms,以解决中文输入法的问题。如果有哪位园友有更优的解决方案,欢迎留言分享,让我们共同解决中文输入法的问题。

    六、源码地址

    gitee地址:https://gitee.com/sirius_machao/mweb-browser

    github地址:https://github.com/sirius-chao/MWebBrowser

    项目邀请:如对该项目有兴趣,欢迎联系我共同开发!!!

  • 相关阅读:
    适用于全部安卓手机的 5 大免费 Android 数据恢复
    【uniapp】开发app运行到手机预览(运行到安卓app基座)
    十大开源机器人 智能体
    k8s--架构基础--云控制器管理器
    【174】Java解析文件名中的方括号表达式
    java 常用 jar 包
    工程师如何对待开源 --- 一个老工程师的肺腑之言
    【Redis】redis基本数据类型详解(String、List、Hash、Set、ZSet)
    聊聊客户档案模型的设计与管理
    微服务系列之分布式日志 ELK
  • 原文地址:https://www.cnblogs.com/mchao/p/17985041
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号