热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

支持输入法变更事件的InputPanel

2019独角兽企业重金招聘Python工程师标准在WindowsMobile编程中,经常会使用到输入法,微软的.netcompactframewo

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 

在Windows Mobile编程中,经常会使用到输入法,微软的.net compact framework中提供了InputPanel控件,该控件是系统全局性的,提供了EnabledChanged事件,在输入法弹出和关闭时触发该事件。

然而,在Windows Mobile软件很小的屏幕下,当输入法弹出后,很多接收输入的控件便会被遮挡住,用户只能在不知道自己输入是否正确的情况下进行输入,简直使用户成为了盲人,用户体验极其之差。

一般情况下,可以通过注册EnabledChanged事件,在其中通过获取Inputpanel的Bounds.Height的到输入法控件遮挡住的范围,然后将该范围内所有的接受输入的控件移到输入法没有遮盖住的区域。

这样做确实能够解决一部分问题,但当用户进行输入发切换的时候,问题又出现了,因为每种输入法面板的大小不不同的,也许上种输入法没有将接受输入的控件遮挡住,而你刚切换的输入法便将其遮盖住了,用户体验问题再次出现。

而在.net compact framework中的InputPanel控件中,并没有提供输入法切换能够触发的事件,怎么办?只好自己写一个输入法控件了,当然,该控件是继承Inputpanel的,否则,我还没那么强大。

控件代码

using System;
using Microsoft.WindowsCE.Forms;

///


/// 支持输入法切换的输入面板
///

public class InputPanelEx : InputPanel
{
    #region Fields

    ///


    /// 当输入法切换时发生。
    ///

    public event EventHandler InputMethodChanged;
    private MsgHook Msg;
    internal class MsgHook : MessageWindow
    {
        #region Fields

        private const int WM_SETTINGCHANGE = 0x001A;
        private InputPanelEx BaseObject;

        #endregion

        #region Methods

        public MsgHook(InputPanelEx baseObj)
        {
            BaseObject = baseObj;
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_SETTINGCHANGE)
                BaseObject.InputMethodChanged(this, EventArgs.Empty);
            base.WndProc(ref m);
        }

        #endregion
    }

    #endregion

    #region Methods
    ///


    /// 支持输入法切换事件的输入面板
    ///

    public InputPanelEx()
    {
        Msg = new MsgHook(this);
    }

    #endregion
}


转:https://my.oschina.net/201003674/blog/288883



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • PyCharm中配置Pylint静态代码分析工具
    本文详细介绍如何在PyCharm中配置和使用Pylint,帮助开发者进行静态代码检查,确保代码符合PEP8规范,提高代码质量。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细解析了如何使用Python语言在STM32硬件平台上实现高效的编程和快速的应用开发。通过具体的代码示例,展示了Python简洁而强大的特性。 ... [详细]
author-avatar
罗帅飞1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有