热门标签 | 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



推荐阅读
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文探讨了《魔兽世界》中红蓝两方阵营在备战阶段的策略与实现方法,通过代码展示了双方如何根据资源和兵种特性进行战士生产。 ... [详细]
  • 本文深入探讨了 Python 中的循环结构(包括 for 循环和 while 循环)、函数定义与调用,以及面向对象编程的基础概念。通过详细解释和代码示例,帮助读者更好地理解和应用这些核心编程元素。 ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • python爬虫Demo
    1爬虫功能:爬取某域名下所有网页,比如爬取python文档 https:docs.python.orgzh-cn3 ,爬取之后, ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 开始之前CompositionAPI可以说是Vue3的最大特点,那么为什么要推出CompositionApi,解决了什么问题?通常使用 ... [详细]
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社区 版权所有