自写的文本框 输入法框跟随光标 实现方法

2023-12-11 04:38

本文主要是介绍自写的文本框 输入法框跟随光标 实现方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



    主要响应 WM_IME_COMPOSITION 消息,在此设置输入法框的位置



    SDI   视图类中没有WM_IME_COMPOSITION消息,所以,需要自己在PreTranslateMessage 中设置


   

	//输入法跟随LRESULT OnImeStartComposition(WPARAM wParam,LPARAM lParam);

LRESULT OnImeStartComposition(WPARAM wParam, LPARAM lParam)
{HIMC hIMC = ::ImmGetContext(m_hWnd);COMPOSITIONFORM CompForm;CompForm.dwStyle=CFS_POINT;CompForm.dwStyle=CFS_POINT;int nx = 200;int  ny = 200;if (pCurrentElem){Word *pCurWord = (Word*)pCurrentElem;nx = pCurWord->Left;ny = pCurWord->Bottom;}CompForm.ptCurrentPos.x=nx;// 实际的值CompForm.ptCurrentPos.y=ny;//用实际的值代替::ImmSetCompositionWindow(hIMC, &CompForm);::ImmReleaseContext(m_hWnd,hIMC);//HIMC hIMC  = ::ImmGetContext(m_hWnd);//COMPOSITIONFORM CompForm;//CompForm.dwStyle  = CFS_POINT;//CompForm.ptCurrentPos.x  = 10;//用实际的值代替//CompForm.ptCurrentPos.y  = 10;//用实际的值代替//::ImmSetCompositionWindow(hIMC, &CompForm);DropCaret();可在此处隐藏光标,在OnImeEndComposition消息处理中再显示光标//::ImmReleaseContext(m_hWnd, hIMC);return ::DefWindowProc(m_hWnd,WM_IME_STARTCOMPOSITION, wParam, lParam);
}


BOOL PreTranslateMessage(MSG* pMsg)
{// TODO: 在此添加专用代码和/或调用基类if (m_hAccelerator)if (::TranslateAccelerator(this->m_hWnd, m_hAccelerator, pMsg))return(TRUE);//输入法的跟随功能  响应三个消息 WM_IME_STARTCOMPOSITION;WM_IME_ENDCOMPOSITION;WM_IME_COMPOSITION;switch (pMsg->message){case WM_IME_STARTCOMPOSITION:{OnImeStartComposition(pMsg->wParam, pMsg->lParam);}
 



至此,就完成了


TXT有声大屏阅读软件,告一段落,已经可以非常友好的使用了。



   


下载地址:   古典小说网


这篇关于自写的文本框 输入法框跟随光标 实现方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/479472

相关文章

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Redis实现分布式锁全过程

《Redis实现分布式锁全过程》文章介绍Redis实现分布式锁的方法,包括使用SETNX和EXPIRE命令确保互斥性与防死锁,Redisson客户端提供的便捷接口,以及Redlock算法通过多节点共识... 目录Redis实现分布式锁1. 分布式锁的基本原理2. 使用 Redis 实现分布式锁2.1 获取锁

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功