输入法编程之 光标跟随

全面解读WM_NOTIFY     摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正。    控件通知消息    在《深度解析VC中的消息(上)》中,我们提到了消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。    控件通知消息,是指这样一种消息,一个窗口内的子 阅读详情

   光标跟随是输入法系统最常见的特性。要实现这一特性,需要获取IME支持程序(最常见如word,notepad等)中插入符号caret的坐标位置。在Windows的IME环境中,可以通过使用IME核心数据结构INPUTCONTEXT的cfCompForm成员来获取IME宿主程序中文本光标位置。cfCompForm具有如下结构:
typedef tagCANDIDATEFORM { //列表窗口信息
//由IMC_GETCANDIDATEPOS和IMC_SETCANDIDATEPOS消息处理
DWORD dwIndex; //列表窗口序号
DWORD dwStyle; //属性:
//=CFS_CANDIDATEPOS 指定显示位置
//=CFS_EXCLUDE 不可显示
//=CFS_DEFAULT 根据需要显示
POINT ptCurrentPos; //坐标位置
REC rcArea; //不可显示区
} CANDIDATEFORM;

其中ptCurrentPos就是我们需要的光标位置,不过因为这是客户区的坐标,需要转化为屏幕坐标才能使用。要使得输入法上下文结构INPUTCONTEXT中已经填入了正确的坐标位置,需要实现WM_IME_NOTIFY消息响应事件。在WM_IME_NOTIFY消息的子消息IMN_SETCOMPOSITIONWINDOW(设置编码窗口消息)被触发时,系统会返回正确的坐标位置。WM_IME_NOTIFY消息响应函数类似如下形式:
/*
 * IMENotifyHandle():                                     

中文输入法光标跟随能力触发的浏览器事件探究 一套操作下来,这套中文输入法光标跟随的功能算是完美实现了。回顾一下我们解决这个问题所趟过的坑,实际上也反映着浏览器 JS DOM 标准在不断进化,不断补足历史遗留的坑点。当然,它还远远称不上完美,仍然存在大量的能力缺失,如我们在这个问题中遇到的判断光标偏移量的解决方案,本质上还是一种 hack。而扩展 JS 的能力边界,使其变得更强大,更好用,这正是我们作为前端开发人员需要努力的方向。 阅读详情

相关推荐

WPF 自定义文本框输入法 IME 跟随光标

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,从底层开始开发的文本库的伙伴。在开始之前,期望了解了文本库开发的基础知识 本文实现的效果如下 实现 本文的方法参考了 WPF 官方仓库的逻辑,可以在 WPF 仓

pythonxxoo的博客 1715

全面解读通知消息WM_NOTIFY

消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。

milanleon的专栏 2756

JetBrains Runtime补丁解决Ubuntu下PyCharm中文输入法光标跟随问题

JetBrains Runtime(JBR)是 JetBrains 基于 OpenJDK 深度定制的专用 Java 运行时环境,专为提升其 IDE(如 IntelliJ IDEA、PyCharm 等)在多平台下的用户体验而设计。不同于标准 OpenJDK,JBR 针对 GUI 渲染、字体显示、高 DPI 缩放及输入法交互等关键环节进行了系统级优化。Linux平台上的输入法机制远比Windows或macOS复杂,其根本原因在于图形界面系统的模块化设计和历史演进路径的多样性。

weixin_36064575的博客 1065

IME消息、函数、命令、需要的数据结构、常量

IME消息  以下列出IME中用到的消息。WM_IME_CHAR(IME得到了转换结果中的一个字符)WM_IME_COMPOSITION(IME根据用户击键的情况更改了按键组合状态)WM_IME_COMPOSITIONFULL(IME检测到按键组合窗口的区域无法继续扩展)WM_IME_CONTROL(由应用程序直接向IME发出控制请求)WM_IME_ENDCOMPOSITION(IME完成了对用户...

weixin_30583563的博客 712

输入法编辑器(IME)编程指南

输入法编辑器(IME)编程指南   以下是IME编程中需要用到的几项基本组成元素:   •  IME函数    •  IME消息    •  IME命令    •  IME结构   •  IME常量 IME函数   本节列出了所有IME函数。 函数 说明 EnumInputContext 由应用程序定义的,提供给ImmEn

trandy的专栏 1万+

输入法信息捕获总结

输入法信息捕获相关的消息有WM_IME_SETCONTEXT、WM_IME_SELECT和WM_IME_NOTIFY。WM_IME_SETCONTEXT为文本框激活后输入法上下文激活的消息,WM_IME_SELECT为输入法改变的消息,WM_IME_NOTIFY为输入法相关通知消息,根据wParam区分不同的消息,其中IMN_OPENCANDIDATE为候选项打开,IMN_CHANGECANDIDATE为候选项改变,IMN_CLOSECANDIDATE为候选项关闭。 通过Hook GetMes

Matrix_Designer的专栏 4111

Ubuntu安装搜狗输入法及Qt Creator中文输入优化指南

在Linux开发环境中,中文输入法的配置是开发者常遇到的基础需求。输入法框架作为系统与输入法之间的桥梁,其工作原理涉及环境变量配置、动态库加载等底层机制。以Ubuntu系统为例,fcitx框架因其对Qt等GUI工具链的完善支持,成为替代默认ibus的首选方案。通过正确处理依赖关系、配置输入法模块,不仅能实现搜狗输入法的词库和云输入优势,还能显著提升Qt Creator等IDE的中文输入体验。本文以Ubuntu 22.04和Qt Creator 12.0.1为典型环境,详细解析从框架切换、依赖冲突解决到性能调

aaa1231722的博客 410

使用 electronjs 实现 ibus 输入法的用户界面

ibus 输入法框架自带一套用户界面, 但是从灵活程度和可扩展的角度考虑, 最好还是另外想办法实现用户界面, 而不是用 ibus 自带的这个. 在桌面 (PC) 平台制作图形用户界面, 有很多很多种具体的技术可供选择. 但是窝觉得, 其中最简单的方式就是使用 electronjs.

穷人小水滴的博客 1559

Android输入法候选窗口显示机制:从生命周期到光标跟随的完整实现

输入法服务(IME Service)是Android系统中管理文本输入的核心组件,它通过InputMethodService框架与应用编辑器进行通信。其工作原理涉及视图系统、焦点管理和窗口定位的协同,技术价值在于为用户提供流畅、准确的输入体验。在语音输入、智能预测等应用场景中,候选窗口的显示逻辑尤为关键,它需要根据InputConnection和EditorInfo动态计算位置,确保与光标或输入焦点同步。本文聚焦于候选窗口不显示、位置错乱等典型问题,深入解析onStartInputView、onUpdate

weixin_30321709的博客 401

linux下SublimeText的中文输入法问题之解决方案

推荐使用dev版: http://www.sublimetext.com/dev 先说说中文显示的问题: 找一个支持中文显示的字体,然后修改配置 Preference - File Settings - user: { "font_face": "DejaVu Sans YuanTi Mono" } 注:只能改user的,改Default的没效的。   Sublime...

weixin_34007291的博客 80

IME输入法编程心得

自然语言处理的输入法作业成品没有做出来,但不想再在蛋疼的Win32上面耗费时间了,整理文档,记录一下心得,新手再来研究也不会迷路太远。1. IME简介2. IME结构3. IME调试环境配置及安装3.1. 配置步骤3.2. 配置说明及注意事项3.3. IME安装及卸载4. IME编程心得4.1. 准备工作4.2. IME数据结构介绍4.3. IME接口调用顺序4.4. 感想 1       IME...

yousss的博客 2761

输入法编辑的一些资料

windows系统提供的管理函数(Input Method Manager,简称IMM)。IMM函数可以被IME函数使用,也可用于应用软件直接管理IME。相关术语:(1)input method context 简称IMC--输入法相关部分,在这里解释为:相关连的应用程序(进程)(2)component of the input context 简称IMCC--IMC的部件,是IN

gglike的专栏 1233

IME消息

在UI窗口下需要处理下列windows消息.WM_IME_SETCONTEXT激活或休眠输入法:如果fSet为TRUE,系统将激活当前输入法的某个窗口(状态窗、列表窗等),为FALSE时休眠当前输入法.其中lISCBits中指出对哪个窗口操作。 数值 含义

千金甜果的专栏 4460

关于WM_NOTIFY的使用方法

WM_NOTIFY在WIN32中得到大量的应用,同时也是随着CommControl的出现WM_NOTIFY成为了CommControl的基本消息。可以这样说CommControl的所有的新增特性都通过WM_NOTIFY来表达。同时WM_NOTIFY也为CommControl的操作带来了一致性。 WM_NOTIFY消息中的参数如下: idCtrl = (int) wParam; pnmh

电脑翻译官的专栏 1706

输入法弹窗位置

[DllImport("imm32.dll")] publicstaticexternboolImmGetOpenStatus(IntPtrhIMC); [DllImport("imm32.dll")] publicstaticexternIntPtrImmGetContext(IntPtrhWnd...

weixin_30478757的博客 419
上一篇: 感悟生活之-工作
下一篇: 多文档话题跟踪展示技术的有趣实现
sharpdew
博客等级 码龄23年 76粉丝 35原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值